我有一个简单的程序,我试图解决在x = 0处近似sin(x)+ cos(x)的导数的问题。这个公式是[f(x + h)+ f(x)] / h,其中x是0,如上所述,我正在尝试6个不同的值为h:10e-3,10e-6,10e-9 ,10e-12,10e-15,10e-18。以下代码适用于除10e-18之外的所有代码,但我无法弄清楚原因。 10e-18很小,但似乎不应该那么小。最后一个h的输出为0,其余的非常接近1,因为它们应该是。
function fprime = twoPointForward(x)
h = 10e-3;
f = sin(x) + cos(x);
for i=1:6;
fprime = ((sin(x+h) + cos(x+h))-f)/h
h=h/1000;
end
end
我感谢任何帮助。我发现处理此问题的所有其他线程都有针对各自问题的解决方案。
答案 0 :(得分:1)
当h变得太小时,您可能会尝试使用对数。但是,是否真的有h=10^-18
的原因。似乎如果这是一个问题,你应该考虑找另一个apporach。
关于错误。简而言之,计算机具有浮点精度,因为硬件和matlab也有浮点分辨率,因为使用了不同的类型,如double,float,...更多关于shuttle87推荐的文章