我想在MATLAB中编写一个脚本来计算x = 2时函数x ^ 2的导数(f(x + h)-f(x))/ h的商和从1开始的h并且减去10倍,书中说当h变小(小于10 ^ -12)时,舍入误差的影响变得明显。
然后我写了下面的代码:
for i=0:-2:-16
h=10^i;
((2+h)^2-(2)^2)./h
end
然后我的问题是,如何改进我的代码?因为它确实给出了一个错误,即导数的最后一个近似值为零。
提前多多感谢:)
答案 0 :(得分:1)
由于浮点运算的限制,您可以选择h
的小数量。选择“安全”小h
的合理选项是使用h=x*sqrt(eps)
,其中eps
是从1.0到下一个最大双精度数的距离,即eps = 2^-52
此维基百科页面包含更多information
如果你真的想要更高精度的算术,你可以考虑使用多精度算术的实现。例如,this是围绕着已成熟的GMP(GNU多精度算术库)和MPFR(具有精确舍入的多精度浮点计算)的MATLAB包装器