0x00 前言
文章中的文字可能存在語法錯誤以及標點錯誤,請諒解;
如果在文章中發現代碼錯誤或其它問題請告知,感謝
0x01 矩陣
1.矩陣定義
矩陣是由m*n個數 aij (i = 1,2…,m,j = 1,2,…,n) 排列成m行n列,記成:
該矩陣稱爲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=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)數乘運算
數與矩陣A=(aij)乘積記爲A或A:
矩陣滿足下列規律:
(A) = ()A
(+)A = A +A
(A+B) = A+B
例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的列元素對應的值積的和。
例10:
矩陣乘法。
>> A = [1 2 3; 4 5 6];
>> B = [2 3 4; 5 6 4;2 3 4];
>> A*B
注意:AB BA
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 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