0

ニュートン法を使用してMatLabの関数を評価するために、次のアルゴリズムを作成しました(ソリューションではr = -7に設定しました)。

function newton(r);
syms x;
y = exp(x) - 1.5 - atan(x);
yprime = diff(y,x);
f = matlabFunction(y);
fprime = matlabFunction(yprime);
x = r;
xvals = x
for i=1:8 
    u = x;
    x = u - f(r)/fprime(r);
    xvals = x
end

アルゴリズムはエラーなしで実行されるという点で機能しますが、私の教科書によれば、式はxに対しておよそ-14に収束するはずですが、反復ごとに数値は減少し続けます。私のアルゴリズムは最初の2回の反復で正しいですが、その後-14を超え、すべての反復が完了した後、最終的にroughøy-36.4になります。

アルゴリズムが正しく機能しない理由について誰かが私に助けを与えることができれば、私はそれを大いに感謝します!

4

2 に答える 2

3

おもう

x = u - f(r)/fprime(r);

する必要があります

x = u - f(u)/fprime(u);

を常に使用すると、常に同じ値だけr減分されます。x

于 2012-06-21T22:43:25.943 に答える
1
syms x
y = exp(x) - 1.5 - atan(x); % your function is converted in for loop
x=-1;
n=10;
v=0;
for i=2:n
    x(i)=tan(exp(x(i-1))-1.5);
    v=[v ;x(i)]; % you will get solution vector  for each i value
end
v
于 2012-08-02T15:07:11.690 に答える