Re: [問題] Warning: Matrix is singular to working

看板MATLAB作者 (beyond the time!)時間6年前 (2018/05/17 08:20), 編輯推噓1(103)
留言4則, 2人參與, 6年前最新討論串2/2 (看更多)
※ 引述《Ecampus ()》之銘言: : Warning: Matrix is singular to working precision. : > In matlab.internal.math.mpower.viaMtimes (line 35) : 剛剛執行matlab時候 : 出現這行字 : 雖然有猜測意思 但不敢確定 求高手教我 照經驗,所有condition number過大的狀況都會跳出這一行. condition number的定義是 "絕對值最大和最小的兩個eigenvalue的商" 因此一般實務上, 除了恰好"因為緣分問題導致某個eigenvalue非常接近零"這樣的原因之外, 其他,當要解影像的registration/warping的問題時, 也有可能會發生這樣的狀況, 例如,當你要把一大群點的座標丟進矩陣裡面求兩群點之間的transformation matrix時, 就可能會因為 (x, y, z) 座標的scale差異太大, (x,y的範圍可能是1~1024, z的範圍可能只有1~10) 導致某個eigenvalue的數值大小出現問題. 上面說的姑且可以想成下面這樣, [1000 ] [ x1 x2 x3 ... ] [ B ] = [ alpha ] * [ A ] = [ 1000 ] * [ y1 y2 y3 ... ] [ 1] [ z1 z2 z3 ... ] (3-by-k matrix) 所以 矩陣B 的condition number極有可能會出問題, 因為 矩陣B 的其中兩個eigenvalue,相當於是對應到 矩陣A 的那兩個 eigenvalue 的1000倍. 理論上來說, 所有用類似的方式收集而來的 矩陣B 都有可能發生你說的那個問題. 至於要怎麼解決? 就如同上面的式子說的, 最簡單的工程解答就是把 矩陣[alpha] 給除掉, 也就是把有問題的 column或row vector給 scale down 就好. 話說有一本書叫做"matrix computation", 非常適合在晚上失眠的時候拿來翻一下, 對於幫助睡眠十分有用. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.96.100.130 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1526516440.A.6AF.html

05/17 09:47, 6年前 , 1F
是說matlab好像會先幫你判斷,可是解出來就怪怪的
05/17 09:47, 1F

05/17 09:47, 6年前 , 2F
我之後自己寫個 LU 分解跟 QR 分解跟他的不太一樣
05/17 09:47, 2F

05/17 09:48, 6年前 , 3F
不過文末那本書確實不錯,可以看看
05/17 09:48, 3F

05/18 23:43, 6年前 , 4F
感謝 我測試一下Q_Q
05/18 23:43, 4F
文章代碼(AID): #1Q_ChOQl (MATLAB)
文章代碼(AID): #1Q_ChOQl (MATLAB)