2015-09-13 91 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