Método iterativo utilizado para resolver un sistema lineal de ecuaciones.
En álgebra lineal numérica , el método de Jacobi (también conocido como método de iteración de Jacobi ) es un algoritmo iterativo para determinar las soluciones de un sistema de ecuaciones lineales estrictamente diagonalmente dominante . Se resuelve cada elemento de la diagonal y se introduce un valor aproximado. Luego, el proceso se itera hasta que converge. Este algoritmo es una versión simplificada del método de transformación de Jacobi de diagonalización de matrices . El método recibe su nombre de Carl Gustav Jacob Jacobi .
Descripción
Sea un sistema cuadrado de n ecuaciones lineales, donde:
Cuando se conocen y , y se desconoce, podemos utilizar el método de Jacobi para aproximar . El vector denota nuestra estimación inicial para (a menudo para ). Denotamos como la k- ésima aproximación o iteración de , y es la siguiente (o k +1) iteración de .
Fórmula basada en matrices
Luego A se puede descomponer en un componente diagonal D , una parte triangular inferior L y una parte triangular superior U : La solución se obtiene entonces iterativamente mediante
Fórmula basada en elementos
La fórmula basada en elementos para cada fila es la siguiente: El cálculo de requiere cada elemento excepto él mismo. A diferencia del método de Gauss-Seidel , no podemos sobrescribir con , ya que ese valor será necesario para el resto del cálculo. La cantidad mínima de almacenamiento es dos vectores de tamaño n .
Algoritmo
Entrada: estimación inicial x (0) a la solución , matriz A (diagonal dominante), vector b del lado derecho , criterio de convergencia Salida: solución cuando se alcanza la convergencia Comentarios: pseudocódigo basado en la fórmula basada en elementos anteriork = 0 mientras no se alcance la convergencia hacer para i := 1 paso hasta n hacer σ = 0 para j := 1 paso hasta n hacer si j ≠ i entonces σ = σ + a ij x j ( k ) fin fin x i ( k +1) = ( b i − σ ) / a ii fin incremento k fin
Convergencia
La condición de convergencia estándar (para cualquier método iterativo) es cuando el radio espectral de la matriz de iteración es menor que 1:
Una condición suficiente (pero no necesaria) para que el método converja es que la matriz A sea estrictamente o irreduciblemente diagonalmente dominante . La dominancia diagonal estricta por filas significa que, para cada fila, el valor absoluto del término diagonal es mayor que la suma de los valores absolutos de los otros términos:
El método de Jacobi a veces converge incluso si no se cumplen estas condiciones.
Nótese que el método de Jacobi no converge para cada matriz definida positiva simétrica . Por ejemplo,
Ejemplos
Ejemplo de pregunta
Un sistema lineal de la forma con estimación inicial está dado por
Usamos la ecuación , descrita anteriormente, para estimar . Primero, reescribimos la ecuación en una forma más conveniente , donde y . A partir de los valores conocidos ,
determinamos como
Además, se encuentra como
Con y calculado, estimamos como :
La siguiente iteración produce
Este proceso se repite hasta la convergencia (es decir, hasta que sea pequeño). La solución después de 25 iteraciones es
Pregunta de ejemplo 2
Supongamos que nos dan el siguiente sistema lineal:
Si elegimos (0, 0, 0, 0) como aproximación inicial, entonces la primera solución aproximada viene dada por
Utilizando las aproximaciones obtenidas, se repite el procedimiento iterativo hasta alcanzar la precisión deseada. Las siguientes son las soluciones aproximadas después de cinco iteraciones.
La solución exacta del sistema es (1, 2, −1, 1) .
Ejemplo de Python
importar numpy como npLÍMITE_ITERACIÓN = 1000# inicializar la matrizA = np . matriz ([[ 10. , - 1. , 2. , 0. ], [ - 1. , 11. , - 1. , 3. ], [ 2. , - 1. , 10. , - 1. ], [ 0.0 , 3. , - 1. , 8. ]])# inicializar el vector RHSb = np . matriz ([ 6. , 25. , - 11. , 15. ])# imprime el sistemaimprimir ( "Sistema:" )para i en rango ( A . forma [ 0 ]): fila = [ f " { A [ i , j ] } *x { j + 1 } " para j en el rango ( A . forma [ 1 ])] imprimir ( f ' { " + " . join ( fila ) } = { b [ i ] } ' )imprimir ()x = np . ceros_similares ( b )para it_count en el rango ( ITERATION_LIMIT ): si it_count != 0 : imprimir ( f "Iteración { it_count } : { x } " ) x_new = np .zeros_like ( x ) para i en rango ( A . forma [ 0 ]): s1 = np . punto ( A [ i , : i ], x [: i ]) s2 = np . punto ( A [ i , i + 1 :], x [ i + 1 :]) x_nuevo [ i ] = ( b [ i ] - s1 - s2 ) / A [ i , i ] si x_nuevo [ i ] == x_nuevo [ i - 1 ]: romper si np .allclose ( x , x_new , atol = 1e-10 , rtol = 0. ) : romper x = x_nuevoimprimir ( "Solución: " )imprimir ( x )error = np . punto ( A , x ) - bimprimir ( "Error:" )imprimir ( error )
Método de Jacobi ponderado
La iteración ponderada de Jacobi utiliza un parámetro para calcular la iteración como
siendo la opción habitual. [1]
A partir de la relación , esto también puede expresarse como
- .
Convergencia en el caso simétrico positivo definido
En el caso de que la matriz del sistema sea de tipo simétrico positivo definido se puede demostrar convergencia.
Sea la matriz de iteración. Entonces, la convergencia está garantizada para
donde es el valor propio máximo.
El radio espectral se puede minimizar para una elección particular de la siguiente manera,
donde es el número de condición de la matriz .
Véase también
Referencias
- ^ Saad, Yousef (2003). Métodos iterativos para sistemas lineales dispersos (2.ª ed.). SIAM . p. 414. ISBN 0898715342.
Enlaces externos
- Este artículo incorpora texto del artículo Jacobi_method en CFD-Wiki que está bajo la licencia GFDL .
- Black, Noel; Moore, Shirley y Weisstein, Eric W. "El método de Jacobi". MathWorld .
- Método Jacobi de www.math-linux.com