2016-08-04 88 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

回答