MATLAB中函数的导数

时间:2014-05-21 07:55:21

标签: matlab

我有以下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);

1 个答案:

答案 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))