MATLAB基礎學習(一)——計算基礎
參考文獻《MATLAB語言常用演算法程式集合》
MATLAB數值型別
1.變數與常量
(1)變數:是數值計算的基本單元,變數名字區分大小寫。
- 任何MATLAB語句的執行結果都可以顯示在螢幕上,同時賦值給指定的變數,沒有指定變數時,賦值給一個特殊的變數ans。
- MATLAB總以雙精度浮點數來執行所有的運算結果。
- 可以使用format命令控制資料的顯示格式,format隻影響結果的顯示,不影響計算與儲存。format使用見下表。
名稱 | 說明 |
---|---|
format short | 短格式(5位定點數) |
format long | 長格式(15位定點數) |
format short e | 短格式e方法 |
format long e | 長格式e方法 |
format bank | 2位十進位制格式 |
format short e | 十六進位制格式 |
測試一下
>> format short
>> test = 12.3
test =
12.3000
>> format long
>> test = 12.3
test =
12.300000000000001
>>
由測試結果顯示可知:short顯示的是4位小數而不是5位,與參考書有出處,具體原因仍待考證。目前以實際測量為準。
(2)常量:指在MATLAB中已經預先定義其數值的變數。MATLAB預設常量見下表。
名稱 | 說明 |
---|---|
pi | 圓周率 |
inf | 無窮大 |
NaN(或者nan) | 代表不定值(0/0) |
realmax | 最大正實數 |
realmix | 最小正實數 |
eps | 浮點數的相對誤差 |
i(或者j) | 虛數單位 |
nargin | 函式實際輸入引數個數 |
nargout | 函式實際輸出引數個數 |
ans | 預設變數名,以應答最近一次操作運算結果 |
2.字串
字串作為字元陣列用單引號' '
3.元胞陣列
元胞是元胞陣列的基本組成部分。元胞可以存放任何型別、任何大小的陣列,而且同一個元胞陣列中各元胞的內容可以不同。
使用花括號{ }
表示元胞陣列的內容,使用圓括號()
表示元胞元素。
使用celldisp函式可以顯示元胞陣列。
>> a = {'字串',100,ones(2,3)}
a =
'字串' [100] [2x3 double]
>>
上述元胞陣列包括了一個字串、一個常量100、一個2*3的矩陣
>> celldisp(a)
a{1} =
字串
a{2} =
100
a{3} =
1 1 1
1 1 1
>>
可以使用celldisp函式檢視陣列內容
4.構架陣列
構架陣列也能存放各類資料,使用指標的方式傳遞數值,使用.
操作符連線結構變數名和屬性名,例如使用parameter.temperature
表示某一個物件的溫度引數,使用parameter.humidity
表示這個物件的溼度引數等。
因此該構架陣列由兩個屬性組成。
5.物件
面向物件的MTALAB語言採用了多種物件,如自動控制中常用到的,傳遞函式模型物件(tf object)、狀態空間模型物件(ss object),零極點模型物件(zpk object)
MATLAB矩陣計算
1.建立矩陣
矩陣以左方括號[
開始,以右方括號]
結束,每一行元素用分號;
分割,每行中每個元素用空格或者,
分割。
>> a = [1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> b = [1 2;3 4]
b =
1 2
3 4
>>
繼續輸入
>> c = [a;7,8,9]
c =
1 2 3
4 5 6
7 8 9
可以看到,在原來矩陣基礎上加一行,得到新矩陣c
2.訪問矩陣
- 單個元素的訪問:c(3,2),訪問第3行第2列
c =
1 2 3
4 5 6
7 8 9
>> c(3,2)
ans =
8
- 整列元素的訪問:訪問第3列元素
>> c(:,3)
ans =
3
6
9
- 整行元素的訪問:訪問第1行元素
>> c(1,:)
ans =
1 2 3
- 整塊元素的訪問:訪問一個(2*2)的1-2行,2-3列組成的子塊矩陣
>> c(1:2,2:3)
ans =
2 3
5 6
3.常用特殊矩陣生成函式
函式名稱 | 說明 |
---|---|
zeros() | 生成元素全為0的矩陣 |
ones() | 生成元素全為1的矩陣 |
rand() | 生成均勻分佈隨機矩陣 |
randn() | 生成正態分佈隨機矩陣 |
magic() | 生成魔方矩陣 |
diag() | 生成對角矩陣 |
triu() | 生成上三角矩陣 |
tril() | 生成下三角矩陣 |
eye() | 生成單位矩陣 |
company() | 生成伴隨矩陣 |
hilb() | 生成Hilbert矩陣 |
vander() | 生成vander矩陣 |
hankel() | 生成hankel矩陣 |
hadamard() | 生成hadamard矩陣 |
4.常用矩陣函式運算
函式名稱 | 說明 |
---|---|
rot90() | 矩陣逆時針旋轉90度 |
flipud() | 矩陣上下翻轉 |
fliplr() | 矩陣左右翻轉 |
flipdim() | 矩陣的某維元素翻轉 |
shiftdim() | 矩陣的元素移位 |
eig() | 計算矩陣的特徵值與特徵向量 |
rank() | 計算矩陣的秩 |
trace() | 計算矩陣的跡 |
norm() | 計算矩陣的範數 |
poly() | 計算矩陣的特徵方程的根 |
通過eig()函式計算矩陣a的特徵向量b和特徵值c
>> a = [1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
>> [b,c] = eig(a)
b =
-0.2320 -0.7858 0.4082
-0.5253 -0.0868 -0.8165
-0.8187 0.6123 0.4082
c =
16.1168 0 0
0 -1.1168 0
0 0 -0.0000
>>
5.常用矩陣分解運算函式
函式名稱 | 說明 |
---|---|
eig() | 矩陣的特徵值分解 |
qr() | 矩陣的QR分解 |
schur() | 矩陣的Schur分解 |
svd() | 矩陣的奇異值分解 |
chol() | 矩陣的Cholesky分解 |
lu() | 矩陣的LU分解 |
通過lu()函式對矩陣a進行LU分解,得到上三角陣U、下三角陣L、置換矩陣P
>> a = [6,2,1;2,3,1;1,1,1]
a =
6 2 1
2 3 1
1 1 1
>> [L,U,P] = lu(a)
L =
1.0000 0 0
0.3333 1.0000 0
0.1667 0.2857 1.0000
U =
6.0000 2.0000 1.0000
0 2.3333 0.6667
0 0 0.6429
P =
1 0 0
0 1 0
0 0 1
>>
如有不對的地方歡迎大家指正交流