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

為什麼這篇matlab矩陣乘法鄉民發文收入到精華區:因為在matlab矩陣乘法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者amy2005 (FamilyAlwaysFirst)看板MATLAB標題[運算] 求助 簡單的...



各位高手晚安~
小妹我剛剛在做一個矩陣乘法時,發現乘出的結果好難理解...
過程是這樣的:

H = 1e-14 * ones(4) (一個4*4, 每個元素皆為1e-14的方陣)
R = 1e-100 * eye(4) (一個對角矩陣,對角元素皆為1e-100)
t = H * H * transpose(H) + R
t = inv(t)

最後t的結果長這樣:(一個4*4矩陣, 以下結果為求乾淨只顯示到小數點後第3位)

row1: 5.629e+56 , -6.938e+24 , -6.25e+40 , -5.629e+56
row2: -6.938e+24 , 5.070e+72 , -5.629e+56 , -5.070e+72
row3: -6.25e+40 , -5.629e+56 , 4.567e+88 , -4.567e+88
row4: -5.629e+56 , -5.070e+72 , -4.567e+88 , 4.567e+88

之後我計算 H*t,
結果居然是個元素全都是0的4*4矩陣...
全都是0耶...好奇怪...看起來就不對阿
然後我嘗試只算第一項,
也就是 H(1,1)*t(1,1) + H(1,2)*t(2,1) + H(1,3)*t(3,1) + H(1,4)*t(4,1)

正解應該是 (5.629e+56 -6.938e+24 -6.25e+40 -5.629e+56) * 1e-14 ,約為-6.25e+26
但matlab跑出結果 = 0
然後我還是不死心,改變加法順序,
變成 H(1,1)*t(1,1) + H(1,4)*t(4,1) + H(1,2)*t(2,1) + H(1,3)*t(3,1)
跑出結果 = 6.1294e+26
痾.......交換加法順序結果居然不一樣! 而且都是錯的!
後來再用java算 , 結果也是錯的....
請問各位matlab高手有碰過類似的狀況嗎~~

p.s. 這些算術都沒有overflow或underflow喔~

謝謝大家!

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.141.232
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1500485262.A.F65.html
sunev: 基本上取inverse 時就爆了 07/20 03:24
amy2005: 原來如此! 那請問為甚麼之後改變加法順序答案居然不一樣 07/20 09:37
amy2005: 呢?我後來用java測試加法的部分居然和matlab結果一樣... 07/20 09:39
amy2005: 感謝樓上高手回答!!! 07/20 09:39
BrianCashman: 怎麼可能會沒有overflow? 容器僅能夠裝10^308指數 07/20 12:23
sunev: 應該在t=H^3+R 就出問題了,有效數字沒這麼多 07/20 13:22
amy2005: http://i.imgur.com/x7rXhs6.jpg 07/20 16:19
amy2005: http://i.imgur.com/a0kOdXI.jpg 07/20 16:20
amy2005: 不好意思~我覺得不會overflow or underflow耶... 07/20 16:21
amy2005: 請參考圖片, 因最小值為 16*e-42 , 最大值為 16*e-42 + 07/20 16:23
amy2005: 1e-100 07/20 16:23
BrianCashman: 絕對overflow,4x4算det(R)時 1e-100就已經1e-400了 07/20 16:38
amy2005: 嗯嗯!所以是在算inv的時候~ 07/20 16:40
BrianCashman: 1e-100對角矩陣不見 你的矩陣行列式就直接變成0 07/20 16:41
amy2005: 喔喔!但算行列式時,應該只有算到 (1e-100)^4 和 (1e-10 07/20 17:29
amy2005: 0)^3 時才會overflow吧?其他項不會~然後overflow(歸0) + 07/20 17:29
amy2005: 某數 = 某數 ? 所以行列式值不會為0? 謝謝! 07/20 17:29

你可能也想看看

搜尋相關網站