[英]MATLAB isequal function gives wrong answer for symbolic expression
[英]Matlab gives wrong answer
如果執行以下代碼,MATLAB會出錯。 有人可以驗證嗎?
floor([0.1:0.1:2]/0.01)
那129在這做什么?
ans = 10 20 30 40 50 60 70 80 90 100 110 120 129 140 150 160 170 180 190 200
由於冒號生成的向量,它是浮點舍入誤差。
像拉斯曼說的那樣,如果你這樣做:
floor((0.1:0.1:2 + eps) / 0.01)
不存在舍入錯誤。
但是,根據冒號運算符的工作原理 ,我建議您執行相同的計算:
floor([(1:20)/10] / 0.01)
[ 編輯 : 根據Rasman的評論,我將補充說,后一種方法也適用於負值,而添加eps
有時會失敗 ]
最重要的是,最好使用帶整數的冒號運算符來最小化舍入誤差。
它可能正在進行浮點計算,導致不精確的值為129.99999999999999 ...而不是130.然后將其置於129。
它是陣列結構帶來的舍入近似值。 解決方案是添加eps:
floor([0.1:0.1:2]/0.01+ eps([0.1:0.1:2]/0.01))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.