2016-08-04 89 views
0

我有一個牛頓的運動方式計算y(x+1)=y(x)-f(x)/f'(x)在這個函數我需要y(x)和爲此我使用函數遞歸y(1)& y(2)它的工作,因爲y(1)有公式y(1)=R*T/p,用於保存y(x)我使用zeros()來計算y(x + 1)時使用,但對於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

回答