Octave - Programa del Método Newton Raphson para sistemas no lineales

 
Vista:
sin imagen de perfil

Programa del Método Newton Raphson para sistemas no lineales

Publicado por Ester (1 intervención) el 07/11/2021 15:05:35
Estimados:
Estoy programando con Octave el Método Newton Raphson para sistemas no lineales, pero tengo una pequeña falla, (porque me salen avisos de advertencia) aunque corre y arroja buenos resultados.

Dejo mi pseudocódigo a consideración para que, de ser posible, me indiquen en qué error o mala lógica estoy incurriendo para convertir en numéricas a las matrices F y Jacobiano. Veo que la conversión de simbólico a numérico no lo estoy haciendo bien.

Gracias por adelantado
Saludos cordiales
Ester

%Método de Newton Raphson para n>=2 Segunda Forma(empleando linsolve)
clear %Limpia la memoria
clc %Limpia la ventana de comandos
disp('Método de Newton Raphson sistema de ecuaciones no lineales')
fprintf('\n')
% Ingresar las expresiones de las funciones a emplear
f1=@(x,y) x.^2+x-y+5
ezplot(f1)
hold on
f2=@(x,y) 2.*x-y+7
ezplot(f2)
grid on
fprintf('\n')
pkg load symbolic
syms x y
disp('Matriz de las funciones:')
f(x,y)=[f1(x,y); f2(x,y)]
fprintf('\n')
disp('Matriz Jacobiana de F ')
jf(x,y)=jacobian(f,[x,y])%matriz Jacobiana de F
%convierto a handle
F= function_handle(f, 'vars', [x y]);%convierte de forma simbolica a forma handle
JF = function_handle(jf, 'vars', [x y]);%convierte de forma simbolica a forma handle
fprintf('\n')
disp('Matriz inicial ')
fprintf('\n')
X0=[-1.3;5.5]%Matriz inicial
fprintf('\n')
N=input('Ingrese el número de iteraciones, N=');
fprintf('\n')
epsilon=input('Ingrese la precisión deseada, epsilon=');
e=zeros(1,N);
iteracion=0;
for i=1:N
iteracion=iteracion+1
F0=F(X0(1),X0(2));
JF0=JF(X0(1),X0(2));
DX1=linsolve(JF0,-F0);
X1=DX1+X0
e=norm(X1-X0,Inf);
X0=X1;
fprintf('e(%d)=%2.10f \n', i, e)
fprintf('\n')
if e<epsilon, break, end
end
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