Está en la página 1de 11

 METODO DE NEWTON SISTEMAS NO LINEALES

clear all; %borra las variables guardadas


clc; %borra todo texto en el comamand window
syms x y %me crea varibleS simbolicas
disp('METODO DE NEWTON ECUACIONES NO LINEALES') %muestra un mensaje
f1=input('Ingrese la primera funcion: '); %muestra un mensaje y espera a
que el usuario introduzca la funcion
f2=input('Ingrese la segunda funcion: '); %muestra un mensaje y espera a
que el usuario introduzca la funcion
a=input('Ingrese valor inicial de x: '); %muestra el texto y espera a
que el usuario introduzca un valor de a
b=input('Ingrese valor inicial de y: '); %muestra el texto y espera a
que el usuario introduzca un valor de b
vi=[a;b]; %crea vector con los datos de a y b
f1xy=subs(f1,{x,y},{a,b}); %evalua la funcion f1 para las variables x y
y, reemplazados con los datos de a y b
f2xy=subs(f2,{x,y},{a,b}); %evalua la funcion f2 para las variables x y
y, reemplazados con los datos de a y b
mf=[f1xy ; f2xy]; %crea vector que me guarda los valores hallados
anteriormente
df1x=diff(f1,x); %deriva la f1 respecto a x y me lo guarda en la variable
df1y=diff(f1,y); %deriva la f1 respecto a y y me lo guarda en la
variable
df2x=diff(f2,x); %deriva la f2 respecto a x y me lo guarda en la
variable
df2y=diff(f2,y); %deriva la f2 respecto a y y me lo guarda en la
variable
evx1=subs(df1x,{x,y},{a,b}); %evalua la derivada de la f1 respecto a x,
con los datos de a y b
evy1=subs(df1y,{x,y},{a,b}); %evalua la derivada de la f1 respecto a y,
con los datos de a y b
evx2=subs(df2x,{x,y},{a,b}); %evalua la derivada de la f2 respecto a x,
con los datos de a y b
evy2=subs(df2y,{x,y},{a,b}); %evalua la derivada de la f2 respecto a y,
con los datos de a y b
mj=[ evx1 evy1 ; evx2 evy2 ]; %con los datos hallados en anteriormente se
crea vector
jin=inv(mj); %%el vector creado de mj se le halla el inverso por medio
del comado inv
mul=jin*mf; %multimplicacion de los vectores jin y mf
aprox=vi-mul; %resta del vector inicial con el vector resultante de la
multiplicacion de vectores anterior
E=100; %varible del error
T=0.0000001; %varible de la tolerancia
fprintf(' VALORES\t FUNCION\t JACOBIANO\t
INVERSA\t PRODUCTO\t APROXIMACION\n');
%el \n es un indicador de nueva línea, el fprintf para imprimir la
informacion,\t tabula de forma horizontal
%me muestra los titulos de la tabla para que el ususario identifique que
es
%cada valor, de forma ordenada
fprintf(' %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t
%.6f\n',a,f1xy,evx1,evy1,jin(1,1),jin(1,2),mul(1,1),aprox(1,1));
%el fprintf me imprime los datos dentro de el, el valor de .6 antes del f
me limita la cantidad de decimales en 6, el %f es la notacion de punto
fijo mostrando los valores despues del
% punto decimal, los espacios me definen la separacion entre columnas, \n
me controla que pase a la
% siguiente fila, los nombres de las variables despues de la coma permite
% que se vaya llenando la tabla con los resultados de las operaciones, en
% los que son vectores se especifica el valor de la posicion que quiero
que
% me tabule
fprintf(' %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t
%.6f\n\n',b,f2xy,evx2,evy2,jin(2,1),jin(2,2),mul(2,1),aprox(2,1));
%debido a que son matrices 2x2 por eso son dos fprintf y al final lleva
%doble\n para que me separe en una linea antes de la otra iteracion y se
%vea mas ordenado
while E>=T %mientras el error sea mayor a la tolerancia proceda a
realizar las operaciones que estan dentro del while

E=abs(aprox-vi); %formula de error a calcular si se cumple la


condicion del while
if E>=T %si el error es mayo a la tolerancia, le indica al programa
que haga las operaciones dentro del if
a=aprox(1,1); %me guarda como nuevo valor de a lo contenido
dentro del vector aprox en la pision indicada
b=aprox(2,1); %me guarda como nuevo valor de b lo contenido
dentro del vector aprox en la pision indicada
vi=[a;b]; %crea vector con los valores nuevos de a y b
f1xy=subs(f1,{x,y},{a,b}); %evalua la funcion f1 para las
variables
f2xy=subs(f2,{x,y},{a,b}); %evalua la funcion f2 para las
variables x y y, reemplazados con los datos de a y b
mf=[f1xy ; f2xy]; %crea vector que me guarda los valores hallados
anteriormente
df1x=diff(f1,x); %deriva la f1 respecto a x y me lo guarda en la
variable
df1y=diff(f1,y); %deriva la f1 respecto a y y me lo guarda en la
variable
df2x=diff(f2,x); %deriva la f2 respecto a x y me lo guarda en la
variable
df2y=diff(f2,y); %deriva la f2 respecto a y y me lo guarda en la
variable
evx1=subs(df1x,{x,y},{a,b}); %evalua la derivada de la f1
respecto a x, con los datos de a y b
evy1=subs(df1y,{x,y},{a,b}); %evalua la derivada de la f1
respecto a y, con los datos de a y b
evx2=subs(df2x,{x,y},{a,b}); %evalua la derivada de la f2
respecto a x, con los datos de a y b
evy2=subs(df2y,{x,y},{a,b}); %evalua la derivada de la f2
respecto a y, con los datos de a y b
mj=[ evx1 evy1 ; evx2 evy2 ]; %con los datos hallados en
anteriormente se crea vector
jin=inv(mj); %%el vector creado de mj se le halla el inverso por
medio del comado inv
mul=jin*mf; %multimplicacion de los vectores jin y mf
aprox=vi-mul; %resta del vector inicial con el vector resultante
de la multiplicacion de vectores anterior

end %%finaliza el ciclo del if


fprintf(' %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t
%.6f\n',a,f1xy,evx1,evy1,jin(1,1),jin(1,2),mul(1,1),aprox(1,1));
%el fprintf me imprime los datos dentro de el, el valor de .6 antes del f
me limita la cantidad de decimales en 6, el %f es la notacion de punto
fijo mostrando los valores despues del
% punto decimal, los espacios me definen la separacion entre columnas, \n
me controla que pase a la
% siguiente fila, los nombres de las variables despues de la coma permite
% que se vaya llenando la tabla con los resultados de las operaciones, en
% los que son vectores se especifica el valor de la posicion que quiero
que
% me tabule
fprintf(' %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t %.6f\t
%.6f\n\n',b,f2xy,evx2,evy2,jin(2,1),jin(2,2),mul(2,1),aprox(2,1));
%debido a que son matrices 2x2 por eso son dos fprintf y al final lleva
%doble\n para que me separe en una linea antes de la otra iteracion y se
%vea mas ordenado
end %%finaliza ciclo del while
 METODO DE JACOBI
clear all; %borra las variables guardadas
clc; %borra todo texto en el comamand window
syms x1 x2 x3 %me crea varibleS simbolicas
disp('METODO DE JACOBI') %muestra un mensaje
ec1=input('Ingrese la ecuacion 1: '); %muestra un mensaje y espera a que
el usuario introduzca la ecuacion
ec2=input('Ingrese la ecuacion 2: '); %muestra un mensaje y espera a que
el usuario introduzca la ecuacion
ec3=input('Ingrese la ecuacion 3: '); %muestra un mensaje y espera a que
el usuario introduzca la ecuacion
T=input('Ingrese el margen de errror: '); %muestra un mensaje y espera a
que el usuario introduzca n margen de error
x0=[0 0 0]; %vector de ceros
X1=solve(ec1,x1);
%el solve en este caso me despeja la ecuacion en este caso la ec1
respecto a la variable x1
X2=solve(ec2,x2);
%el solve en este caso me despeja la ecuacion en este caso la ec2
respecto
%a la variable x2
X3=solve(ec3,x3);
%el solve en este caso me despeja la ecuacion en este caso la ec3
respecto
%a la variable x3
ite=0; %variable que me va a llevar la cuenta de las iteraciones
E=100; %varible del error

fprintf(' Ite\t X1\t X2\t X3\t E1\t E2\t


E3\n')
%el \n es un indicador de nueva línea, el fprintf para imprimir la
informacion,\t tabula de forma horizontal
%me muestra los titulos de la tabla para que el ususario identifique que
es
%cada valor, de forma ordenada
A=zeros(1,3); %crea matriz de ceros del tamaño especifido
while E>=T %mientras el error sea mayor a la tolerancia proceda a
realizar las operaciones que estan dentro del while

if E>=T %si el error es mayo a la tolerancia, le indica al programa


que haga las operaciones dentro del if
ite=ite+1; %contador del numero de iteraciones, si cumple la
condicion del if aumente en 1 la iteracion
A=x0; %los valores de la matriz de ceros sea iguales a los
delvector x0
xa(1,1)=subs(X1,[x2 x3], [x0(1,2) x0(1,3)]);
%subs- sustitucion simbolica, evalua en la formula de X1, con los
%valores de x2 y x3, indicando que estos valores se encuentran en
las
%posiciones indicadas del vector x0 y el resultado me lo guarda en
el
%en el vector xa en la posicion que se le indique
xa(1,2)=subs(X2,[x1 x3], [x0(1,1) x0(1,3)]);
%subs- sustitucion simbolica, evalua en la formula de X2, con los
%valores de x1 y x3, indicando que estos valores se encuentran en
las
%posiciones indicadas del vector x0 y el resultado me lo guarda en
el
%en el vector xa en la posicion que se le indique
xa(1,3)=subs(X3,[x1 x2], [x0(1,1) x0(1,2)]);
%subs- sustitucion simbolica, evalua en la formula de X3, con los
%valores de x1 y x2, indicando que estos valores se encuentran en
las
%posiciones indicadas del vector x0 y el resultado me lo guarda en
el
%en el vector xa en la posicion que se le indique
x0=xa; %los datos obtenidos del vector xa, se guardan en x0
E=(abs((x0-A)./x0)*100); %me calcula el nuevo valor del error
para cada valor de la matriz

end %%finaliza el ciclo del if


fprintf('%5.4f\t %5.4f\t %5.4f\t %5.4f\t %5.4f\t %5.4f\t %5.4f\
n',ite,x0,E)
%el fprintf me imprime los datos dentro de el, el valor de 5.4 antes del
f me limita la cantidad de enteros en 5 y la cantidad de decimales en 4,
el %f es la notacion de punto fijo mostrando los valores despues del
% punto decimal, los espacios me definen la separacion entre columnas, \n
me controla que pase a la
% siguiente fila, los nombres de las variables despues de la coma permite
% que se vaya llenando la tabla con los resultados de las operaciones
end %%finaliza ciclo del while
 METODO DE GAUSS SEIDEL
clear all; %borra las variables guardadas
clc; %borra todo texto en el comamand window
syms x1 x2 x3 %me crea varibleS simbolicas
disp('METODO DE GAUSS SEIDEL') %me permite mostrar un texto
ec1=input('Ingrese la ecuacion 1: '); %muestra un mensaje y espera a que
el usuario introduzca la ecuacion
ec2=input('Ingrese la ecuacion 2: '); %muestra un mensaje y espera a que
el usuario introduzca la ecuacion
ec3=input('Ingrese la ecuacion 3: '); %muestra un mensaje y espera a que
el usuario introduzca la ecuacion
T=input('Ingrese el margen de errror: '); %muestra un mensaje y espera a
que el usuario introduzca un margen de error
x0=[0 0 0]; %vector de ceros
X1=solve(ec1,x1);
%el solve en este caso me despeja la ecuacion en este caso la ec1
respecto a la variable x1
X2=solve(ec2,x2);
%el solve en este caso me despeja la ecuacion en este caso la ec2
respecto
%a la variable x2
X3=solve(ec3,x3);
%el solve en este caso me despeja la ecuacion en este caso la ec3
respecto
%a la variable x3
ite=0; %variable que me va a llevar la cuenta de las iteraciones
E=100; %varible del error
fprintf(' Ite\t X1\t X2\t X3\t E1\t E2\t E3\n')
%el \n es un indicador de nueva línea, el fprintf para imprimir la
informacion,\t tabula de forma horizontal
%me muestra los titulos de la tabla para que el ususario identifique que
es
%cada valor, de forma ordenada

A=zeros(1,3); %crea amtriz de ceros del tamaño especificado


while E>=T %mientras el error sea mayor a la tolerancia proceda a
realizar las operaciones que estan dentro del while

if E>=T %si el error es mayo a la tolerancia, le indica al programa


que haga las operaciones dentro del if
ite=ite+1; %contador del numero de iteraciones, si cumple la
condicion del if aumente en 1 la iteracion
A=x0; %los valores de la matriz de ceros sea iguales a los
delvector x0
x0(1,1)=subs(X1,[x2 x3], [x0(1,2) x0(1,3)]);
%subs- sustitucion simbolica, evalua en la formula de X1, con los
%valores de x2 y x3, indicando que estos valores se encuentran en las
%posiciones indicadas del vector x0 y el resultado me lo guarda en el
%mismo vector x0 en la posicion que se le indique
x0(1,2)=subs(X2,[x1 x3], [x0(1,1) x0(1,3)]);
%subs- sustitucion simbolica, evalua en la formula de X2, con los
%valores de x1 y x3, indicando que estos valores se encuentran en las
%posiciones indicadas del vector x0 y el resultado me lo guarda en el
%mismo vector x0 en la posicion que se le indique
x0(1,3)=subs(X3,[x1 x2], [x0(1,1) x0(1,2)]);
%subs- sustitucion simbolica, evalua en la formula de X3, con los
%valores de x1 y x2, indicando que estos valores se encuentran en las
%posiciones indicadas del vector x0 y el resultado me lo guarda en el
%mismo vector x0 en la posicion que se le indique
E=(abs((x0-A)./x0))*100; %me calcula el nuevo valor del error para
cada valor de la matriz
end %%finaliza el ciclo del if
fprintf('%5.4f\t %5.4f\t %5.4f\t %5.4f\t %5.4f\t %5.4f\t
%5.4f\n',ite,x0,E)
% el %f es la notacion de punto fijo mostrando los valores despues del
% punto decimal, los espacios me definen la separacion entre columnas, \n
me controla que pase a la
% siguiente fila, los nombres de las variables despues de la coma permite
% que se vaya llenando la tabla con los resultados de las operaciones
end %%finaliza ciclo del while

También podría gustarte