估计在MATLAB中执行限制的导数

时间:2015-09-13 20:49:15

标签: matlab

我想在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 

然后我的问题是,如何改进我的代码?因为它确实给出了一个错误,即导数的最后一个近似值为零。

提前多多感谢:)

1 个答案:

答案 0 :(得分:1)

由于浮点运算的限制,您可以选择h的小数量。选择“安全”小h的合理选项是使用h=x*sqrt(eps),其中eps是从1.0到下一个最大双精度数的距离,即eps = 2^-52

此维基百科页面包含更多information

如果你真的想要更高精度的算术,你可以考虑使用多精度算术的实现。例如,this是围绕着已成熟的GMP(GNU多精度算术库)和MPFR(具有精确舍入的多精度浮点计算)的MATLAB包装器