1

私は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 

私は何をすべきか?

4

1 に答える 1

0

その理由は

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

関数を定義するのではなく、単一の値(で) を計算します。ti = 10

df = df(ti)for anyの値を計算できるようにするには、それを無名関数tiとして定義する必要があります。

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

ところで、中央差分を使用しないのはなぜですか?

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

同じコストで、桁違いの精度が得られます...私にはかなりのようです:)

于 2013-10-21T05:30:45.713 に答える