台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)
臺灣國立大學郭彥甫Matlab教程筆記(22) Cramer’s method(Inverse matrix)
matrix left division左除:\ or mldivide()
solving systems of linear equations Ax=b using factorization methods:
求Ax=b中的x,只需要A\b
實際上,A\b這個算式matlab進行了很多判斷,進行了很多演算,時間復雜度有點高
左除本質上也是succesive elemination 逐次消去法
看一個線性方程組
matlab指令:
A=[1,2,1;2,6,1;1,1,4];
b=[2;7;3];
x=A\b
執行的結果:算出來x的值:
一道練習題:需要結合上一次筆記
關鍵點在于用matlab中矩陣把線性方程表述出來,然后求解,應該不難。
筆者的練習如下:
思考:這里需要用符號法syms嗎?
我的練習:
執行一下,發現可以:
接下來就是求解的問題了,我想到的是用左除\
x=A\b運行結果,這個用符號表示的線性方程組解出來了。
下面講一些矩陣分解的一些函數
Matrix decomposition funcitons矩陣分解函數
qr(): orthogonal-triangular decomposition 正交三角矩陣的分解
ldl(): Block LDL’s factorization for Hermitian indefinite matrices(厄密特不定矩陣)
ilu():Sparse稀疏 incomplete LU factorization 稀疏矩陣的LU不完全分解
lu();LU matrix factorization LU分解
chol(): Cholesky factorization Cholesky 針對的是正定矩陣的分解,也稱平方根法
gsvd(): generalized singular value decomposition 廣義奇異值分解
svd():singular value decomposition奇異值分解
下面來到 cramer’s method
Cramer’s(Inverse) method
A的逆矩陣: A^-1:inverse of A
可以求出x矩陣
Inverse Matrix逆矩陣
對于矩陣A,A的逆矩陣被定義為:
det(A)是矩陣A的行列式,是determinant的縮寫
adj(A)是A矩陣的伴隨矩陣(對整個矩陣求代數余子式,這些代數余子式構成的新的矩陣) 在這里是A中的a 和d 交換,b和c之間加負號
性質:
A的逆矩陣再取逆,還是A;
kA的逆矩陣等于1/k乘以A的inverse
接下來講解如何用cramer’s method 求解 方程組
solving equations using Cramer’s Method
下面的方程組例子
我們要求解x
在matlab中
可以得到這個方程組的解
Cramer’s method 有一個問題:A的逆矩陣不一定存在
三元一次方程組 ,是三個平面之間的關系
可能有唯一解,可能無限解,可能無解
舉例:矩陣中的兩行成比例,A的逆矩陣不存在
singular matrix
成為奇異矩陣,退化矩陣,不可逆矩陣
下面是作業題:
我的思考:如何畫一個平面
可能要用到plot3()函數
參考上幾次的筆記:matlab3D畫圖函數
x=-20:0.1:20;
y=0:0.1:40;
[X,Y]=meshgrid(x,y);
Z1=-X-Y;
Z2=-X+Y;
Z3=-X/3;
hold on
mesh(X,Y,Z1,‘r’,X,Y,Z2,‘b’,X,Y,Z3,‘g’);
hold off;
報錯:mesh不能這樣用
修改成為下面這樣:
x=-20:0.1:20; y=0:0.1:40; [X,Y]=meshgrid(x,y);%繪制網格 Z1=-X-Y;%三個平面的表達式 Z2=-X+Y; Z3=-X/3; hold on mesh(X,Y,Z1);%繪圖 mesh(X,Y,Z2); mesh(X,Y,Z3); hold off;然后得到的結果:(使用的是按鈕:三位旋轉,畫圖出來之后,在菜單欄上有)
另外一個角度:
當然,也可以把mesh 替換為 surf()函數,這樣更逼真
接下來回顧一下 Cramer’s Method 的problem
其實,這個奇異矩陣(或者不可逆矩陣)在這種情況下也是。當一個矩陣的行列式很接近于零的時候,也稱為不可逆矩陣,這時候就不能用 Cramer’s method 來求解了
遇到 singular 的時候,想要另外處理
Functions to check matrix condition
兩個函數:
1)cond:matrix condition number 判斷矩陣是否健康,越小越健康(線性獨立性越好)
2)rank(): matrix rank 矩陣的秩
比較兩個矩陣:
如何看矩陣健不健康,需要Ax=b 這個原始公式,b已知,現在需要判斷矩陣A健不健康
做法是:讓A變化一點,看x變化多少,如果x變化很小,說明矩陣A很健康
用matlab看一下 兩個矩陣的健康程度:從理論上講,B矩陣比A健康
A=[1 2 3; 2 4.0001 6; 9 8 7];
cond(A)
B=[1 2 3; 2 5 6; 9 8 7];
cond(B)
可以看出來A矩陣是一個 ill-conditioned 的矩陣
【總結一下】
本文記錄了線性方程組的解法(二):逆矩陣的方法。
同時學習了一下singular矩陣(奇異矩陣)的知識。
會使用cond()函數判斷矩陣是否健康,使用rank()函數求得矩陣的秩(幾個線性獨立的向量)
總結
以上是生活随笔為你收集整理的台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV实战中:blender-fe
- 下一篇: MFC中下拉条(组合框)combo bo