我有以下matlab代码。之后的第一行给出了错误。我试图让牛顿方法找到根。因为我需要衍生 f`(p0)。 PLZ指导我做错了什么以及如何获得功能的衍生 f ;
我也试过D(f(p0))
但是没有用,给出错误:未定义的函数或方法'D'表示'double'类型的输入参数。
format long;
f=@(x) cos(x)-x;
p0 = 0.5;
TOLL = 1e-4;
N = 100;
i = 1;
while (i <= N)
p = p0-f(p0)/diff(f(p0)); %Error, returns empty results this produced error
if ( abs(p-p0) < TOLL)
fprintf('Root of given equation is %f\n', p);
return;
end
i=i+1;
p0 = p;
end
fprintf('Method failed after %d iteration\n', i);
答案 0 :(得分:2)
错误是因为p0
是标量,因此f(p0)
是标量。然后取diff(f(p0))
不会工作。
要在p0
找到衍生物,您可以使用此衍生物的定义:
f'(p0)
=h->0
的{{1}}限制。
选择(f(x+h)-f(x))/h
作为一些较小的数字(比如h
),使用1e-3
和(f(p0+h)
,您应该能够得到{{1}的导数的近似值在f(p0))
。