限制欲寫在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
然後我的問題是,怎樣才能提高我的代碼?因爲它給了我一個確實的錯誤,即導數的最後一個近似值爲零。
感謝很多提前:)
限制欲寫在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
然後我的問題是,怎樣才能提高我的代碼?因爲它給了我一個確實的錯誤,即導數的最後一個近似值爲零。
感謝很多提前:)
由於浮點運算的限制,可以在你能有多小選擇h
限制。對於選擇一個合理的選擇「安全」小h
使用h=x*sqrt(eps)
其中eps
是下一個最大的雙精度數從1.0的距離,也就是eps = 2^-52
此維基百科頁面包含一些更information
如果你真的想要更高精度的算術,你可以考慮使用多精度算法的實現。舉例來說,this是一個圍繞着已知的GMP(GNU多精度算術庫)和MPFR(具有精確舍入的多精度浮點計算)的MATLAB包裝。
非常感謝,事情是我不想修復錯誤我想驗證我的代碼,如果我的代碼是正確的或者知道該期待什麼的人,告訴我的代碼正在做正確的事情:) – user162343
看起來沒錯。事實上,如果你開發表達 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
Thnks :),但是,如果「如果開發表達式」 ? – user162343
您可以從** not **開始,使用i作爲變量:http://stackoverflow.com/questions/14790740/using-i-and-j-as-variables-in-matlab – Adriaan
我很抱歉,我已經動了我的代碼審查的問題,因爲事情是,我想驗證:)謝謝 – user162343
在代碼審查告訴我,我必須在這裏驗證我的代碼:)然後可以做什麼? – user162343