MATLAB的矩陣運算
本人今天主要學習的內容是:
1.矩陣運算的基本規則
2.從矩陣中提取數據
3.利用矩陣變量進行數值計算
4.創建和使用特殊矩陣
1.矩陣的定義
1)直接定義矩陣有兩種定義方式均可
>> C = [1,2,3;3,4,5;4,5,6]
C =
1 2 3
3 4 5
4 5 6
>> C = [1,2,3
3,4,5
4,5,6]
C =
1 2 3
3 4 5
4 5 6
2)如果一行有太多的元素需要跨行去寫,則省略號表示本行未完,轉入下一行
>> A = [1,2,3,...
3,4,5]
A =
1 2 3 3 4 5
3)可以用已經定義的矩陣來定義其他矩陣
>> B = [1,2];
>> S = [3,B]
S =
3 1 2
>> T = [30,10,20;S]
T =
30 10 20
3 1 2
4)可以通過圓括號加標號來修改矩陣元素的值
>> S(1) = 0
S =
0 1 2
5)可以通過圓括號加標號來增加矩陣元素
>> S(4) = 5
S =
0 1 2 5
>> S(8) = 8
S =
0 1 2 5 0 0 0 8
2.冒號的使用
1)可以使用冒號定義等差矩陣,使用兩個參數或者三個參數。兩個參數的默認步長爲1,三個參數的步長爲第2個參數
>> H = 1:8
H =
1 2 3 4 5 6 7 8
>> time = 0.0:0.5:2.0
time =
0 0.5000 1.0000 1.5000 2.0000
2)提取數據功能。個人以爲類似於Python中的list的切片功能,只不過這裏是矩陣而不是數組。
定義矩陣:
>> M = [1,2,3,4,5;
2,3,4,5,6;
3,4,5,6,7]
M =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
提取第一列:
>> x = M(:,1)
x =
1
2
3
提取第四列:
>> y = M(:,4)
y =
4
5
6
提取第一行
>> z = M(1,:)
z =
1 2 3 4 5
提取第二行和第三行:
>> w = M(2:3,:)
w =
2 3 4 5 6
3 4 5 6 7
提取第2行和第3行中第4列和第5列的元素:
>> w = M(2:3,4:5)
w =
5 6
6 7
使用M(:)可以把原矩陣轉換成一個長的列矢量,注意,原矩陣並沒有改變其存儲方式,僅僅是表示形式而已:
>> M(:)
ans =
1
2
3
2
3
4
3
4
5
4
5
6
5
6
7
>> M
M =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
提取單個元素,既可以用行下標和列下標來提取,也可以直接使用序號來提取。序號是指從M(:)中的第幾個元素。如下例中兩種方法是等價的
>> M(2,3)
ans =
4
>> M(8)
ans =
4
3.特殊矩陣
1)全零矩陣zeros
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
>> zeros(3,2)
ans =
0 0
0 0
0 0
>>
2)全1矩陣ones
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> ones(3,2)
ans =
1 1
1 1
1 1
>>
【注】全0矩陣和全1矩陣常用作佔位矩陣,用於程序的循環結構,這樣可以提高運行速度
>> ones(1,5)
ans =
1 1 1 1 1
>> b = ans * pi
b =
3.1416 3.1416 3.1416 3.1416 3.1416
>> zeros(1,5)
ans =
0 0 0 0 0
>> b = ans + pi
b =
3.1416 3.1416 3.1416 3.1416 3.1416
>>
3)對角矩陣
用函數diag
可以提取矩陣主對角線上的元素
>> A = [1,2,3;3,4,5;1,2,3]
A =
1 2 3
3 4 5
1 2 3
>> diag(A)
ans =
1
4
3
用diag使用兩個參數可以提取非主對角線上的元素,正數代表主對角線上方,負數代表主對角線下方。
>> A
A =
1 2 3
3 4 5
1 2 3
>> diag(A,1)
ans =
2
5
>> diag(A,-1)
ans =
3
2
>>
若輸入的是矢量而不是矩陣,則函數diag會把矢量作爲對角線元素而生成一個新的矩陣,並將矩陣的其他元素置零
>> B = [1,2,3];
>> diag(B)
ans =
1 0 0
0 2 0
0 0 3
>>
通過定義第二個參數,可以把矢量中的元素定義成矩陣中的任何一個對角線
>> diag(B,1)
ans =
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
4)魔方矩陣
函數 | 用法 |
---|---|
fliplr | 對矩陣的列進行左右對稱翻轉 |
flipud | 對矩陣的行進行上下對稱翻轉 |
magic(m) | 創建一個m*m的魔方矩陣 |
魔方矩陣時一種很有趣但是沒有實際用途的特殊矩陣,在魔方矩陣中,所有的行列已經對角線元素之和均相等
>> A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> sum(A) %按列求和
ans =
34 34 34 34
>> sum(A') %轉置後按列求和
ans =
34 34 34 34
>> sum(diag(A)) %對角線元素求和
ans =
34
>> fliplr(A) %對矩陣的列進行左右對稱翻轉
ans =
13 3 2 16
8 10 11 5
12 6 7 9
1 15 14 4
>> sum(diag(A)) %對角線元素的和
ans =
34
>>
MATLAB中可以產生任何大於2*2的魔方矩陣,魔方矩陣的解不是唯一的,也可能有其他的解。