MATLAB系列:矩陣運算筆記(一)

0x00 前言

文章中的文字可能存在語法錯誤以及標點錯誤,請諒解;

如果在文章中發現代碼錯誤或其它問題請告知,感謝

0x01 矩陣

1.矩陣定義

矩陣是由m*n個數 aij (i = 1,2…,m,j = 1,2,…,n) 排列成m行n列,記成:
(a11a12a1na21a22a2nam1am2amn) \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots &\vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{pmatrix}

該矩陣稱爲m* n 矩陣,記成Am *n 。若m=n,則該矩陣稱爲n階矩陣(n階方陣)。

2.矩陣的生成

矩陣的生成有直接輸入法、M文件生成法以及文本文件生成法。
1)直接輸入法
可以再命令行窗口直接定義矩陣,若定義時“[ ]”內無內容,表示爲一個空矩陣:

例1:
直接輸入法定義矩陣1。

>> A = [1 2 3; 4 5 6; 7 8 9]

在這裏插入圖片描述
例2:
直接輸入法定義矩陣2。

>> A = [1 1+i 2;2 4+2i 4]

在這裏插入圖片描述

2 ) M文件生成法
若矩陣的規模比較大,適合使用M腳本文件進行創建矩陣。

例3:
M文件生成發定義矩陣。

在M腳本文件中編寫一個文件名爲sample.m的M文件:
M文件中:

%%sample.m
A = [123 33 44 55 66 77 77 89 99 22;
      33 44 33 987 53 3 32 45 12 32;
      203 303 0 03 32 23 00 5 34 34;
      2 333 444 94 94 82 23 43 43 3;]

編寫後保存爲sample.m格式文件。

命令行窗口中:

>>sample

在這裏插入圖片描述
3)文本文件生成法
建立文本文件,在命令行窗口調用該文件

例4:
文本文件生成法定義矩陣。

在記事本中創建名爲“test.txt”文本:
在這裏插入圖片描述
在命令行窗口中調用以及使用:

>> load test.txt
>> test

在這裏插入圖片描述

3.創建特殊矩陣

可以使用函數直接創建特殊矩陣:

>>eye(n) %%創建n*n單位矩陣
>>eye(m, n) %%創建m*n單位矩陣
>>ones(n) %%創建n*n全1矩陣
>>ones(m,n) %%創建m*n全1矩陣
>>zeros(m,n) %%創建全0矩陣
>>rand(n) %%[0,1]區間內創建一個n*n均勻分佈的隨機矩陣
>>rand(m, n) %%[0,1]區間內創建一個m*n均勻分佈的隨機矩陣
>>compan(P) %%創建係數向量是P的多項式的伴隨矩陣
>>diag(v) %%創建一個向量v中的元素爲對角的對角矩陣
>>hilb(n) %%創建n*n的Hilbert矩陣
>>magic(n) %%生成n階魔方矩陣
>>sparse(A) %%將矩陣A轉化爲稀疏矩陣形式,即由A的非零元素和下標構成稀疏矩陣S。若A本身爲稀疏矩陣,則返回A本身。

4.矩陣的修改

矩陣可以進行元素修改、抽取等操作。
1)矩陣元素修改

命令名 說明
D = [A;b c] A爲原矩陣,B、C中包含要擴充的元素,D爲擴充之後的矩陣
A(m,:) 刪除A的第m行
A(:,n) 刪除A的第n列
A(m,n) = a 對A的第m行n列元素進行賦值
A(m,:) = [a b …] 對A的第m行進行賦值
A(:,n) = [a b …] 對A的第n列進行賦值

例5:
修改矩陣。

>> A = [2 3 4; 5 6 7];
>> B = eye(2);
>> C = zeros(2,1);
>> D = [A;B C]

在這裏插入圖片描述

2)矩陣變維
矩陣變維使用reshape()函數,調用格式爲:reshape(X,m,n),將矩陣變維爲m行n列矩陣。

例6:
矩陣變維。

>> A = 1:12;
>> B = reshape(A,2,6)

在這裏插入圖片描述

3)矩陣的變向

命令名 說明
rot(90) 將A矩陣逆時針方向旋轉90度
rot(90,k) 將A逆時針方向旋轉90*k度,k可爲整數
fliplr(A) 將A左右翻轉
flipud(A) 將A上下翻轉
flipdim(X,dim) dim = 1時對行翻轉,dim = 2時隊列翻轉

例7:
矩陣變向。

>> A = 1:12;
>> C = zeros(3,4);
>> C(:) = A(:)
>>flipdim(C,1)
>>flipdim(C,2)

在這裏插入圖片描述

4)矩陣抽取
對矩陣進行對角元素或上下三角矩陣元素抽取。

命令名 說明
diag(A,k) 抽取矩陣A的第k條對角線上的元素向量。k = 0抽取主對角線,k>0抽取上方第k條對角線上的元素,k<0時抽取下方第k條對角線上的數
diag(A) 抽取主對角線
diag(v,k) 使得v爲所得矩陣第k條對角線上的元素向量
diag(v) 使得v爲所得矩陣主對角線上的元素向量
tril(A) 提取矩陣A的主下三角形
tril(A,k) 提取矩陣A的第k條對角線下面部分(包括第k條對角線)
triu(A) 提取矩陣A的主上三角形
triu(A,k) 提取矩陣A的第k條對角線上面部分(包括第k條對角線)

例8:
矩陣抽取。

>> A = magic(4);
>> v = diag(A,2)
>> tril(A,-1)
>> triu(A)

在這裏插入圖片描述

0x02 矩陣數學運算

矩陣基本運算包括加、減、乘、數乘、點乘、乘方、左除、右除、求逆。
加、減、乘對應運算符爲+、-、* 。
矩陣除法爲MATLAB獨有的,分爲左除和右除,相應運算符爲\和/。方程AX=B的解是X=A\B,方程XA的解是X=A\B。

1.矩陣加法

設A=(aij),B=(bij),都是m*n矩陣,矩陣A與矩陣B的和記爲A+B,規定爲:
A+B=[a11+b11a12+b12...a1n+b1na21+b21a22+b22...a2n+b2n............am1+bm1am2+bm2...amn+bmn] A+B = \begin{bmatrix} a_{11}+b_{11}&a_{12}+b_{12}& ... &a_{1n}+b_{1n}\\ a_{21}+b_{21}&a_{22}+b_{22}& ... &a_{2n}+b_{2n}\\ ...&...&...&...\\ a_{m1}+b_{m1}&a_{m2}+b_{m2}& ... &a_{mn}+b_{mn}\\ \end{bmatrix}
滿足交換律和結合率:
交換律:A+B=B+A
結合率:(A+B)+C = A+(B+C)

例8:
矩陣驗證矩陣交換律和結合律。

>> A = [1 2 3 4;5 6 7 8];
>> B = [2 4 6 8;1 3 5 7];
>> C = [8 7 6 5;4 3 2 1];
>> A+B
>> B+A
>>(A+B)+C
>>A+(B+C)

在這裏插入圖片描述

2.矩陣乘法

1)數乘運算
λ\lambda與矩陣A=(aij)乘積記爲λ\lambdaA或Aλ\lambda

λA=[λa11λa12...λa1nλa21λa22...λa2n............λam1λam2...λamn] \lambda A = \begin{bmatrix} \lambda a_{11}&\lambda a_{12}& ... &\lambda a_{1n}\\ \lambda a_{21}&\lambda a_{22}& ... &\lambda a_{2n}\\ ...&...&...&...\\ \lambda a_{m1}&\lambda a_{m2}& ... &\lambda a_{mn}\\ \end{bmatrix}

矩陣滿足下列規律:
λ\lambdaμ\muA) = (λ\lambdaμ\mu)A
(λ\lambda+μ\mu)A = λ\lambdaA +μ\muA
λ\lambda(A+B) = λ\lambdaA+λ\lambdaB

例9:
數乘運算。

>> A = [1 2 3; 4 5 6];
>> 5*A

在這裏插入圖片描述
2)乘運算
設A(aij)是一個 m * s矩陣 ,B=b(ij)是一個s* n矩陣,規定A與B的積爲一個m*n矩陣C=(cij):
cij = ai1+b1j+ai2+b2j+…+aisbsj
i = 1,2,…,m; j = 1,2,…,n。

A列數要和B行數相同;
C行數等於A行數,C列數等於B列數;
C的m行n列元素值等於A的m行元素與B的列元素對應的值積的和。

[ai1ai2...ain][b1jb2j...bsj]=Cij \begin{bmatrix} a_{i1}& a_{i2}& ... & a_{in}\\ \end{bmatrix} \begin{bmatrix} b_{1j}\\ b_{2j}\\ ...\\ b_{sj}\\ \end{bmatrix} =C_{ij}
例10:
矩陣乘法。

>> A = [1 2 3; 4 5 6];
>> B = [2 3 4; 5 6 4;2 3 4];
>> A*B

在這裏插入圖片描述
注意:AB =\cancel{=} BA
[a1a2a3][b1b2b2]=[a1b1+a1b2+a1b3] \begin{bmatrix} a_{1}& a_{2}& a_{3}\\ \end{bmatrix} \begin{bmatrix} b_{1}\\ b_{2}\\ b_{2}\\ \end{bmatrix} = \begin{bmatrix} a_{1}b_{1}+a_{1}b_{2}+a_{1}b_{3}\\ \end{bmatrix}

[a1a2a2][b1b2b3]=[a1b1a1b2a1b3a2b1a2b2a2b3a3b1a3b2a3b3] \begin{bmatrix} a_{1}\\ a_{2}\\ a_{2}\\ \end{bmatrix} \begin{bmatrix} b_{1}& b_{2}& b_{3}\\ \end{bmatrix} = \begin{bmatrix} a_{1}b_{1}&a_{1}b_{2}&a_{1}b_{3}\\ a_{2}b_{1}&a_{2}b_{2}&a_{2}b_{3}\\ a_{3}b_{1}&a_{3}b_{2}&a_{3}b_{3}\\ \end{bmatrix}
3)點乘運算
矩陣點乘運算指將兩個矩陣中同位置元素進行相乘運算,將積保存在原位置組成新元素。

例11:
點乘運算。

>> A = [1 2 3; 4 5 6];
>> B = [2 3 4; 5 6 4];
>> A.*B

在這裏插入圖片描述

3.矩陣除法

左除A\B時,A的行數要和B的行數一致,計算右除A/B時,A的列數要和B的列數一致。
1)左除運算
矩陣的特殊性,AB=\cancel{=} BA,除法也需要區分左右。
線性方程組D*X=B,若D爲非奇異矩陣,即它的逆矩陣inv(D)存在,則其解爲X=inv(D)*B=D\B。符號“\”稱爲左除 ,即分母放在左邊。左除條件爲:B的行數等於D的階數(D的行數和列數相同,簡稱階數)。

例12:

>> A = [1 2;2 1];
>> B = [2 3;3 4];
>> C = A*B
>> D = A\C
>> E = inv(A)*C

在這裏插入圖片描述

2)右除運算
若方程組表示X*D=B,D爲非奇異矩陣,即它的它的逆矩陣inv(D)存在,則其解爲X=B*inv(D)=B/D。符號“/”稱爲右除,即分母放在右邊。右除條件爲:B的列數等於D的階數(D的行數和列數相同,簡稱階數)。

例13:

>> A = [1 2;2 1];
>> B = [2 3;3 4];
>> C = A*B
>> D = C/B
>> E = C*inv(B)

在這裏插入圖片描述

以上。

參考文檔:
1.https://www.zybuluo.com/codeep/note/163962(Markdown 公式指導手冊)
2.https://blog.csdn.net/u013647759/article/details/85635162(矩陣空格公式方程組)
3.https://blog.csdn.net/katherine_hsr/article/details/79179622(數學符號和公式)
4.天工在線.中文版MATLAB2018從入門到精通(實戰案例版)[M].北京:中國水利水電出版社,2018.
5.https://blog.csdn.net/clam_clam/article/details/7184991

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章