[問題]矩陣相加沒有交換率

看板MATLAB作者時間10年前 (2015/02/19 03:49), 10年前編輯推噓5(509)
留言14則, 4人參與, 最新討論串1/1
小弟是新手 想運用矩陣相加的方式來計算 但不知道為什麼矩陣相加後應該為零 但卻出現很小很小的數字 首先 我用了迴圈的方式 以下是我的寫法 Q1=[6.65 5.05 4.5; 5.05 6.65 0; 4.5 0 5.15]; Q2=[6.65 5.05 -4.5; 5.05 6.65 0; -4.5 0 5.15]; Q=[Q1;Q2;Q2;Q1]; h=[-0.3 -0.15 0 0.15 0.3]; B=zeros(3,3); for i=1:4; B=1/2.*Q(1+3*(i-1):3+3*(i-1),1:3).*((h(i+1)).^2.-(h(i)).^2.)+B; end 照理來說 B矩陣應該會為零 可是出現了很小的數字 所以我就把迴圈拆開 一個一個相加如下 F=Q(1+(3*(1-1)):3+(3*(1-1)),:)*((h(1+1)).^2.-(h(1)).^2.); G=Q(1+(3*(2-1)):3+(3*(2-1)),:)*((h(2+1)).^2.-(h(2)).^2.); H=Q(1+(3*(3-1)):3+(3*(3-1)),:)*((h(3+1)).^2.-(h(3)).^2.); I=Q(1+(3*(4-1)):3+(3*(4-1)),:)*((h(4+1)).^2.-(h(4)).^2.); P=F+G+H+I SS=F+H+G+I 但卻發現SS為零矩陣 但P不是 P = 1.0e-16 * 0.555111512312578 0 0 0 0.555111512312578 0 0 0 0 非常詭異的問題 請問一下這要如何解決 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 165.91.12.56 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1424288984.A.821.html

02/19 07:10, , 1F
看不懂 你要不要把數學的算式寫出來
02/19 07:10, 1F

02/19 07:10, , 2F
你說的第一種狀況純粹交換順序不可能會那樣
02/19 07:10, 2F

02/19 07:10, , 3F
應該是你迴圈出的問題 盡量避免使用迴圈
02/19 07:10, 3F
※ 編輯: abudurahim (165.91.12.56), 02/19/2015 07:21:59

02/19 07:22, , 4F
抱歉,我多打了一些細節,謝謝你
02/19 07:22, 4F

02/19 08:56, , 5F
電腦只能處理有限位的小數
02/19 08:56, 5F

02/20 03:25, , 6F
我意思是手寫的計算是什麼,因為你這樣寫有點難看懂。
02/20 03:25, 6F

02/20 03:25, , 7F
我猜是中間有一個互消正負所以為零,另一個相加非常小
02/20 03:25, 7F

02/20 03:25, , 8F
,被當作0,然後又加上一個正的小數。
02/20 03:25, 8F

02/22 12:53, , 9F
我剛剛測試了一下,-0.0675*6.65會多出一點點
02/22 12:53, 9F

02/22 12:54, , 10F
造成F有些地方並不是真的理論值
02/22 12:54, 10F

02/22 12:58, , 11F
以下是我的猜測: F+H的有效位數比較多(5位數),需要的空間
02/22 12:58, 11F

02/22 12:59, , 12F
也比較多,所以剛好把那個微小的錯誤省略掉了,而F+G則少一
02/22 12:59, 12F

02/22 12:59, , 13F
位數,所以一直保留到最後
02/22 12:59, 13F

02/22 13:00, , 14F
而為什麼-0.0675*6.65會多,就要請別的大師解釋了orz
02/22 13:00, 14F
文章代碼(AID): #1KvEpOWX (MATLAB)
文章代碼(AID): #1KvEpOWX (MATLAB)