【发布时间】:2019-04-10 15:01:01
【问题描述】:
我想在 Matlab 中计算一个匿名函数的二阶导数。我已经知道一些公式(数值微分),但它们似乎不起作用。
我可以计算一阶导数:
f = @(x) (x^3);
h = 1e-10;
df = @(x) (f(x+h) - f(x))/h;
但是当我尝试用以下公式计算二阶导数时,我没有得到预期的结果:
f = @(x) (x^3);
h = 1e-10;
d2f = @(x) (f(x+h) - 2*f(x) + f(x-h))/(h^2);
对于 d2f,我应该得到一个类似于 d2f = 6x 的函数,但是如果绘制 d2f,我会得到: plot d2f
我做错了什么?
【问题讨论】:
-
如果您提供有关哪些功能不起作用的信息会有所帮助。你在尝试什么,你期望什么结果,你会得到什么?
-
这里的问题在于
h和catastrophic cancellation 的大小,这是由于浮点的数值精度。试试h=1e-7,或更大。但是,花在评估函数的位置上,您可能仍然会看到很多噪音。 -
您也可以使用 vpa:
h = vpa(1e-10)增加h的浮点精度。您现在有 32 位精度,因此h应该能够与1e-16一样小。 -
@horchler 成功了!谢谢!!
标签: matlab numerical-methods differentiation