Newton en varias variables
Publicado por Esteban Dido (1 intervención) el 02/05/2012 01:42:05
Necesito ayuda con el metodo de Newton-raphson en varias variables. Tengo este codigo hasta ahora pero esta malo ya que no se como usar sym para matrices y multiples variables:
%=========================================================
% Metodo de Newton-Raphson para varias variables
%=========================================================
xo=[0,0,0] ;
syms x y z;
fname=[3*x-cos(y*z)-0.5;4*x^2-625*y^2+2*y-1;exp(-x*y)+20*z-1+10*pi/3];
fprima=jacobian(fname);
epsilon=1.e-10;
maxiter = 30;
iter = 1;
error=abs(subs(fname,x,y,z,xo));
fprintf('%1.8f', error);
while error >= epsilon
fxo=subs(fname,x,y,z,xo);
fpxo=subs(fprima,x,y,z,xo);
x1=xo-inv(fpxo)*fxo;
fx1=subs(fname,x,y,z,x1);
error =abs(fx1);%abs(x1-xo);
fprintf(' Iteracion %1.0f \n Aprox de la raiz %1.8f Valor de la funcion %1.8e \n',iter,x1,fx1);
if iter > maxiter
fprintf(' Numero maximo de iteraciones excedido \n');
break
end
xo=x1;
iter=iter + 1;
end
Saludos.
%=========================================================
% Metodo de Newton-Raphson para varias variables
%=========================================================
xo=[0,0,0] ;
syms x y z;
fname=[3*x-cos(y*z)-0.5;4*x^2-625*y^2+2*y-1;exp(-x*y)+20*z-1+10*pi/3];
fprima=jacobian(fname);
epsilon=1.e-10;
maxiter = 30;
iter = 1;
error=abs(subs(fname,x,y,z,xo));
fprintf('%1.8f', error);
while error >= epsilon
fxo=subs(fname,x,y,z,xo);
fpxo=subs(fprima,x,y,z,xo);
x1=xo-inv(fpxo)*fxo;
fx1=subs(fname,x,y,z,x1);
error =abs(fx1);%abs(x1-xo);
fprintf(' Iteracion %1.0f \n Aprox de la raiz %1.8f Valor de la funcion %1.8e \n',iter,x1,fx1);
if iter > maxiter
fprintf(' Numero maximo de iteraciones excedido \n');
break
end
xo=x1;
iter=iter + 1;
end
Saludos.
Valora esta pregunta


0