0 calificaciones0% encontró este documento útil (0 votos)
5 vistas11 páginas
El documento describe dos métodos para resolver sistemas de ecuaciones no lineales: el método de Newton y el método de Jacobi. El método de Newton utiliza el método iterativo de punto fijo para aproximar las soluciones de las ecuaciones no lineales mediante el cálculo del jacobiano y la multiplicación de matrices. El método de Jacobi también es un método iterativo que aproxima las soluciones sustituyendo simbólicamente los términos de cada ecuación.
El documento describe dos métodos para resolver sistemas de ecuaciones no lineales: el método de Newton y el método de Jacobi. El método de Newton utiliza el método iterativo de punto fijo para aproximar las soluciones de las ecuaciones no lineales mediante el cálculo del jacobiano y la multiplicación de matrices. El método de Jacobi también es un método iterativo que aproxima las soluciones sustituyendo simbólicamente los términos de cada ecuación.
El documento describe dos métodos para resolver sistemas de ecuaciones no lineales: el método de Newton y el método de Jacobi. El método de Newton utiliza el método iterativo de punto fijo para aproximar las soluciones de las ecuaciones no lineales mediante el cálculo del jacobiano y la multiplicación de matrices. El método de Jacobi también es un método iterativo que aproxima las soluciones sustituyendo simbólicamente los términos de cada ecuación.
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