Re: [問題]很玄的數值問題已回收

看板MATLAB作者 (準備好了嗎)時間15年前 (2010/10/24 23:15), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《bwubai (準備好了嗎)》之銘言: : 最近小弟在進行實驗時,需要將矩陣內的元素作加總,使得總和為1, : 元素內容皆為0~1之間,但是在過程中,因為計算機的計算誤差,所以 : 會出現總和不等於1的情況產生,所以在此便先將矩陣內的最大值的位 : 置先清為0,再用1減去矩陣內的其他總和,程式碼如下: : [C,I] = max(a(i,j,:)); : a(i,j,I) = 0; : a(i,j,I) = 1 - sum(a(i,j,:)); : 這個時候就玄了,我在結果產生時做了sum(a(i,j,:)) : 結果秀出ans = 1.0000 : 所以我進到work space監看數值 : 0 0 1.266416554909401e-014 0 0 0.9999997168235 0.000000283717638 0 : 上面共八筆資料,最大值出現在第六筆 : 所以應該會先清為0,變成 : 0 0 1.266416554909401e-014 0 0 0 0.000000283717638 0 : 此時我在command window進行 b = 1-sum(a(i,j,:)) : 再進行c = b + sum(a(i,j,:)) : 結果會等於1 : 但是當我把b的結果放回a矩陣內,再執行sum(a(i,j,:)) : 此時結果就等於1.0000 : 想請教板上的各位,這是什麼原因造成的?! : 謝謝! 感謝板眾花時間幫忙檢視我的問題,後來我發現了我的問題所在 我所處理的數值都是無理數,雖然我現在還無法得知是什麼原因 ,但是已知: 當a = 1-(b+c)時,sum([a b c])不等於1 必須a+(b+c)才會等於1,理由我現在不知道是為什麼 希望大家可以分享 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.85.138

10/24 23:27, , 1F
numerical error
10/24 23:27, 1F

10/25 01:26, , 2F
你要的原因是浮點運算誤差吧......
10/25 01:26, 2F

10/25 01:26, , 3F
要完美計算就用符號運算吧!!!
10/25 01:26, 3F

10/25 01:27, , 4F
沒有很仔細看你的問題~~參考參考!!
10/25 01:27, 4F

10/26 11:27, , 5F
format long ???
10/26 11:27, 5F
文章代碼(AID): #1Cn4sXvN (MATLAB)
文章代碼(AID): #1Cn4sXvN (MATLAB)