2016-08-04 4 views
0

私はニュートンの方法で計算をy(x+1)=y(x)-f(x)/f'(x)私はy(x)を必要とし、これを使用するために関数yを使用してください(1)& y(2) y(x + 1)を計算するときにはzeros()を使用しますが、x> 2の場合は同じ回答が得られます。何が欠けていますか? @patrikガイダンスに従って、(X-1)どのように呼び出して関数を使用するmatlabの再帰

function y= newt(x) 
%define beta,gamma,delta,....there 
y(1)=R*T/p; 
answ=zeros(1,20); 
z=0; 
if x==1 
    f=(R*T*y(1)^3)+(beta*y(1)^2)+(gamma*y(1))+delta-(p*y(1)^4);   
    f1=(3*y(1)^2*R*T)+(2*y(1)*beta)+gamma+(4*p*y(1)^3);   
    answ(1) = y(1); 
    fprintf('n=1 v=%f\n',y(1));  
else 
    y=newt(x-1); 
    f=(R*T*y^3)+(beta*y^2)+(gamma*y)+delta-(p*y^4); 
    f1=(3*y^2*R*T)+(2*y*delta)+gamma+(4*p*y^3); 
    z=y-f/f1 
    answ(1,2:x)=z; 
end 
    answ(1) = y(1); 
    answ(1,2:x)=z; 
+0

永続変数と、関数呼び出しの間にメモリに保持されている値の値を定義することができます。 – User1551892

+0

@ User1551892私はそれを行うこの方法をお勧めしません、それは混乱を作成する傾向があるので。通常の議論を使う方が良い。とにかく質問について。私は、ニュートン法が正しく実装されていないと信じています。変数 'x'は最後の反復からの結果に基づいて反復的に更新される必要があります。関数ハンドルの使用と、関数への入力を試みてください。これにより、単一のMATLAB関数を使用して、ほとんどの連続関数のゼロを計算することができます。 – patrik

+0

@patrikあなたは他の関数を定義していますか?あなたは私をコードで表示できますか? – isan

答えて

0

保存し、イモリへのアクセスのためのゼロは()、私は私の答えを見つける

[email protected](v)p*v^4-R*T*v^3-beta*v^2-gamma*v-delta; 
[email protected](v)4*p*v^3-3*R*T*v^2-2*beta*v-gamma; 
関連する問題