Matlab - Newton en varias variables

   
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

Newton en varias variables

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3441 intervenciones) el 02/05/2012 05:07:15
HOla Esteban.
Hice unos arreglos a tu codigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
clear all
 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;
 f=inline(fname);
 jf=inline(fprima);
 error=norm(f(xo(1),xo(2),xo(3)),2);
 fprintf('error=%12.8f\n', error);
 while error >= epsilon
    fxo=f(xo(1),xo(2),xo(3));
    fpxo=jf(xo(1),xo(2),xo(3));
    x1=xo-inv(fpxo)*fxo;
    fx1=f(x1(1),x1(2),x1(3));
    error =norm((fx1),2);%abs(x1-xo);
    fprintf(' Iter %2d  raiz x=(%14.9f,%14.9f,%14.9f) f(x)=(%14.9f,%14.9f,%14.9f)\n',....
          iter,x1(1),x1(2),x1(3),fx1(1),fx1(2),fx1(3));
    if iter > maxiter
        fprintf(' Numero maximo de iteraciones excedido \n');
    return;
    end
    xo=x1;
    iter=iter+1;
 end



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
EJECUCION
>> newton_no_lineal3
error= 10.62601859
 Iter  1  raiz x=(   0.500000000,   0.500000000,  -0.523598776) f(x)=(   0.034074174,-155.250000000,  -0.221199217)
 Iter  2  raiz x=(   0.500166687,   0.250803638,  -0.517387427) f(x)=(   0.008907426, -38.811766523,   0.006332456)
 Iter  3  raiz x=(   0.499944929,   0.126206248,  -0.520455120) f(x)=(   0.001991249,  -9.702818396,   0.001726282)
 Iter  4  raiz x=(   0.499986244,   0.063913043,  -0.522003133) f(x)=(   0.000515220,  -2.425277100,   0.000462397)
 Iter  5  raiz x=(   0.499994670,   0.032776789,  -0.522780131) f(x)=(   0.000130811,  -0.605916437,   0.000118227)
 Iter  6  raiz x=(   0.499997416,   0.017229186,  -0.523168406) f(x)=(   0.000032871,  -0.151079987,   0.000029843)
 Iter  7  raiz x=(   0.499998604,   0.009496205,  -0.523361562) f(x)=(   0.000008163,  -0.037374367,   0.000007429)
 Iter  8  raiz x=(   0.499999165,   0.005709867,  -0.523456143) f(x)=(   0.000001961,  -0.008960222,   0.000001787)
 Iter  9  raiz x=(   0.499999420,   0.003965928,  -0.523499707) f(x)=(   0.000000416,  -0.001900828,   0.000000380)
 Iter 10  raiz x=(   0.499999514,   0.003323321,  -0.523515759) f(x)=(   0.000000057,  -0.000258090,   0.000000052)
 Iter 11  raiz x=(   0.499999532,   0.003203543,  -0.523518751) f(x)=(   0.000000002,  -0.000008967,   0.000000002)
 Iter 12  raiz x=(   0.499999533,   0.003199071,  -0.523518863) f(x)=(   0.000000000,  -0.000000013,   0.000000000)
 Iter 13  raiz x=(   0.499999533,   0.003199065,  -0.523518863) f(x)=(  -0.000000000,  -0.000000000,  -0.000000000)



Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programacion matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Newton en varias variables

Publicado por christian (1 intervención) el 31/08/2014 04:28:21
Muchas gracias a mi tambien me ayudo mucho!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar