13
Abr

87

Métodos iterativos para resolver sistemas de ecuaciones (lineales y no lineales)

Voiced by Amazon Polly

Los métodos iterativos se caracterizan porque buscan acercarse al conjunto solución por medio de aproximaciones que van llevando sistemáticamente a la convergencia. A diferencia de los métodos directos (Eliminación de Gauss, Eliminación de Gauss-Jordan, Inversa-Multiplicación, Descomposición LU, Cramer) donde se aplica un algoritmo de pasos finitos para llegar a la solución, los métodos iterativos inician con un valor supuesto de la solución y por medio de aproximaciones y la evaluación de un criterio de convergencia se determina que se ha llegado a la solución más cercana, es decir que se puede tener un rango de error permitido de la solución.
¿cuándo aplicar métodos iterativos en lugar de métodos directos? si tomamos en cuenta la cantidad de operaciones que se deben realizar en un método directo para llegar a la solución el valor es de n^3 operaciones donde n es el número de lineas en la matriz o el número de ecuaciones en el sistema. Si hablamos de un sistema de 100 o 200 ecuaciones entonces se requiere de 1,000,000 u 8,000,000 operaciones para resolver esos sistemas respectivamente. Es de considerar el trabajo computacional que deben hacer las máquinas o el ser humano, si lo resolvemos a papel y lápiz, para llegar a la solución, debemos entonces buscar alternativas para llegar a la solución de una manera más eficiente además de eficaz.
La estrategia que siguen los métodos iterativos es encontrar una ecuación que nos vaya llevando sistemáticamente a la solución en cada iteración dado un valor inicial, la ecuación iterativa se parece un poco al método de sustitución o punto fijo que se aplica para ecuaciones no lineales, donde se tiene una ecuación con la forma x=g(x), se da un valor inicial de x que se sustituye en g(x), el resultado se vuelve a dar como parámetro a g(x) hasta que el valor sustituido y el valor obtenido tienen una mínima diferencia |x-g(x)| es menor que una tolerancia.

Método de Jacobi

En el método de Jacobi se descompone la matriz de coeficientes A en dos matrices, una se compone de los elementos de la diagonal D(i,i)=A(i,i). La matriz D no debe tener elementos cero, si fuera así se deben intercambiar los renglones para evitar ese caso. La otra matriz es el resto de los elementos, es decir los elementos que no son la diagonal R(i,j)=A(i,j) de tal manera que A = D + R.
Por lo tanto la ecuación que describe un sistema de ecuaciones lineales Ax = b ahora se expresa como [D+R]x = b.
La ecuación iterativa de Jacobi se inicia con valores supuestos x(k) y la ecuación iterativa obtiene los siguientes valores x(k+1). El proceso se repite hasta que la diferencia absoluta entre x(k+1) y x(k) sea mínima.

El siguiente código es el de la función de Jacobi, se debe crear un archivo .m en la opción de New Script para que en la ventana de edición se copie el código de abajo y se gurade con el nombre jacobi.m y debe quedar en la carpeta de trabajo o current folder

function x = jacobi(A,b,x,imax,tol)
if nargin==3
   imax=100;
   tol=1e-8;
end
D=diag(A);
R=A-diag(D);
cumple=0;
k=0;
while ( ~cumple && k<imax ) 
   xk1 =(b-R*x)./D; 
   norma = norm(x-xk1 ); 
   fprintf('iteracion :%3.0f norma: %e\n',k, norma );
   cumple = norma < tol; 
   x= xk1; 
   k =k+1; 
end 
if k >= imax
   error('El sistema no converge ');
end
end

ejemplo del uso del método de Jacobi (ventana command window de matlab)

A = [-512,12,0,0,0;
     500,-512,12,0,0;
     0,500,-512,12,0;
     0,0,500,-512,12;
     0,0,0,-500,512];
b = [0,0,0,0,9]';
x = [0,0,0,0,0]'; %valores iniciales
format longE
x = jacobi(A,b,x)

Un método iterativo puede converger a la solución pero también puede diverger, lo que significa que la diferencia absoluta entre x(k+1) y x(k) no se minimice sino que sea cada vez más grande por lo tanto no llegará a la solución. Para que un sistema llegue a la convergencia debe ser diagonalmente dominante, esto quiere decir que los elementos de su diagonal (la matriz D) debe ser mayor en valor absoluto a la suma de los absolutos de su mismo renglón o columna de la matriz R.

D(i,i) debe ser mayor que R(j,i) j desde 1 hasta n
D(i,i) debe ser mayor que R(i,j) j desde 1 hasta n

para toda i desde 1 hasta n

Tomemos por ejemplo la matriz A que tiene los valores

Matriz A
-512 12 0 0 0
500 -512 12 0 0
0 500 -512 12 0
0 0 500 -512 12
0 0 0 -500 512

La matriz D son los elementos de la diagonal, es decir lo elementos de color naranja

Matriz D
-512 0 0 0 0
0 -512 0 0 0
0 0 -512 0 0
0 0 0 -512 0
0 0 0 0 512

La matriz R son el resto de los elementos que no son la diagonal

Matriz R
0 12 0 0 0
500 0 12 0 0
0 500 0 12 0
0 0 500 0 12
0 0 0 -500 0

De tal manera que A=D+R. Cuando se dice que el sistema debe ser diagonalmente dominante se refiere a que los elementos de la diagonal deben ser mayores, en valor absoluto, a los elementos del mismo renglón y misma columna. Por ejemplo si revisamos es renglón 1. El elemento de la diagonal es 512 y la suma de los elementos del mismo renglón son 12+0+0+0=12, por lo tanto 512>12 y es diagonalmente dominante.

Matriz A: Renglón 1
-512 12 0 0 0

Ahora analicemos la columna 1, aquí vemos que el elemento de la diagonal es el mismo 512 y la suma de la misma columna es 500+0+0+0+0, entonces 512>500 y es diagonalmente dominante

Matriz A: Columna 1
-512
500
0
0
0

El mismo análisis se hace para el renglón 2 y columna 2 y todos los demás

Matriz A: Renglón 2, 512=500+12+0+0
500 -512 12 0 0
Matriz A: Columna 2, 512=12+500+0+0
12
-512
500
0
0

En este caso el elemento de la diagonal no es mayor sino igual, eso quiere decir que no es diagonalmente dominante y que mi sistema no va a converger? la respuesta que es si va a converger pero se va a llevar más iteraciones para llegar a la convergencia. Los sistemas que se generan en ingeniería son principalmente diagonalmente dominantes con coeficientes reales, así que no hay mucho tema aquí.

Método de Gauss-Seidel


Revisemos ahora el método de Gauss-Seidel o el método de Liebmann es un método iterativo que separa la matriz de coeficientes A en dos matrices, una matriz triangular inferior L que contiene los elementos de A que están en la diagonal inferior (la diagonal no debe contener ceros) y la matriz U que contiene los elementos de A que están sobre la diagonal.
De tal manera que A = L+U.La ecuación que describe un sistema de ecuaciones lineales Ax=b ahora se expresa como [L+U]x = b.

Matriz A
-512 12 0 0 0
500 -512 12 0 0
0 500 -512 12 0
0 0 500 -512 12
0 0 0 -500 512
Matriz L triangular inferior
-512 0 0 0 0
500 -512 0 0 0
0 500 -512 0 0
0 0 500 -512 0
0 0 0 -500 512
Matriz U triangular superior
0 12 0 0 0
0 0 12 0 0
0 0 0 12 0
0 0 0 0 12
0 0 0 0 0

La ecuación iterativa de Gauss-Seidel se inicia con valores supuestos x(k) y la ecuación iterativa obtiene los siguientes valores x(k+1). El proceso se repite hasta que la diferencia absoluta entre x(k+1) y x(k) sea mínima.

El siguiente código es el de la función de Gauss-Seidel, se debe crear un archivo .m en la opción de New Script para que en la ventana de edición se copie el código de abajo y se gurade con el nombre gauss_seidel.m y debe quedar en la carpeta de trabajo o current folder

function x = gauss_seidel(A,b,x,imax,tol)
if nargin==3
   imax=100;
   tol=1e-8;
end
L= tril(A);
U=A-L;
Linv = inv(L);
cumple = 0;
k=0;
while ( ~cumple && k<imax ) 
   xk1 = Linv*(b-U*x); 
   norma = norm(x-xk1); 
   fprintf('iteracion: %3.0f norma: %e\n',k,norma);
   cumple = norma < tol; 
   x=xk1; 
   k=k+1; 
end 
if k >= imax
   error('El sistema no converge ');
end
end

ejemplo del uso del método de Gauss-Seidel en la ventana command window

A = [-512,12,0,0,0;
     500,-512,12,0,0;
     0,500,-512,12,0;
     0,0,500,-512,12;
     0,0,0,-500,512];
b = [0,0,0,0,9]';
x = [0,0,0,0,0]'; %valores iniciales
format longE
x = gauss_seidel(A,b,x)

Recordemos que el sistema debe ser diagonalmente dominante.

Método SOR


El método de Gauss-Seidel se puede mejorar usando la modificación sugerida por Southwell por la introducción de un factor (llamado factor de relajación), lo que da como resultado el método de sobre-relajación sucesiva (SOR).

Donde w es un factor con los siguientes rangos de valores:
Sub-relajación 0 < w < 1 se logra la convergencia en sistemas divergentes.
Sobre-relajación 1 < w < 2 acelera la convergencia de sistemas convergentes.

function x=sor(A,b,x,w,imax,tol)
if nargin==3
   w=1;
   imax=100;
   tol=1e-8;
end
if nargin==4
   imax=100;
   tol=1e-8;
end
[n,c]=size(A);
cumple=0;
k=0;
while ( ~cumple && k<imax ) 
   xk1=zeros(n,1); 
   for i=1:n 
      s1=A(i,1:i)*xk1(1:i); 
      s2=A(i,i+1:end)*x(i+1:end); 
      xk1(i)=(b(i)-s1-s2)/A(i,i)*w+(1 -w)*x(i); 
   end 
   norma = norm(x-xk1); 
   fprintf('iteracion :%3.0f ->%e\n',k,norma );
   cumple = norma < tol; 
   x= xk1; 
   k =k+1; 
end 
if k > imax
   error ('El sistema no converge ');
end
end

ejemplo del uso del método de Gauss-Seidel

A = [-512,12,0,0,0;
      500,-512,12,0,0
      0,500,-512,12,0;
      0,0,500,-512,12;
      0,0,0,-500,512];
b = [0,0,0,0,9]';
x = [0,0,0,0,0]'; %valores iniciales
w = 1.1;
format longE
x = sor(A,b,x,w)

Sistemas de ecuaciones no lineales


Como vimos, los métodos iterativos resuelven sistemas de ecuaciones lineales, pero se pueden aplicar a los sistemas no lineales, la respuesta es sí. Ya hemos visto que la estrategia del punto fijo o sustitución es eficaz para ecuaciones no lineales porque buscan la intersección de x y g(x) de manera sistemática por lo tanto se pueden aplicar a sistemas de ecuaciones no lineales bajo el mismo concepto.

En el método de Gauss-Seidel multivariable se sigue el mismo procedimiento que en el método de Punto Fijo, los pasos a seguir son:
Despejar xi de la i-ésima ecuación para generar un sistema iterativo.

El vector x(k) es un vector inicial que se sustituye en el sistema para obtener x1(k+1), en el cálculo de x2(k+1) se utiliza el valor recién obtenido de x1(k+1) haciendo la sustitución sucesiva. El proceso se repite hasta cumplir con el criterio de convergencia.

El siguiente código es el de la función de punto fijo multivariable, se debe crear un archivo .m en la opción de New Script para que en la ventana de edición se copie el código de abajo y se gurade con el nombre pfmulti.m y debe quedar en la carpeta de trabajo o current folder

function [x] = pfmulti(g,x,imax,tol)
   if nargin==2
      imax=100;
      tol=1e-8;
   end
   cumple = 0;
   k=0;
   while ( ~cumple && k<imax )
      x0=x;
      x=g(x0);
      norma = norm(x-x0 );
      fprintf('iteracion :%3.0f norma: %e\n',k,norma);
      cumple=norma < tol;
      k =k+1; 
   end 
   if k >= imax
      error ('El sistema no converge ');
   end
end

Para resolver el siguiente sistema

se debe despejar x1 de la primera ecuación y x2 de la segunda para conseguir el sistema

Se debe construir un archivo .m que contenga la definición del sistema. Se crea un archivo g.m con la opción de New Script para contener ambas ecuaciones, el resultado es un vector donde se evalúa cada ecuación del sistema.

function [xk1] = g(x)
  xk1 = x;
  xk1(1) = sqrt(x(2)^2/5) ;
  xk1(2) = 0.25*(sin(x(1))+cos(x(2)) );
end

finalmente se ejecutan las siguientes líneas en la Command window para conseguir el conjunto solución del sistema. El parámetro @g es la función que contiene el sistema a resolver.

x = [0.5, -0.5]'; %Valores iniciales
format longE
x=pfmulti(@g,x)

La salida es el conjunto solución del sistema, que gráficamente es la intersección de ambas ecuaciones, hagamos la gráfica de éste sistema.

syms x1 x2; %variables involucradas en el sistema
sistema=[5*x1^2-x2^2;x2-(sin(x1)+cos(x2))/4]; %creacion del sistema
fimplicit(sistema) %grafica el sistema
hold on
scatter(x(1),x(2),'red','filled') %grafica la solucion del sistema
hold off

Para encontrar la otra solución se deben cambiar los valores iniciales y correr nuevamente el método

Comments (87)

  • Sebastián Acosta

    En el método SOR ¿Qué es lo que hace el factor W? ¿Cómo participa en el método iterativo?

    • Jcjimenezb

      Es una pregunta de mucho caracter porque eso quiere decir que quieres entender más a profundidad la estrategia del método.
      Piensa en un promedio ponderado donde das un 80% de peso al último valor y un 20% al valor anterior, eso genera que el nuevo valor calculado sea 80% parecido al último valor y 20% parecido al valor anterior, es decir que le das más peso al valor más reciente. Si observas con detalle el cáclulo de xk1(i) = (b(i)-s1 -s2)/A(i,i)*w+(1 -w)*x(i) tiene dos términos que se suman, el primero (b(i)-s1 -s2)/A(i,i)*w calcula el nuevo valor de xi y multiplica a w, es decir el nuevo valor por el factor de peso w; y el segundo (1 -w)*x(i) que es el valor anterior de xi y multiplica al complemento de w es decir (1-w). Si decides un valor de w=0.8, el complemento sería 1-0.8 que es 0.20, esto quiere decir que le das un peso del 80% al nuevo valor de xi y un 20% al valor anterior de xi, entonces el método SOR se comporta como un promedio ponderado entre el nuevo valor de xi y su valor anterior.

    • María Paula Valenti Ruiz

      Profesor, no sé si me confundo al leer pero¿En el método de Gauss-Seidel que pasa con los elementos que están en la diagonal? Ya que por lo entiendo estos son los valores que se encuentran por encima y por abajo de ella.
      Cuando menciona a la matriz X, ¿con valores iniciales se refiere a los estimados para luego con el comando siguiente ser cambiado por los originales? ¿Estos métodos al ser iterativos pueden comenzar siempre en 0 aunque lleve más iteraciones encontrar el valor?

  • Samantha García

    En el método SOR ¿Qué hace el factor W?

    • Jcjimenezb

      Es una pregunta de mucho caracter porque eso quiere decir que quieres entender más a profundidad la estrategia del método.
      Piensa en un promedio ponderado donde das un 80% de peso al último valor y un 20% al valor anterior, eso genera que el nuevo valor calculado sea 80% parecido al último valor y 20% parecido al valor anterior, es decir que le das más peso al valor más reciente. Si observas con detalle el cáclulo de xk1(i) = (b(i)-s1 -s2)/A(i,i)*w+(1 -w)*x(i) tiene dos términos que se suman, el primero (b(i)-s1 -s2)/A(i,i)*w calcula el nuevo valor de xi y multiplica a w, es decir el nuevo valor por el factor de peso w; y el segundo (1 -w)*x(i) que es el valor anterior de xi y multiplica al complemento de w es decir (1-w). Si decides un valor de w=0.8, el complemento sería 1-0.8 que es 0.20, esto quiere decir que le das un peso del 80% al nuevo valor de xi y un 20% al valor anterior de xi, entonces el método SOR se comporta como un promedio ponderado entre el nuevo valor de xi y su valor anterior.

  • Eduardo Reyes

    ¿El método de Gauss-Siedel es el único que tiene la restricción de ser diagonalmente dominante?

    • Jcjimenezb

      Tanto el método de Jacobi como Gauss-Seidel requeiren que el sistema sea diagonalmente dominante, si es poco dominante entonces se tarda en llegar a la convergencia.

  • Armando Kalyd Ontiveros Galicia

    ¿Entonces en el método SOR no tiene caso que w=1 ya que el valor definido coincide con el que entrega Gauss-Seidel?
    ¿Qué pasa en el método de Jacobi y en el de SOR si las raices fuesen imaginarias? ¿Se pueden obtener?

    • Jessica Cruces

      En el método SOR, ¿tiene alguna implicación que el valor de w se acerque al 0 en los casos divergentes o a 2 en los casos convergentes?
      Si es que la tiene, ¿se reflejaría en el número de iteraciónes necesarias para el cumplir con el criterio de convergencia?

      • Jcjimenezb

        La selección del valor de w es a prueba y error, el objetivo es encontrar un valor de w donde se consiga la convergencia con el menor número de iteraciones, regulamente los valores son cercanos a 1, por ejemplo 0.99, 0.98, 0.97 para los casos divergentes y 1.01, 1.02, 1.03 para casos convergentes.

    • Jcjimenezb

      Es correcto Armando ya que si w=1 entonces el primer término se multiplica por 1 y el segundo por 0 y entonces tienes el método de Gauss-Seidel. Por eso es que los rangos son abiertos, no cerrados.

  • ITZAYANA DE JESUS DIAZ GASPAR

    ¿En que métodos se pueden obtener raices imaginarias?

    • Jcjimenezb

      En un sistema de ecuaciones lineales no se obtienen soluciones complejas, si es que los coeficientes son reales.
      En un sistema de ecuaciones no lineales si se puede presentar el caso de soluciones complejas y deberías iniciar con valores complejos.

  • Jorge Eduardo Ibañez Pinacho

    En el método de Jacobi, ¿cómo se puede sustituir los ceros de la matriz D de tal forma que al sumarse con R resulte A? Sabiendo que D únicamente contiene a los elementos de la diagonal A

    • Jcjimenezb

      La matriz D se forma de la diagonal de A y el resto de valores son 0, la matriz R es todo lo que no es la diagonal de A, por ejemplo
      si A=
      1 2 3 4
      5 6 7 8
      9 10 11 12
      13 14 15 16

      entonces D=
      1 0 0 0
      0 6 0 0
      0 0 11 0
      0 0 0 16
      que son todos los elementos de la diagonal de A
      y R =
      0 2 3 4
      5 0 7 8
      9 10 0 12
      13 14 15 0

      de tal manera que si sumas D+R es A

    • Katia Flores

      Si en un sistema de ecuaciones no lineales se puede presentar el caso en el que se inicia con valores complejos y se obtienen valores complejos.

      ¿En un sistema de ecuaciones lineales, si se inicia con valores complejos se obtienen valores complejos o eso no puede ocurrió en esos casos ?

      • Jcjimenezb

        Si puede ocurrir, pero debes tomar en cuenta que si los coeficientes del sistema NO tiene valores complejos entonces la solución es real y se deben iniciar con valores reales.

  • Marian Navarro Cázares

    En el método de SOR, ¿cómo sabemos cuando tenemos un sistema divergente o convergente antes de introducir el factor de relajación? o ¿cómo saber que valor darle a W?

    • Jcjimenezb

      Si los valores de la diagonal son myores a los elementos del mismo renglón o misma columna entonces el sistema es diagonalmente dominante, si es diagonalmente dominante entonces el sistema es convergente. El valor de w es por prueba y error, el valor óptimo es con el que se consiguen menos iteraciones para la convergencia.

  • Fernando Zablah

    ¿Podría poner un ejemplo de las matrices L y U para el método de Gauss-Seidel por favor?

    • Jcjimenezb

      El método de Gauss-Seidel descompone la matriz de coeficientes A en dos matrices triangular superior U y triangular inferior L
      supongamos A=
      1 2 3
      4 5 6
      7 8 9
      La matriz inferior L se compone de los elementos que están bajo la diagonal inclusive
      1 0 0
      4 5 0
      7 8 9
      La matriz superior U se compone de los elementos que se encuentran sobre la diagonal exclusive
      0 2 3
      0 0 6
      0 0 0
      Si simas U+L es la matriz A

  • Naomi Corona Osorio

    ¿El valor inicial tiene alguna manera específica de obtenerse o simplemente dependerá de la ecuación y el contexto del sistema?
    ¿El uso de cada método es indistinto?

  • Jennifer Mendoza Cañas

    Hola profe tengo una duda. Cuando resuelvo muchos sistemas de ecuaciones en el solver de excel me di cuenta que es un método iterativo. Usted sabe cuál método usa excel?

    • Jcjimenezb

      La opción Solver de Excel es muy usado en ingeniería pero no lo recomiendo para sistemas grandes porque su arquitectura no es funcional para problemas más complejos.
      La opción solver tiene disponibles varios métodos de optimización como programación lineal, no lineal o entera, entre los que se encuentra el método simplex, Watson o GRG2. Los métodos los aplica de acuerdo a los datos que se alimentan, solver determina el tipo de problema y aplica el método que corresponde.
      La solución de un sistema de ecuaciones lienales o no lineales también se pueden resolver con los métodos de programación lineal y no lineal porque buscan el punto más cercano a la solución, que no son los métodos que revisamos aquí. Otra opción más es aplicar redes neuronales que también consiguen la solución porque aprenden el comportamiento de las funciones y pueden encontrar la solución. Lo que yo recomiendo es usar los métodos adecuados para el problema adecuado, puedes aplicar otros métodos que fueron diseñados para otro fin, pero no sería eficiente.

  • Aldo Rayas Reyes

    ¿El criterio de que el sistema debe ser diagonalmente dominante es que los elementos de su diagonal debe ser mayor o IGUAL en valor absoluto a la suma de los absolutos de su mismo renglón o columna de la matriz R? ¿O forzosamnte debe ser mayor? Ya que en el ejemplo solamente en la columna 1 y 5 se cumple que el valor absoluto es mayor

    Comparando los méodos de Jacobi y Gauss-Seidel, el segundo se podría decir que es más rápido ya que se cumple el criterio de convergencia en 6 iteraciones mientras que en el de Jacobi se cumple con 10 iteraciones. Sin embargo el resultado para el plato 5 difiere un poco en ambos casos ¿para este sistema en particular cuál solución se podría decir que es mejor?

    • Jcjimenezb

      Para que sea convergente se dice que debe ser diagonalmente dominante, puede ser que en algunos sistemas uno o varios elementos de la diagonal no cumplan con el criterio, eso no quire decir que el sistema sea divergente, es convergente pero puede llevarse más iteraciones para cumplir el criterio de convergencia.
      La diferencia que observas se debe a que la norma se obtiene con todo el vector solución, puede suceder que para algunos elementos valor cambie pero entre todos cumplen el criterio de convergencia, es por eso que el valor de la tolerancia debe ser más pequeño comparado con el que usamos en las ecuaciones no lineales, ya que en esos casos solo se compara un valor. En un sistema se comparan n valores, entonces si tienes un sistema más grande el valor de la toleracia debe ser más pequeña, o la otra opción es cambiar la validación para comparar cada valor del vector solución con el valor anterior, en lugar de obtener la norma euclidea que es la suma de todas las diferencias.

  • Alejandro Sánchez Ruiz

    ¿Cómo se puede saber cual método es el adecuado?, ¿Depende del problema?

    • Jcjimenezb

      El método de Jacobi se puede aplicar solo para sistemas diagonalmente dominantes. El método de Gauss-Seidel también se aplica a sistemas diagonalmente dominantes y suele se más rápido en la convergencia. El método SOR se puede aplicar a sistemas tanto convergentes como divergentes con el uso adecuado del factor w.
      Para sistemas de ecuaciones no lineales se puede aplicar tanto el método de Gauss-Seidel multivariable como el de Newton-Raphson multivariable.

  • Emma Pérez

    Para los sistemas de ecuaciones no lineales ¿únicamente se puede emplear el método de Gauss-Seidel multivariable, o se puede seguir un procedimiento similar con los otros métodos?

    • Jcjimenezb

      Otro método que se puede utilizar para resolver sistemas de ecuaciones no lineales es el método de Newton-Raphson multivariable que tienen en los apuntes de la materia. Solo que en método de Newton se requiere del JAcobiano que involucra la derivada parcial, en el caso de que el sistema no se pueda derivar entonces es no es posible aplicar éste método.

    • Andrea Sánchez

      Buen día profesor, no me queda claro el como determinar si es diagonal dominante.

      • Jcjimenezb

        Considera la matriz A del ejemplo
        -512, 12, 0, 0, 0;
        500, -512, 12,0, 0;
        0, 500, -512, 12, 0;
        0, 0, 500, -512, 12;
        0, 0, 0, -500, 512
        Toma los elementos de la diagonal para construir la matriz D
        -512, 0, 0, 0, 0;
        0, -512, 0, 0;
        0, 0, -512, 0, 0;
        0, 0, 0, -512, 0;
        0, 0, 0, 0, 512
        Ahora toma el resto de los elementos que no estan en la diagonal para construir la matriz R
        0, 12, 0, 0, 0;
        500, 0, 12,0, 0;
        0, 500, 0, 12, 0;
        0, 0, 500, 0, 12;
        0, 0, 0, -500, 0

        Validemos el absoluto del primer renglón de D y lo comparamos con el absoluto del primer renglón de R
        512, 0, 0, 0, 0;——– 0, 12, 0, 0, 0;
        validas que D es mayor que R, 512>12, eso quiere decir que el diagonalmente dominante para el primer renglón.
        Ahora toma el absoluto del segundo renglón de D y lo comparas con el absoluto del segundo renglón de R
        0, 512, 0, 0;———– 500, 0, 12,0, 0;
        validas que D es igual que R, 512=512 (500+12), eso quiere decir que es casi diagonalmente dominante para el segundo renglón.
        Haces lo mismo para el resto de los renglones.
        La validación también se hace por cada columna de D y de R, por ejemplo la primer columna
        512
        0
        0
        0
        0
        y de R
        0
        500
        0
        0
        0
        y validas que 512>500 entonces es diagonalmente dominante para la primer columna, haces lo mismo para todas las columnas.
        Al final observas que es casi diagonalmente dominante. No es necesario que sea diagonalmente dominante para todos los renglones y columnas, eso solo quiere decir que será más lenta la convergencia.

        La mayoría de los sistemas que se obtienen por balances de masa son diagonalmente dominantes.

  • Lesley Adriana Reyes Villalba

    ¿Asegurando que la suma de los elementos de la diagonal D sean mayor a la suma de la columna de R, el método no va a divergen?

    • Jcjimenezb

      No es necesario que sea diagonalmente dominante para todos los renglones y columnas, eso solo quiere decir que será más lenta la convergencia.

  • Montaño López Andrea

    ¿Entonces podemos decir que el método de Gauss-Seidel es el más adecuado (por ser menos complejo) a utilizar con sistemas de ecuaciones lineales?

    • Jcjimenezb

      El método de Gauss-Seidel se considera más eficiente que Jacobi porque llega a la solución con un número menor de iteraciones.

  • Luis Enrique Dominguez Urquiza

    Yo tengo una duda profesor,al momento de resolver los sistemas de ecuaciones no lineales si nuestra tolerancia nos da un valor de cero se puede decir que ya se llego al resultado? o ¿nunca da cero una tolerancia?, o necesariamente tiene que ser parecido a la tolerancia marcada?.

    • Jcjimenezb

      El caso ideal es que la diferencia entre el vector solución anterior y el nuevo sea cero, eso quiere decir que no habrá cambios en sucesivas iteraciones por lo que ya no tiene caso continuar.

  • JAZMIN FLORES DOMINGUEZ

    En el método de Jacobi, ¿cómo podríamos diferenciar que el problema puede diverger?, o que se podría hacer para que esto no sucediera

    • Jcjimenezb

      Como ya comenté, la convergencia depende de que el sistema sea diagonalmente dominante, si no es así, lo que se puede hacer es intercambiar las ecuaciones del sistema de tal manera que los elementos de la diagonal sean mayor a la suma de los elementos del mismo renglón y misma columna, no necesariamente todos los elementos de la diagonal deben cumplir que sean diagonalmente dominante pero si la mayoría de los elementos.
      Los sistemas que representan un balance de materia o promedio de temperaturas, etc, son principalmente diagonalmente dominantes, así que no se preocupen mucho que el sistema no sea diagonalmente dominante porque la mayoría lo será, solo los ejemplos de pizarrón no son diagonalmente dominante, esto se debe a que en los sistemas no todos los elementos interactúan con todos los elementos del sistema, el que sea diagonalmente dominante también quiere decir que un elemento solo interactúa con los de su alrededor pero no con todos, por lo tanto los coeficientes de la misma ecuación solo existirán para aquellos elementos cercanos. Por ejemplo, si revisamos el primer renglón de la matriz A
      -512, 12, 0, 0, 0;
      quiere decir que el primer elemento 512 (elemento de la diagonal), tiene relación solo con el segundo elemento 12, ya que el resto de los coeficientes son 0 y eso quiere decir que no tienen interacción.
      En el segundo renglón tenemos
      500, -512, 12,0, 0;
      eso quiere decir que el segunto elemento 512 (elemento de la diagonal) tiene solo relación con el primer 500 y tercer elemento 12, el resto son 0 por lo tanto no tiene relación.
      Recuerden que la matriz A representa el comportamiento del sistema, es decir, cómo se relacionan entre sí. Si hablamos por ejemplo de una columna de destilación y queremos calcular la concentración en el plato i-ésimo, ese plato solo tiene interacción con el plato de arriba i-1 y el de abajo i+1, no tiene interacción con los demás platos, por lo tanto el sistema solo tendrá coeficientes en esas incógnitas y no en las demás.

    • Emiliano Morales García

      Profesor buenas tardes. A lo mejor es una tontería pero tengo una duda con respecto a si se introdujera en la matriz (De los métodos expuestos) un número irracional como Pi, por lo que tengo entendido, cuando se ocupan estos números se encuentran truncados pero programas como MATLAB o Python, truncan el numero? Al ser truncado que no conlleva a un error?

      • Jcjimenezb

        Buena pregunta de un ingeniero, los errores de redondeo afectan mucho las soluciones que se quieren encontrar, trabajar con números irracionales como pi, e, o algún otro, tiene un error de redondeo asociado al usar su valor numérico, lo que hacen algunas aplicaciones como Mathematica es tratar las soluciones con la variable simbólica en lugar de su valor numérico para evitar los errores de redondeo y evitar que se propague en cada iteración, por lo tanto el resultado es mejor. Para mejorar los errores de redondeo las arquitecturas de las computadoras lo tratan de resolver usando más dígitos en la mantisa, así las computadoras de 64bits son mejores que las de 32 y seguramente en un futuro se crearán computadoras con mayor capacidad. Los matemáticos tratan de encontrar más dígitos de pi para que los cálculos sean mejores, hasta el momento se han descubierto al rededor de 22 millones de dígitos de pi. cuantos digitos se han descubierto de Pi

  • Sebastián Acosta

    ¿Qué sucede cuando no se puede despejar una de las variables? ¿Se puede utilizar la función de todas maneras (como hicimos con la ecuación de Van der Waals explícita en volumen)?

  • Eduardo Figueroa López

    profe, no me queda claro cuando se usa el método iterativo envés del directo…
    por lo que entendí, ¿un método iterativo se aplica cuando nuestro sistema de ecuaciones requiere realizar de un gran número de operaciones?

    pd: le mande un correo hace unos días, espero pueda revisarlo 🙁

    • Jcjimenezb

      Si te doy un sistema de 200 ecuaciones y te digo que apliques el método de Gauss-Jordan para resolver a mano en una hora, tendrías que hacer 8millones de operaciones en tu calculadora, podrías hacerlo?
      y si te digo que si usas Gauss-Seidel llegas a la solución en 10 iteraciones, qué método usas para resolverlo más rápido?

      • Eduardo Figueroa López

        Gauss-Seidel claro.
        Muchas gracias profesor.

  • Alejandro Sánchez Lugo

    Profesor, a mi no me queda del todo claro a que se refiere con que el método de Jacobi y Gauss-Seidel tengan que se diagonalmente dominante.
    Otra cuestión ¿para hacer la programación basta con meter los códigos insertados aquí en el blog?
    ¿Existen casos en los que se compita el uso del métodos iterativos vs métodos directos? de ser así que ambos sean aplicables ¿ cuál es mejor y mas fácil de usar?

    • Jcjimenezb

      Como ya comenté, la convergencia depende de que el sistema sea diagonalmente dominante, si no es así, lo que se puede hacer es intercambiar las ecuaciones del sistema de tal manera que los elementos de la diagonal sean mayor a la suma de los elementos del mismo renglón y misma columna, no necesariamente todos los elementos de la diagonal deben cumplir que sean diagonalmente dominante pero si la mayoría de los elementos.
      Los sistemas que representan un balance de materia o promedio de temperaturas, etc, son principalmente diagonalmente dominantes, así que no se preocupen mucho que el sistema no sea diagonalmente dominante porque la mayoría lo será, solo los ejemplos de pizarrón no son diagonalmente dominante, esto se debe a que en los sistemas no todos los elementos interactúan con todos los elementos del sistema, el que sea diagonalmente dominante también quiere decir que un elemento solo interactúa con los de su alrededor pero no con todos, por lo tanto los coeficientes de la misma ecuación solo existirán para aquellos elementos cercanos. Por ejemplo, si revisamos el primer renglón de la matriz A
      -512, 12, 0, 0, 0;
      quiere decir que el primer elemento 512 (elemento de la diagonal), tiene relación solo con el segundo elemento 12, ya que el resto de los coeficientes son 0 y eso quiere decir que no tienen interacción.
      En el segundo renglón tenemos
      500, -512, 12,0, 0;
      eso quiere decir que el segunto elemento 512 (elemento de la diagonal) tiene solo relación con el primer 500 y tercer elemento 12, el resto son 0 por lo tanto no tiene relación.
      Recuerden que la matriz A representa el comportamiento del sistema, es decir, cómo se relacionan entre sí. Si hablamos por ejemplo de una columna de destilación y queremos calcular la concentración en el plato i-ésimo, ese plato solo tiene interacción con el plato de arriba i-1 y el de abajo i+1, no tiene interacción con los demás platos, por lo tanto el sistema solo tendrá coeficientes en esas incógnitas y no en las demás.

      El código de cada método es el que se presenta aquí, debes crear las funciones en Matlab y correrlas con los parámetros que se indican.

      En cualquier sistema se pueden aplicar ambos tipos de métodos solo considera los siguientes criterios
      1. Si el sistema es grande por ejemplo 200 ecuaciones, tendrías que hacer 8millones de operaciones para conseguir el conjunto solución si usas Gauss-Joran, lo puedes hacer a mano, que no sería buena idea porque te vas a tardar mucho, por lo tanto no se recomienda.
      2. Si el sistema es grande y es diagonalmente dominante entonces te conviene aplicar un método iterativo para que hagas menos cáclulos porque se puede llegar a la solución en 10 o 20 iteraciones y el tiempo es menor.

      Como ves se puede aplicar los métodos directos a sistemas grandes pero no sería eficiente porque sería muy tardado, esa es la razón principal.

    • Alejandro Sánchez Lugo

      ¿Para el examen qué es lo que se tiene que graficar?

      • Jcjimenezb

        Se deben graficar las funciones para verificar que la intersección es precisamente la solución del sistema.

  • Emilio Gonzalo Ramos Bolde

    ¿Existen algún tipo de limitantes donde estos métodos iterativos no puedan resolver un tipo de sistema de ecuaciones? De ser así ¿Qué tipo de funciones son las que no tienen solución con dichos métodos?

    • Jcjimenezb

      Si el sistema tiene solución los métodos de Gauss-Seidel o Jacobi la encontrarán, la mayoría de los sistemas que resultan de balances de materia y en general de problemas reales, son diagonalmente dominantes y tienen solución, sin embargo llega haber sistemas que son complicados porque no están normalizados o su solución no está tan clara porque la intersección entre las ecuaciones son muy cercanas y se tienen errores de redondeo, hay otros sistemas que definitivamente no tienen solución porque sus ecuaciones no se intersecan en ningún punto y por lo tanto no hay método que encuentre una solución que de por sí no existe.

  • Paola mojica vega

    profesor entonces cuando tengamos un sistema de ecuaciones no lineales que podamos derivar ¿sería mejor utilizar el método de Newton-Raphson ó el de Gauss-Seidel? y ¿De qué depende está elección?

    • Jcjimenezb

      Interesante pregunta, cada método tiene sus ventajas y desventajas. La ventaja del método de Newton multivariable es que llega más rápido a la convergencia porque usa la derivada que como vimos en las ecuaciones no lineales de una sola variable, la derivada apunta a la raíz de manera más eficiente que el método de Sustitución donde puede diverger depende de la forma de g(x). Ño mismo sucede aquí, si tu sistema no es dificil de derivar es conveniente usar Newton pero si es muy complicado entonces la opción es Gauss-Seidel, recuerda también que ambos dependen de los valores iniciales, si das valores que están muy lejos de la solución se tardarán más en llegar a la convergencia.

  • Raúl Becerra Rodríguez

    Entonces, para quedar claro, en el método Jacobi se separa la matriz A en dos. en D y R: d es la diagonal y será una matriz de solo 1 columna por j regiones i.e. tomando sólo las posiciones (i,i) de la diagonal, ¿o será de i columnas por j renglones siendo las posiciones (i,j) ceros?
    ¿y en la matriz R las posiciones (i,i) son ceros o se «eliminan» esas posiciones formando una nueva matriz de i-1 columnas y j renglones?

  • Abril López López

    ¿Qué función tiene pfmulti? Al intentar ingresarlo a matlab el programa me dice que no lo reconoce

    • Jcjimenezb

      Revisa la ruta donde estás guardando tu función, porque debe ser la misma del current folder a la hora de ejecutarlo, de lo contrario no la va encontrar y te reportará el error que comentas.

  • López Genis Guadalupe Jazmin

    Profe, por lo que entendí, para resolver un sistema de ecuaciones lineales existen dos familias de métodos.
    Están los métodos directos (que ya estudiamos en clase) y los métodos iterativos (que también sirven para no lineales). Estos últimos son más adecuados cuando trabajamos con matrices de gran tamaño
    entonce, donde los métodos directos no suelen resultar ventajosos y los métodos iterativos sí son eficientes, tanto en almacenamiento en la computadora al hacerlo en algún programa y el tiempo en el que obtenemos una solución.

    Mi duda es, ¿Usamos los métodos iterativos en el caso de sistemas
    con un gran número de ecuaciones y con un alto porcentaje de coeficientes nulos?

    • Jcjimenezb

      Es correcto, por suerte la mayoría de los sistemas que usamos en ingeniería son tridiagonales.

  • Guadalupe Jazmin López Genis

    Profe, por lo que entendí, para resolver un sistema de ecuaciones lineales existen dos familias de métodos.
    Están los métodos directos (que ya estudiamos en clase) y los métodos iterativos (que también sirven para no lineales). Estos últimos son más adecuados cuando trabajamos con matrices de gran tamaño
    entonce, donde los métodos directos no suelen resultar ventajosos y los métodos iterativos sí son eficientes, tanto en almacenamiento en la computadora al hacerlo en algún programa y el tiempo en el que obtenemos una solución.

    Mi duda es, ¿Usamos los métodos iterativos en el caso de sistemas
    con un gran número de ecuaciones y con un alto porcentaje de coeficientes nulos?

  • Guadalupe Jazmin López Genis

    Profe, por lo que entendí, para resolver un sistema de ecuaciones lineales existen dos familias de métodos.
    Están los métodos directos (que ya estudiamos en clase) y los métodos iterativos (que también sirven para no lineales). Estos últimos son más adecuados cuando trabajamos con matrices de gran tamaño
    entonce, donde los métodos directos no suelen resultar ventajosos y los métodos iterativos sí son eficientes, tanto en almacenamiento en la computadora al hacerlo en algún programa y el tiempo en el que obtenemos una solución.
    Usamos los métodos iterativos en el caso de sistemas con un gran número de ecuaciones y con un alto porcentaje de coeficientes nulos

  • Fausto Barón Castañeda

    Profesor, en caso de que una matiz no sea diagonalmente dominante, ¿hay forma de hacerla de este modo?

  • Flor Colmenares Cervantes

    En caso de tener un sistema con coeficientes complejos ¿Cuál método sería el más recomendable?

    • Jcjimenezb

      Aplican los mismos criterios que con los coeficientes reales, pero dime en qué casos de ingeniería se tienen sistemas con coeficientes complejos?

  • Héctor Pérez Guajardo

    ¿en éstos métodos numéricos iterativos su fundamento aplica para sistemas de ecuaciones de segundo grado (o mayor), o hay métodos completamente diferentes para esos sistemas?

    • Jcjimenezb

      Los sistemas que comentas son sistemas de polinomios y se aplica el método de la misma manera, no solo para polinomios sino para todo tipo de funciones no lineales.

  • Vania Villalobos

    Profe, ¿importa que variable se despeja en cada ecuación o tiene un orden de despeje para que se resuelva de forma correcta el sistema de ecuaciones ?

    • Jcjimenezb

      No tiene un orden en específico, lo que se suele hacer es colocar en primer lugar la ecuación que es más fácil despejar x1, en segundo lugar la que es más fácil de despejar x2 y así para todas. Puede ser que ese despeje te ayude a encontrar un conjunto solución, si no converge entonces puedes tratar cambiando el orden de las ecuaciones y despejar las variables de otra forma y pude ser que así pueda converger.

  • SEBASTIAN GONZALEZ FLORES

    Profesor entonces se podría decir que el método de SOR es el más eficiente y eficaz en comparación con el método de Jacobi y Gauss-Seidel ya que contiene el factor w por lo que ya no tendríamos problemas de convergencia?

    • Jcjimenezb

      Si es mas eficiente, pero debes encontrar el factor w adecuado y para lograrlo requieres de hacer prueba y error variando el valor de w hasta que encuentres el más adecuado.

  • Oscar Eduardo Grande Carro

    Tengo una duda respecto al método de Jacobi. Respecto a que, debido a que un sistema que diagonalmente dominante provoca que se lleve menos iteraciones para llegar poder converger y obtener los resultados, es una condición propia de matrices ¿Esta condición tendrá algún análogo para métodos de una sola ecuación no lineal?

    • Jcjimenezb

      Dado que el método de Jacobi se asemeja al método de punto fijo en el sentido que se despeja xi de la i-ésima ecuación y luego se asigna un valor inicial para el vector solución, lo mismo se hace para el punto fijo de una sola variable para una ecuación no lineal, ahí se despeja parcialmente x y se obtiene una ecuación x=g(x), para inicial el método se da un valor inicial a x. El método de Jacobi requiere que el sistema sea diagonalmente dominante para que se asegure la convergencia, en el método del punto fijo se debe cumplir que |g'(x)| sea menor a 1 para asegurar la convergencia.

      • Oscar Eduardo Grande Carro

        De acuerdo, muchas gracias maestro

  • Marlene Aurora Pale Lara

    Profesor una duda, un método iterativo puede converger a la solución pero también puede divergir, el valor inicial que se le dé a cualquiera de estos métodos tiene relación con esto o solo importa que el sistema sea diagonalmente dominante y no importa que valor inicial se le dé.

    • Jcjimenezb

      El criterio para converger es que sea diagonalmente dominante, el valor inicial influye en el número de iteraciones que se hacen para llegar a la convergencia.

  • Juan Pablo Martínez Gama

    ¿Hay alguna manera de definir si el sistema de ecuaciones no lineales converge o no converge? En el caso de que no convergiera, ¿se puede agregar también un factor «w» que haga que el sistema converja?

  • Sofía Inés Chávez Jiménez

    Profesor, ¿entonces primero se debe crear y guardar TODO el código de alguna de las funciones y después meter los datos de la matriz A, B?
    Y otra pregunta, en el ejmplo del método de Gauss-Seidel en x está x = [0 ,0 ,0 ,0 ,0]’; %valores iniciales
    ¿Eso de %valores iniciales, es lo que hay que meter?

  • LUIS ALEJANDRO CHAVERO CAMPOS

    Profesor, tengo varias dudas para sistemas de ecuaciones no lineales…
    1. ¿cómo podemos asignar un mejor valor en los valores estimados iniciales para un método iterativo?
    2.Cuando los estimados iniciales nos dan una solución, ¿hay algún criterio a seguir en cómo podemos cambiar esos estimados iniciales para encontrar otra solución?
    Gracias

    • Jcjimenezb

      La respuesta a ambas preguntas es: apóyate en el método gráfico para ubicar visualmente la intersección y dá esos valores iniciales al método, eso servirá para que encuentre la solución con pocas iteraciones, si dar valores cercanos a la otra intersección entonces es posible que el método te dé la solución que esperas.

  • Débora Barragán

    Profesor, al ser métodos iterativos, ¿forzosamente debe de haber una intersección de todas las ecuaciones o el hecho de que se haga en matlab o alguna otra herramienta quita esa limitante?

    • Jcjimenezb

      Si el sistema tiene solución será esa y no depende de la herramienta o el método que se use, no porque uso matlab o mathematica o python el sistema tendrá solución. Los métodos enconterarán la solución con más o con menos iteraciones pero la encintrarán si es que el sistema tiene solución, sino la tienen entonces no podrá encontrarse algo que no existe por ningún método ni herramienta.

  • Andrea Aguilar Anaya

    Profesor, y si intento resolver un sistemas de ecuaciones lineales con SOR, Jacobi o Gauss-Seidel? Me dará el mismo resultado o alguno con mayor certeza? O también se podrá resolver en MATLAB al la hora de programarlo?Gracias!

    • Jcjimenezb

      La solución no depende del método a utilizar, si el sistema tiene solución será esa y no otra, la precisión de la solución dependerá de la tolerancia que se dé al método, el utilizar uno u otro método te dará más o menos iteraciones pero no la precisión de la respuesta.

  • Andrea Aguilar Anaya

    Profesor, otra duda, ésta es más de MATLAB, por qué al realizar la programación para un New Live Script no se puede hacer que se conecten dos volver así como usted lo escribió para New Script, o sea, que diferencia tiene .m que .mlx? Gracias

  • ANGEL GIOVANNI VILLEGAS MOYA

    En el método de Jacobi y Gauss-Saidel porque tenemos que tener la variable A ¿cuál es el beneficio o como interactua en el método interactivo?

  • Juan José Ramírez Cabanillas

    ¿Por qué la sobre-relajación se maneja en el intervalo 1 < w < 2?

    • Jcjimenezb

      Por que arriba de 2 el sistema se vuelve inestable.