看板 MATLAB 關於我們 聯絡資訊
※ 引述《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
j0958322080: 是說matlab好像會先幫你判斷,可是解出來就怪怪的 05/17 09:47
j0958322080: 我之後自己寫個 LU 分解跟 QR 分解跟他的不太一樣 05/17 09:47
j0958322080: 不過文末那本書確實不錯,可以看看 05/17 09:48
Ecampus: 感謝 我測試一下Q_Q 05/18 23:43