singulat matrix 好像是不可逆矩陣,他的定義是det=0嗎,還是有其他的定義嗎. ... <看更多>
「singular矩陣」的推薦目錄:
singular矩陣 在 一步步教你轻松学奇异值分解SVD降维算法 - 白宁超的官网 的推薦與評價
摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分解,在生物信息学、信号处理、金融学、统计学等领域有重要应用,SVD ... ... <看更多>
singular矩陣 在 [問題] singular 問題- 看板MATLAB | PTT數位生活區 的推薦與評價
不好意思請問各位一下假設我在程式碼裡使用迴圈得到一個矩陣(累加的方式) A ... 之後求他的反矩陣inv(A)卻跑出錯誤訊息: Warning: Matrix is close to singular or ... ... <看更多>
singular矩陣 在 Re: [問題] singular 問題- 看板MATLAB - 批踢踢實業坊 的推薦與評價
: 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
... <看更多>