1. 程式人生 > >矩陣求逆-Warning: Matrix is singular to working precision.

矩陣求逆-Warning: Matrix is singular to working precision.

用inv進行矩陣求逆時,出現矩陣奇異的情況。

只需將inv替換為pinv求偽逆即可。

1.對於方陣A,如果為非奇異方陣,則存在逆矩陣inv(A)
2.對於奇異矩陣或者非方陣,並不存在逆矩陣,但可以使用pinv(A)求其偽逆、

很多時候你不需要求逆矩陣,例如:
inv(A)*B 實際上可以寫成 A\B
B*inv(A) 實際上可以寫成 B/A
這樣比求逆之後帶入精度要高

inv:Y=inv(X)返回方陣X的逆矩陣,如果X病態或者高度奇異,則會顯示警告資訊。實際上,很少需要真的把矩陣的逆求出來,常見的使用失誤主要出現在求解線性方程組AX=b。一種求解方法為x=inv(A)*b,但如要達到更快,更穩定,就得用X=A\b。這個演算法使用高斯消去法,因此不產生逆矩陣。

“\”:反斜線符號,矩陣左除。如果A是方陣,A\B近似等於inv(A)*B,只是他們的演算法不一樣。如果A是n*n的方陣,B是n*1的列向量,或n*?的矩陣,那麼X=A\B是AX=B的解。如果A很病態或者很奇異,很會顯示警告資訊。A\EYE(SIZE(A))計算A的逆,參見mldivide可得到更多資訊。如果A是m*n的矩陣,m!=n,B是m*1或m*?的列向量,那麼X=A\B就是線性方程組AX=B(超定或者欠定)的最小二乘解。A的有效秩(effective rank)k有選主元的QR分解決定。Asolution X is computed that has at most k nonzero componentspercolumn。如果K<N,結果通常和pinv(A)*B不一樣,後者是最小范數解。A\EYE(SIZE(A))用來求解A的廣義逆。