2015-09-13 181 views
0

限制欲寫在MATLAB腳本,在x = 2時計算的導數的商數(F(X + H)-f(X))/小時的函數x^2 h從1開始並減小10倍,並且該書指出,當h變小(小於10^-12)時,舍入誤差的影響變得明顯。估計衍生物做在MATLAB

然後我寫了下面的代碼:

for i=0:-2:-16 
    h=10^i; 
    ((2+h)^2-(2)^2)./h 
end 

然後我的問題是,怎樣才能提高我的代碼?因爲它給了我一個確實的錯誤,即導數的最後一個近似值爲零。

感謝很多提前:)

+3

您可以從** not **開始,使用i作爲變量:http://stackoverflow.com/questions/14790740/using-i-and-j-as-variables-in-matlab – Adriaan

+0

我很抱歉,我已經動了我的代碼審查的問題,因爲事情是,我想驗證:)謝謝 – user162343

+3

在代碼審查告訴我,我必須在這裏驗證我的代碼:)然後可以做什麼? – user162343

回答

1

由於浮點運算的限制,可以在你能有多小選擇h限制。對於選擇一個合理的選擇「安全」小h使用h=x*sqrt(eps)其中eps是下一個最大的雙精度數從1.0的距離,也就是eps = 2^-52

此維基百科頁面包含一些更information

如果你真的想要更高精度的算術,你可以考慮使用多精度算法的實現。舉例來說,this是一個圍繞着已知的GMP(GNU多精度算術庫)和MPFR(具有精確舍入的多精度浮點計算)的MATLAB包裝。

+0

非常感謝,事情是我不想修復錯誤我想驗證我的代碼,如果我的代碼是正確的或者知道該期待什麼的人,告訴我的代碼正在做正確的事情:) – user162343

+1

看起來沒錯。事實上,如果你開發表達 Y =((X + H)^ 2-(X)^ 2)./ H =(X^2 + 2 * H * X + H^2 - X^2)/ h = 2 * x + h - >當h很小時y = 2x是x^2的導數,並且在x = 2時是4 – gregswiss

+0

Thnks :),但是,如果「如果開發表達式」 ? – user162343