[運算] 求助 簡單的矩陣乘法結果怪怪的

看板MATLAB作者 (FamilyAlwaysFirst)時間7年前 (2017/07/20 01:27), 編輯推噓4(4013)
留言17則, 3人參與, 最新討論串1/1
各位高手晚安~ 小妹我剛剛在做一個矩陣乘法時,發現乘出的結果好難理解... 過程是這樣的: 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

07/20 03:24, , 1F
基本上取inverse 時就爆了
07/20 03:24, 1F

07/20 09:37, , 2F
原來如此! 那請問為甚麼之後改變加法順序答案居然不一樣
07/20 09:37, 2F

07/20 09:39, , 3F
呢?我後來用java測試加法的部分居然和matlab結果一樣...
07/20 09:39, 3F

07/20 09:39, , 4F
感謝樓上高手回答!!!
07/20 09:39, 4F

07/20 12:23, , 5F
怎麼可能會沒有overflow? 容器僅能夠裝10^308指數
07/20 12:23, 5F

07/20 13:22, , 6F
應該在t=H^3+R 就出問題了,有效數字沒這麼多
07/20 13:22, 6F

07/20 16:19, , 7F

07/20 16:20, , 8F

07/20 16:21, , 9F
不好意思~我覺得不會overflow or underflow耶...
07/20 16:21, 9F

07/20 16:23, , 10F
請參考圖片, 因最小值為 16*e-42 , 最大值為 16*e-42 +
07/20 16:23, 10F

07/20 16:23, , 11F
1e-100
07/20 16:23, 11F

07/20 16:38, , 12F
絕對overflow,4x4算det(R)時 1e-100就已經1e-400了
07/20 16:38, 12F

07/20 16:40, , 13F
嗯嗯!所以是在算inv的時候~
07/20 16:40, 13F

07/20 16:41, , 14F
1e-100對角矩陣不見 你的矩陣行列式就直接變成0
07/20 16:41, 14F

07/20 17:29, , 15F
喔喔!但算行列式時,應該只有算到 (1e-100)^4 和 (1e-10
07/20 17:29, 15F

07/20 17:29, , 16F
0)^3 時才會overflow吧?其他項不會~然後overflow(歸0) +
07/20 17:29, 16F

07/20 17:29, , 17F
某數 = 某數 ? 所以行列式值不會為0? 謝謝!
07/20 17:29, 17F
文章代碼(AID): #1PRvQEzb (MATLAB)
文章代碼(AID): #1PRvQEzb (MATLAB)