第一章 基本的數學運算與矩陣運算
第一章 基本的數學運算與矩陣運算
MATLAB基本語法
變數
-
MATLAB中的變數不需要宣告
-
變數名區分大小寫,強調變數名長度不超過63位
-
變數名以字母開頭,可以由字母、數字和下劃線組成,但不能使用標點
-
MATLAB在的保留變數不適合做變數名
-
常見的保留變數
保留變數 含義 ans
儲存上一條語句的運算的結果 i、j
虛數單位 Inf
無窮(\(∞\)) eps
浮點相對精度,即1.0到下一個浮點數之間的距離(值為\(2.2204e\mathop{{}}\nolimits^{{-16}}\)) NaN
非數,表示未定義或不可表示的值 pi
圓周率 -
可以使用\(iskeyword\)命令可以檢視MATLAB語言所有的關鍵字,這些關鍵字也不允許被用作變數名
-
-
在MATLAB中,變數的呼叫優先順序高於函式,因此變數名不應該覆蓋內建函式
- 例如:
cos='This string.'; cos(8) % 對字串進行索引取值,取第8個字元得到'r'
-
若某函式被變數名所覆蓋,則呼叫
clear <變數名>
可以取消繫結在該函式名上的變數名謹慎使用
clear
命令,因為該命令後若不加引數,則表示清除當前工作區內的所有變數
變數型別
MATLAB中的變數型別有: logical
,char
numeric
,cell
,struct
以及由他們組成的陣列或矩陣
-
整型
-
帶符號整型
分為帶符號8位、16位、32位、64位整型int8();int16();int32();int64();
-
無符號整型
分為無符號8位、16位、32位、64位整型uint8();uint16();uint32();uint64();
-
-
浮點型
-
單精度型
在記憶體中佔用4個位元組single() %將其他型別轉換成單精度
-
雙精度型
在記憶體中佔用8個位元組,數值資料預設是double型別double() %將其他型別轉換成雙精度
-
-
複數型
- 分為實部和虛部,預設為雙精度型
real() %求複數的實部 imag() %求複數的虛部
判斷變數資料型別的函式
下列函式可以對變數型別進行判斷:
函式 | 作用 |
---|---|
isinteger |
判斷輸入引數是否為整型數陣列 |
islogical |
判斷輸入引數是否為邏輯量陣列 |
isnumeric |
判斷輸入引數是否為數值陣列 |
isreal |
判斷輸入引數是否為實數陣列 |
ischar |
判斷輸入引數是否為字元陣列 |
iscell |
判斷輸入引數是否為元胞陣列 |
isfloat |
判斷輸入陣列是否為浮點陣列 |
ishandle |
判斷輸入陣列是否有效的圖形控制代碼 |
isempty |
判斷輸入陣列是否為空 |
isprime |
確定哪些陣列元素為質數 |
isnan |
確定哪些陣列元素為NaN |
isinf |
確定哪些陣列元素為Inf |
isequal |
判斷陣列是否相等 |
數字型變數的顯示格式
直接定義的數字型變數,預設是以double
形式儲存的
我們可以通過format <顯示格式>
改變數字型變數的顯示格式
顯示格式 | 說明 | 例子 |
---|---|---|
short |
短定點格式.顯示小數點後4位 | 3.1416 |
long |
長定點格式.對double 型別變數顯示小數點後15位,對float 型別變數顯示小數點後7位. |
3.141592653589793 |
shortE |
短科學計數法,顯示小數點後4位.並帶有科學計數法標記. | 3.1416e+00 |
longE |
長科學計數法.對double 型別變數顯示小數點後15位,對float 型別變數顯示小數點後7位.並帶有科學計數法標記. |
3.141592653589793e+00 |
bank |
銀行格式.顯示小數點後2位. | 3.14 |
hex |
十六進位制格式. | 400921fb54442d18 |
rat |
比例格式 | 355/113 |
>> x = 1.3333333333;
>> format short
>> x
x =
1.3333
>> format shortE
>> x
x =
1.3333e+00
MATLAB命令列
-
使用行尾 ; 抑制輸出: 在一行命令後使用
;
抑制輸出,否則運算結果將被顯示在終端上. -
其他實用的命令:
命令 作用 clc
清除終端的輸出 clear
清除當前工作區內所有變數 who
以簡略格式顯示工作區內所有變數 whos
以複雜格式顯示工作區內所有變數
MATLAB數字運算
MATLAB表示數學表示式
MATLAB常見運算子,優先順序順序(從前到後):括號()
、乘方^
、乘除法*
,/
、加減法+
,-
數學表示式例子:
數學表示式 | MATLAB命令 |
---|---|
\(cos ( ( 1 + 2 + 3 + 4 ) 3 5 ) \cos\left(\sqrt{\frac{{\left(1+2+3+4\right)}^3}{5}}\right)cos(5(1+2+3+4)3)\) | cos(sqrt((1+2+3+4)^3/5)) |
\({sin \left( \sqrt{{ \pi }} \left) +ln \left( tan \left( 1 \left) \right) \right. \right. \right. \right. }\) | sin(sqrt(pi))+log(tan(1)) |
\(2\mathop{{}}\nolimits^{{3.5 \times 1.7}}\) | 2^(3.5*1.7) |
\(e\mathop{{}}\nolimits^{{sin \left( 10 \right) }}\) | exp(sin(10)) |
內建常用的數學函式
- 三角函式(正弦:
sin
、餘弦:cos
、正切:tan
、餘割:csc
、正割:sec
、餘切:cot
等)
-
引數分為弧度和角度,如果是角度要在函式名後加
d
,以示區別sin(pi/2) %結果為1 sind(90) %結果為1
- 指數和對數函式(常用)
函式名 | 含義 |
---|---|
exp |
指數 |
log |
自然對數 |
log10 |
常用對數(以 10 為底) |
log2 |
以 2 為底的對數和浮點數分解 |
sqrt |
平方根 |
-
abs函式
-
可以求實數的絕對值、複數的模、字串的ASCII碼值
abs(-4) %結果為4 abs(3+4i) %結果為5 abs('a') %結果為97
-
-
用於取整的函式
- fix函式(fix:固定)固定取靠近0的那個整數,即捨去小數取整
- floor函式(floor:地板)向下取整
- ceil函式(ceil:天花板)向上取整
- round函式按照四捨五入取整
fix(-6.6) %結果為-6 fix(6.6) %結果為6 floor(-4.5) %結果為-5 floor(4.5) %結果為4 ceil(-3.2) %結果為-3 ceil(3.2) %結果為4 round(1.1) %結果為1
-
其他常用函式
- 用於求餘函式
-
rem函式,兩個引數,第一個是被求餘的數值,第二個是對什麼值求餘
rem(6.5,5) %結果為1.5000
-
用於求素數的函式
- siprime函式,如果是素數則返回1,不是則返回0
%輸出1到100的素數 x=1:100; k = isprime(x); %將全為0、1的數值賦值給k矩陣 k1 = find(k); %查詢非0值的下標並賦值給k1 p = x(k1) %輸出對應下標的矩陣
-
- 用於求餘函式
MATLAB矩陣運算
矩陣的建立
直接輸入
在MATLAB中,使用[]
將待輸入的矩陣內容括起來,使用空格或逗號,分隔行內變數,使用分號分隔每一行
MATLAB命令 | 矩陣 |
---|---|
[1 2 3 4] |
$[ 1 \ \ 2 \ \ 3 \ \ 4 ] $ |
[1,2,3,4] |
$[ 1 \ \ 2 \ \ 3 \ \ 4 ] $ |
[1; 2; 3; 4] |
\({ \left[ {{\left. \begin{array}{*{20}{l}}{1}\\{2}\\{3}\\{4}\end{array} \right] }}\right. }\) |
分塊矩陣
一個大的矩陣可由多個小矩陣拼接而成
>> A = [1,2,3;4,5,6;7,8,9];
>> B = [-1,-2,-3;-4,-5,-6;-7,-8,-9];
>> C = [A,B;B,A]
C =
1 2 3 -1 -2 -3
4 5 6 -4 -5 -6
7 8 9 -7 -8 -9
-1 -2 -3 1 2 3
-4 -5 -6 4 5 6
-7 -8 -9 7 8 9
%建立複數矩陣
>> A = [1,2,3;4,5,6]
>> B = [4,5,6;7,8,9]
>> C = A+B*i
C =
1.0000 + 4.0000i 2.0000 + 5.0000i 3.0000 + 6.0000i
4.0000 + 7.0000i 5.0000 + 8.0000i 6.0000 + 9.0000i
冒號表示式
-
格式:e1:e2:e3
-
e1:初始值
-
e2:步長,省略表示步長為1
-
e3:終止值
-
建立一個以e1開始,e2結束,步長為e2的行向量
>> D = 1:3:10 D = 1 4 7 10
-
-
linspace函式
-
格式:linspace(a,b,n)
- a:第一個元素
- b:最後一個元素
- n:元素總數,省略預設為100
- 建立一個以a開始,b結束,共有n個數值的行向量,等間距
>> linspace(1,pi,6) ans = 1.0000 1.4283 1.8566 2.2850 2.7133 3.1416
-
-
logspace函式
-
格式:logspace(a,b,n)
- a:第一個元素
- b:最後一個元素
- n:元素總數,省略預設為100
- 建立一個以a開始,b結束,共有n個數值的行向量,對數間隔的資料
>> logspace(0, 2, 6) ans = 1.0000 2.5119 6.3096 15.8489 39.8107 100.0000
-
定義特殊矩陣
命令 | 得到的結果 |
---|---|
eye(n) |
得到一個\(n\times n\)的單位矩陣 |
zeros(n1, n2) |
得到一個\({n\mathop{{}}\nolimits_{{1}} \times n\mathop{{}}\nolimits_{{2}}}\)的全0矩陣 |
ones(n1, n2) |
得到一個\({n\mathop{{}}\nolimits_{{1}} \times n\mathop{{}}\nolimits_{{2}}}\)的全1矩陣 |
diag(vector) |
得到一個以向量vector 中內容為對角線的對角矩陣 |
隨機數矩陣
命令 | 得到的結果 |
---|---|
rand |
均勻分佈的隨機數 |
randn |
正態分佈的隨機數 |
randi |
均勻分佈的偽隨機整數 |
randperm |
整數的隨機排列 |
結構矩陣
-
格式:結構矩陣元素.成員名 = 表示式
>> a(1).x1 = 10;a(1).x2 = 'zhang';a(1).x3 = [1,2;3,4]; >> a(2).x1 = 20;a(2).x2 = 'li';a(2).x3 = [5,6;7,8]; >>a a = 包含以下欄位的 1×2 struct 陣列: x1 x2 x3 >> a(1) ans = 包含以下欄位的 struct: x1: 10 x2: 'zhang' x3: [2×2 double] >> a(2) ans = 包含以下欄位的 struct: x1: 20 x2: 'li' x3: [2×2 double]
-
結構矩陣的常用函式
函式 作用 struct
建立結構體 struct2cell
將結構體轉換為元胞陣列 cell2struct
將元胞陣列轉換為結構體 isstruct
判斷某變數是否是結構體 structfun
對結構體的每個欄位都應用某函式 fieldnames
獲取結構體的所有欄位名 isfield
判斷結構體是否包含某欄位 getfield
獲取結構體某欄位的值 setfield
為結構體中的某欄位賦值 rmfield
刪除結構體中的某欄位 orderfields
為結構體欄位排序
單元矩陣(元胞陣列)
元胞陣列是一個可以容納不同型別元素的資料結構
我們可以使用{ }
像定義矩陣一樣定義元胞陣列:
A = { [1 4 3; 0 5 8; 7 2 9] 'Anne Smith' ;...
3+7i -pi:pi:pi}
有兩種方式訪問元胞陣列中的資料,分別是: 單元索引()
和內容索引{}
.
因為元胞陣列的子集仍為元胞陣列,在索引器內容的使用,我們有必要指明我們要訪問的的是一個子元胞陣列還是元胞陣列對應區域中的內容.
- 使用單元索引
()
,我們得到的是一個子元胞陣列. - 使用內容索引
{}
,我們得到的是元胞陣列對應區域中的內容
詳細請閱讀Matlab幫助文件
元胞陣列的常用函式
函式 | 作用 |
---|---|
cell |
建立一個元胞陣列 |
iscell |
判斷某變數是否為元胞陣列 |
cell2mat |
將元胞陣列轉為矩陣 |
cell2struct |
將元胞陣列轉為結構體 |
mat2cell |
將陣列轉換為指定大小元胞陣列 |
num2cell |
將陣列轉換為相同大小的元胞陣列 |
struct2cell |
將結構體轉換為元胞陣列 |
celldisp |
遞迴顯示元胞陣列中的內容 |
cellplot |
以影象形式繪製元胞陣列的結構 |
cellfun |
對元胞陣列的每個元胞應用某函式 |
高維元胞陣列
一個三維的元胞陣列可以有行(row),列(column),層(layer)三個維度.在對元胞陣列進行索引時,優先順序從高到低的順序分別是: 行→列→層
使用cat
函式可以在指定維度上對元胞陣列進行拼接
矩陣的索引
-
MATLAB中的矩陣是以列先儲存的.且索引下標從1開始
-
矩陣有兩種索引方式: 按一維索引和按二維索引,對於一個一般的矩陣,其索引順序如下:
\[{ \left[ {{\left. \begin{array}{*{20}{l}} {1\text{ }\text{ }4\text{ }\text{ }7}\\ {2\text{ }\text{ }5\text{ }\text{ }8}\\ {3\text{ }\text{ }6\text{ }\text{ }9} \end{array} \right] }}\right. }or{ \left[ {{\left. \begin{array}{*{20}{l}} { \left( 1,1 \left) \text{ }\text{ } \left( 1,2 \left) \text{ }\text{ } \left( 1,3 \right) \right. \right. \right. \right. }\\ { \left( 2,1 \left) \text{ }\text{ } \left( 2,2 \left) \text{ }\text{ } \left( 2,3 \right) \right. \right. \right. \right. }\\ { \left( 3,1 \left) \text{ }\text{ } \left( 3,2 \left) \text{ }\text{ } \left( 3,3 \right) \right. \right. \right. \right. } \end{array} \right] }}\right. } \] -
矩陣的索引可以使用冒號
:
,表示選取所有行或所有列 -
矩陣的索引可以是一個或兩個向量,表示選中向量內的所有行或所有列
例子:
原矩陣 | 索引 | 得到的結果 | 解釋 |
---|---|---|---|
\({A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }}\) | A(8) |
\(6\) | 取矩陣第8個元素 |
\({A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }}\) | A([1 3 5]) |
$[ 1 7 5 ] $ | 分別取矩陣第[1 3 5] 個元素放入新矩陣的對應位置 |
\({A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }}\) | A([1 2; 3 4]) |
\({ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }4}\\{7\text{ }\text{ }2}\end{array} \right] }}\right. }\) | 分別取矩陣第[1 2; 3 4] 個元素放入新矩陣的對應位置 |
\({A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }}\) | A(3,2) |
\(8\) | 取矩陣第3行第2列的元素 |
\({A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }}\) | A([1,2], :) |
\({ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\end{array} \right] }}\right. }\) | 取矩陣第[1 2] 行和所有列的交叉項 |
\({A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }}\) | A([1 3], [1 2]) |
\({ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2}\\{7\text{ }\text{ }8}\end{array} \right] }}\right. }\) | 取矩陣第[1 3] 行和第[1 2] 列的交叉項 |
-
序號和下標的轉換
-
sub2ind函式:將矩陣中指定元素的行列下標轉換成儲存的序號
-
格式:D = sub2ind(S,I,J)
- D:序號
- S:行和列組成的向量,可用size函式獲取
- I:轉換矩陣元素的行下標
- J:轉換矩陣元素的列下標
>> A = [11:13;15:17] A = 11 12 13 15 16 17 >> D = sub2ind(size(A),[1,2;2,2],[1,1;3,2]) %獲取(1,1)、(2,1)、(2,3)、(2,2)的序號並組成矩陣賦值給D D = 1 2 6 4
-
-
ind2sub函式:將矩陣中指定元素的序號轉換成行列下標
-
格式:[I,J] = ind2sub(S,D)
- I:行下標
- J:列下標
- S:行和列組成的向量,可用size函式獲取
- D:序號
>> [I,J] = ind2sub([3,3],[1,3,5]) %獲取3x3矩陣中序號為1、3、5的行列下標 I = 1 3 2 J = 1 1 2 %下標為(1,1)、(3,1)、(2,2)
-
-
矩陣的操作
運算子
運算子 | 操作 | 形式 | 例子 |
---|---|---|---|
+ |
矩陣與向量相加 | A+b |
[6 3] + 2 = [8 5] |
- |
矩陣與向量相減 | A-b |
[6 3] - 2 = [4 1] |
+ |
矩陣與矩陣對應位置相加 | A+B |
[6 3] + [4 8] = [10 11] |
- |
矩陣與矩陣對應位置相減 | A-B |
[6 3] - [4 8] = [2 -5] |
* |
矩陣與矩陣相乘 | A*B |
[6 3] * [4 8]' = 48 |
.* |
矩陣與矩陣對應位置相乘 | A.*B |
[6 3] * [4 8] = [24 24] |
/ |
矩陣與矩陣右除(等價於A*inv(B) ) |
A/B |
[6 3] / [4 8] = 0.6 |
\ |
矩陣與矩陣左除(等價於inv(A)*B ) |
A\B |
[6 3] / [4 8] = [0.06667 1.3333; 0 0] |
./ |
矩陣與矩陣對應位置右除 | A./B |
[6 3] ./ [4 8] = [1.5 0.375] |
.\ |
矩陣與矩陣對應位置左除 | A.\B |
[6 3] .\ [4 8]' = [0.6667 2.6667] |
^ |
矩陣與向量乘方 | A^b |
[1 2; 3 4]^3 = [37 54; 81 118] |
.^ |
矩陣與矩陣對應位置乘方 | A.^B |
[1 2; 3 4].^[1 2; 3 4] = [1 4; 27 256] |
函式
對於矩陣:
\[{A\text{ }=\text{ }{ \left[ {{\left. \begin{array}{*{20}{l}}{1\text{ }\text{ }2\text{ }\text{ }3}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{7\text{ }\text{ }8\text{ }\text{ }9}\end{array} \right] }}\right. }} \]函式 | 作用 | 例子 | 結果 |
---|---|---|---|
max(A, [], dim) |
獲取矩陣A 的dim 維度上的最大值(dim =1,代表列;dim =1,代表行) |
max(A, [], 1) |
\([ 7 \ \ 8\ \ 9]\) |
min(A, [], dim) |
獲取矩陣A 的dim 維度上的最小值(dim =1,代表列;dim =1,代表行) |
min(A, [], 2) |
\([ 1 \ \ 4\ \ 7]\) |
sum(A, dim) |
獲取矩陣A 的dim 維度上的和 |
sum(A, 1) |
\([ 12 \ \ 15\ \ 18]\) |
mean(A, dim) |
獲取矩陣A 的dim 維度上的平均值 |
mean(A, 1) |
\([4 \ \ 5\ \ 6]\) |
sort(A, dim, direction) |
獲取矩陣A 的dim 維度上按direction 順序排序結果('ascend' 表示升序(預設值),'descend' 表示降序) |
sort(A, 1, 'descend') |
\({ \left[ {{\left. \begin{array}{*{20}{l}}{7\text{ }\text{ }8\text{ }\text{ }9}\\{4\text{ }\text{ }5\text{ }\text{ }6}\\{1\text{ }\text{ }2\text{ }\text{ }3}\end{array} \right] }}\right. }\) |
size(A, dim) |
獲取矩陣A 的dim 維度上的形狀.若不指定dim ,則返回整個矩陣的形狀. |
size(A) |
\([ 3 \ \ 3 ]\) |
find(A, n) |
獲取矩陣A 前n 個非零元素的索引 |
find(A,5) |
\([1 \ \ 2\ \ 3\ \ 4\ \ 5]\) |
改變矩陣的形狀
-
reshape函式:在矩陣元素不變的情況下,將矩陣A重新排成mxn的矩陣
- 只改變原矩陣的行數和列數不改變原矩陣元素的個數和儲存順序
- reshape(A,m,n)
- A:原矩陣
- m:行數
- n:列數
>> A = [1:4;5:8;9:12] A = 1 2 3 4 5 6 7 8 9 10 11 12 >> B = reshape(A,4,3) B = 1 6 11 5 10 4 9 3 8 2 7 12
-
A( : ):將矩陣A堆疊成一個列向量
>> A = [1:3;4:6] A = 1 2 3 4 5 6 >> B = A(:) B = 1 4 2 5 3 6
MATLAB字元處理
字串的表示
-
字串是用單引號括起來的字元序列
-
如果字串中字元含有單引號,則該單引號字元要用兩個單引號表示
>> 'I''m a student' ans = 'I'm a student'
-
建立多行字串,形成字串矩陣
- 多行字串的列數必須都相等,用空格調節
%求ch的1到5位的字串、反向表示、小寫字母轉成大寫字母及ch的長度 ch = 'ABc123Def456'; %ch的1到5位的字串 subch = ch(1:5); subch %反向表示 revch = ch(end:-1:1); revch %小寫字母轉成大寫字母 k = find(ch>='a'&ch<='z'); ch(k) = ch(k)-('a'-'A'); ch %ch的長度 length(ch) %下面是結果 subch = 'ABc12' revch = '654feD321cBA' ch = 'ABC123DEF456' ans = 12
字串的操作
-
字串的執行
格式:eval(s)
- s:字串
- 作用:將字串轉換成對應matlab中的命令執行
eval('clear') %等價於 clear 命令
-
字串與數值之間的轉換
- abs函式和double函式:將字串轉化成對應的ASCII碼矩陣
- char函式:將ASCII碼轉化成對應的字串矩陣
-
字串的比較
- 利用關係運算
- 兩個字串長度相等
- 依次對對應ASCII碼進行比較
- 結果是一個數值(0或1)向量
- 利用字串比較函式
- strcmp(s1,s2):比較s1和s2是否相等,結果為1或0
- strncmp(s1,s2,n):比較兩個字串前n個字元是否相等,結果為1或0
- strcmpi(s1,s2):比較在忽略大小寫的情況下,s1和s2是否相等,結果為1或0
- strncmpi(s1,s2,n):比較在忽略大小寫的情況下,兩個字串前n個字元是否相等,結果為1或0
- 利用關係運算
-
字串的查詢和替換
- findstr(s1,s2):返回短字串在長字串中的開始的位置
- strrep(s1,s2,s3):將s1中的子字串s2替換為字串s3
檔案讀寫
MATLAB支援的檔案型別如下:
檔案內容 | 副檔名 | 讀取檔案的函式 | 寫入檔案的函式 |
---|---|---|---|
MATLAB資料 | *.mat |
load |
save |
Excel表格 | *.xls ,*.xlsx |
xlsread |
xlswrite |
空格分隔的數字 | *.txt |
load |
save |
讀寫MATLAB格式的資料
MATLAB工作區內的資料可以以*.mat
格式儲存在檔案中.使用save
函式將資料存入檔案,使用load
函式從檔案中讀取資料.
-
save
函式的語法如下:
save(filename,variables)
將變數variables
以二進位制形式存入檔案中.save(filename,variables,'-ascii')
將變數variables
以文字形式存入檔案中.
-
load
函式的語法如下:
load(filename)
從二進位制形式檔案中讀取資料.load(filename,'-ascii')
從文字形式檔案中讀取資料.
其中引數filename
和variables
都是字串格式,若不指定variables
引數,則將當前工作區內所有變數存入檔案中.
複雜的資料格式,如
struct
和cell
,不支援以二進位制格式儲存.
讀寫Excel表格
使用xlsread
和xlswrite
函式可以讀寫Excel資料,語法如下:
-
讀取Excel檔案的語法:
[num,txt,raw] = xlsread(filename,sheet,xlRange)
Score = xlsread('04Score.xlsx') Score = xlsread('04Score.xlsx', 'B2:D4') [Score Header] = xlsread('04Score.xlsx')
-
寫入Excel的語法:
xlswrite(filename,A,sheet,xlRange)
M = mean(Score); xlswrite('04Score.xlsx', M, 1, 'E2:E4'); xlswrite('04Score.xlsx', {'Mean'}, 1, 'E1');