0

次のことを実装したいと思います: 特定の機能に対してニュートン ラフソン アルゴリズムを実行するスクリプトを作成しました。ここで、以前に見つかったゼロを次の最初の開始点として使用して、それ自体を繰り返すスクリプトを書きたいと思います。

x=zeros(1,31);
for i=1:31
    x(i)=(i-1)/10;
end
y0=0;
for i=1:length(x)
    y0=newton(x(i),y0)
end

したがって、このスクリプトで newton(x,y0) を実行する必要があります。したがって、newton(0,0) で始まり、新しい値 y0 が検出され、スクリプトで newton(0.1,y0) などを実行する必要があります。値 y0 を見つけるために必要な反復を行います。

私の質問が明確であることを願っています。よろしくお願いします。

繰り返しますが、要素 0、0.1、0.2、...、3 を持つベクトル x があります。初期値 y0 で x(i) を実装すると、newton(x,y) によって値が返されます。次に、スクリプトで x の値 x(2) を使用して newton(x,y) を再度実行し、前に検出された y0 を実行したいので、ある種のループが必要ですが、実行できません.. :(

編集
これは私のnewton機能です:

function nulpunt=newton(x,y0)

tolerantie=1e-8;
iteraties=0;

while (abs(functie1(y0,x))>tolerantie)
    y0=y0-functie1(y0,x)/afgeleide_functie1(y0);
    iteraties=iteraties+1;
end

if iteraties==100;
    fprintf('Maximaal aantal iteraties bereikt')
else
    fprintf('De benadering van het nulpunt y*(%.2f) is %.4f gevonden in %d iteraties.\n',x,y0,iteraties)
end
end
4

1 に答える 1

0

y0あなたのループは、それが動作するたびに以前のものをすでに使用しているはずです。Matlab コマンド ウィンドウに と反復回数
を表示する場合は、最初に -function を変更して、反復回数だけでなく反復回数も返すようにする必要があります。 y0newtony0iteraties

function [nulpunt, iteraties]=newton(x,y0)

また、関数は実際には次のようにファイナルy0を返す必要がありnulpuntます。

if iteraties==100;
    fprintf('Maximaal aantal iteraties bereikt')
    nulpunt = 0; % in this case, no solution was found, return the baseline value;
else
    fprintf('De benadering van het nulpunt y*(%.2f) is %.4f gevonden in %d iteraties.\n',x,y0,iteraties)
    nulpunt = y0;
end

反復回数を表示するには、 をy0実行するたびにnewton、関数を呼び出した後に次の 2 行を追加します。

[y0, iteraties] = newton(x(i),y0);
disp(['This point was found: ',num2str(y0)])
disp(['It took ',num2str(iteraties),' iterations.'])  

これは、関数が既にy0検出したものとそれにかかった時間を出力しているため、実際には冗長である可能性があります。

于 2014-01-18T16:27:40.433 に答える