Вы находитесь на странице: 1из 3

2.

Códigos en MATLAB
2.1 Código y ejemplo para el metodo de sustitucion sucesiva
martin rivera toledo
otoño 2003
% inicio del archivo sucesivamain.m
% archivo de prueba para el metodo de sustitucion sucesiva
% problema ejemplo
% 2x=sin((x+y)/2)
% 2y=cos((x-y)/2)
% con el estimado inicial x0=10 & y0=-10
% tolerancia de 10^-4
clc; clear all; format compact;
delta=1e-4; % tolerancia
max1=100; % maximo numero de iteraciones
x0=10; y0=-10; % estimado inicial
P=[x0,y0];
[P,iter]=sucesiva('G',P,delta,max1) %uso de la rutina de calculo
A=feval('G',P); % evaluacion de la funcion G en el punto solucion
f=P-A % valor de la funcion en el punto solucion
% inicio del archivo sucesivamain.m
% inicio del archivo sucesiva.m
% algoritmo para calculo de las raices de un sistema de ecuaciones
% algebraico no lineal por el metodo de sustitucion sucesiva
function [P,iter]=sucesiva(G,P,delta,max1)
% input -G es el sistema de ecuaciones algebraicas en el archivo de nombre G.m
% -P es el estimado inicial para la busqueda de la solucion
% -delta es el limite de error
% -max1 es el numero maximo de iteraciones
% output -P es la aproximacion a la solucion para el sistema de ecuaciones
% -iter es el numero de iteraciones requerido para alcanzar la convergencia
N=length(P); % calculo del numero de elementos del vector
for k=1:max1
X=P; % X es la k-esima aproximacion a la solucion
for j=1:N
A=feval('G',X);% asignacion de g(x)con x(k+1)
X(j)=A(j);
end
err=abs(norm(X-P));
relerr=err/(norm(X)+eps);
P=X;
iter=k;
if(err<delta)|(relerr<delta)
break
end
end
% fin del archivo sucesiva.m
% inicio del archivo G.m
function [f]=G(P)
x=P(1); y=P(2);% reasignacion de parametros
f(1)=sin((x+y)/2)/2;
f(2)=cos((x-y)/2)/2;
% fin del archivo G.m
***************
la solucion obtenida es
P =[ 0.1605 0.4931 ]
iter = 8
f = 1.0e-004 * [ -0.1934 0.0012 ]
2.2 Aplicacion del método de newton para resolver un sistema de
ecuaciones algebricas no lineales
% inicio del archivo newtonmain.m
% aplicacion del metodo de newton para resolver un sistema de
% ecuaciones algebraicas no lineales
% x^2-2*x-y+0.5=0;
% x^2+4*y^2-4=0;
% considerando un estimado inicial de x0=1, y0=1 y las tolerancias son de 0.00001
% con un maximo numero de iteraciones de 100
clc; clear all; format compact;
x0=1; y0=1; % estimado iniciales
x=[x0 y0]; % estimado inicial en forma vectorial
delta=1e-5; epsilon=1e-5; % tolerancias
max1=100; % numero maximo de iteraciones
[P,iter,err]=newdim('F','JF',x,delta,epsilon,max1);
fprintf('************ resultados **************\n')
x_solucion=P(1)
y_solucion=P(2)
numero_de_iteraciones=iter
error=err
fprintf('*******************************************')
% fin del archivo newtonmain.m
% inicio del archivo newdim.m
% rutina para calcular las raices de un sistema de
% ecuaciones algebraicas no lineales
function [P,iter,err]=newdim(F,JF,P,delta,epsilon,max1)
% input -F rutina de ecuaciones a resolver en el archivo F.m
% -JF rutina matriz jacobiana en el archivo JF.m
% -P vector de estimados iniciales para la busqueda de la solucion
% -delta tolerancia para P
% -epsilon tolerancia para F(P)
% -max1 numero maximo de iteraciones en el proceso iterativo
%output -P es la aproximacion a la solucion
% -iter numero de iteraciones neceario para alcanzar la convergencia
% -err error estimado para P
Y=feval('F',P);
for k=1:max1
J=feval('JF',P);
Q=P-(J\Y')';
Z=feval('F',Q);
err=norm(P-Q);
relerr=err/(norm(Q)+eps);
P=Q;
Y=Z;
iter=k;
if(err<delta)|(relerr<delta)|(abs(Y)<epsilon)
break
end
end
% fin del archivo newdim.m
% inicio del archivo F.m
% rutina para evaluar el conjunto de ecuaciones a resolver
function z=F(X)
x=X(1); y=X(2); % reasignacion de variables
z=zeros(1,2);
z(1)=x^2-2*x-y+0.5;
z(2)=x^2+4*y^2-4;
% fin del archivo F.m
% inicio del archivo JF.m
% rutina para evaluar el conjunto de ecuaciones a resolver
function dz=JF(X)
x=X(1); y=X(2); % reasignacion de variables
dz=zeros(2,2);
dz(1,1)=2*x-2;
dz(2,1)=2*x;
dz(1,2)=-1;
dz(2,2)=8*y;
% fin del archivo JF.m
************ resultados **************
x_solucion =
1.9007
y_solucion =
0.3112
numero_de_iteraciones =
7
error =
2.7744e-005

Вам также может понравиться