[爆卦]matlab反矩陣指令是什麼?優點缺點精華區懶人包

為什麼這篇matlab反矩陣指令鄉民發文收入到精華區:因為在matlab反矩陣指令這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者moussorgsky (法國號有氣質)看板MATLAB標題Re: [問題] singular ...


: Warning: Matrix is close to singular or badly scaled.
: Results may be inaccurate. RCOND = 3.502134e-017.


我是做數值分析與計算流體力學的,嘗試回答你的問題。

我想你可能要先瞭解一下,不是每一個矩陣都有反矩陣的。
一般線性代數的書在談論到矩陣時,都會特別說明,若是一個矩陣沒有反矩陣,
它就被稱做singular matrix。
一般來說,只要是該矩陣的determinant等於或非常非常接近0,它就不存在或很
難用一般的方法求出反矩陣。


就實際應用面而言,一般會想求反矩陣,並不是真的對那個矩陣的反矩陣有興趣
,通常都是為了解之後的問題,必須在過程中先求得反矩陣。
舉例來說,最常遇到的就是解聯立方程式。

[A]{X} = {B}

先講一般程式語言的作法。如果你是用C或是Fortran的話,就得先用數值方法求
得[A]的反矩陣,再用反推法求得{X}。光是要求得[A]的反矩陣,就有很多種數
值方法可以用,詳細的就不在這裡談了。

那,如果你是用MATLAB的內建函數,就不必這麼麻煩了。想解上式,可以直接打
X=B/A 或是 X=B\A,都可以得到答案。
如果我沒記錯的話,「右除」只能用在當A是方陣且不是singular時,但「左除」
可以用在A是任意矩陣時(不管是不是singular,不管是不是未知數的數目大於方
程式的數目或小於方程式的數目)。所以,即使A是singular matrix,你也不必
擔心,MATLAB會直接「黑箱作業」,幫你得到答案。

那MATLAB是怎麼「黑箱作業」的呢?這可能就要去翻數值分析的書,裡面都會談
到一個方法,叫做singular value decomposition,簡稱SVD。這是專門對付
singular matrix而發展出來的數值方法。同樣地,我無法在這裡細談,那個牽
扯到太多的數學技巧。

一般SVD,會將[A]分解成三個矩陣相乘,以便之後求解聯立方程式時使用。但不
幸的是,分解出來的這三個矩陣,都不是[A]的反矩陣,因為根據定義,[A]是
singular matrix,它本來就不會有反矩陣。

MATLAB也有一個指令是SVD(),()裡面直接打矩陣的名稱就可以將改矩陣做
singular value decomposition。回想前面提過的,當你使用「左除」這個指令
時,MATLAB本身就會去計算該矩陣是否為singular,如果是的話,它就會自動使
用SVD來求解。


很多數學統計和工程問題都會遇到singular matrix,數學統計上常用到的最小
平方法(least-square method)也會遇到。

回到你本身的問題,你會發現,你得到的矩陣前面,有乘上一個很大很大的值,
大的不像話,那就已經說明,得到的答案有99%是錯的......

總結一下:
如果你有一個矩陣,是singular matrix,你單純想要求他的反矩陣,MATLAB解
出來的有很大的機率是錯誤的。即使你用別的程式語言加上數值分析的方法,
也只能求得很近似的值而已。因為在數學理論上,它其實是不存在的。
但如果你在整個演算法中,無論如何都必須要先求得它的反矩陣,再加以應用
的話,那就必須要訴諸其他的數值分法,避免「正面」去求它的反矩陣,走別
條路,去得到最後的答案。

--
年 輕 是 什 麼 ?
是 風 ,是 雲 彩 ,
也 是 天 空 ,
是 一 種 心 情,
閃 爍 在 生 命 的
每 一 個 轉 折 裡。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.187.195
takuya0608:正解。 09/24 13:07
takuya0608:而且寫的很清楚,有興趣的人建議可以去翻閱相關書籍。 09/24 13:08

你可能也想看看

搜尋相關網站