需要帮助“尝试访问....;索引越界因为numel(...)= 1”错误

时间:2013-10-21 05:24:35

标签: matlab

我需要在Matlab上编写一个牛顿方法代码并在此处理。但是当我尝试使用它时,它会在计算几次后出现此错误:

尝试访问df(8);索引超出界限因为 numel(DF)= 1。

newtonmethod出错(第11行)     TZ = TI-(F(TI)/ DF(TI));

 function newtonmethod(f)
ti = 10;
tz = 8;
abstol = 0.0001;
counter = 0;
h=0.1;
df=((f(ti+h)-f(ti))/h);
while (abs(ti-tz)>abstol)
    ti=tz;
    tz=ti-(f(ti)/df(ti));
    counter=counter+1;
end
    ti=tz;
    fprintf(tz,'counter=',counter )
end 

我该怎么办?

1 个答案:

答案 0 :(得分:0)

那是因为

df = (f(ti+h)-f(ti))/h; 

计算单值(在ti = 10),而不是定义函数。

为了能够为df = df(ti)计算ti的值,您应该将其定义为anonymous function

df = @(ti) ((f(ti+h)-f(ti))/h); 
顺便说一下,为什么不使用central differences

df = @(ti) (f(ti+h)-f(ti-h))/2/h;

以相同的成本,您将获得更高精度的数量级......对我来说似乎很划算:)