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 diagonal y se sustituye por un valor aproximado. El proceso se itera hasta que converge. Este algoritmo es una versión simplificada del método de transformación de Jacobi para la diagonalización de matrices . El método recibe su nombre de Carl Gustav Jacob Jacobi .
Descripción
DejarSea un sistema cuadrado de n ecuaciones lineales, donde:
Cuandoyson conocidos ySi se desconoce, podemos usar el método de Jacobi para aproximarlo.. El vectordenota nuestra suposición inicial para(a menudopara). Denotamoscomo la k- ésima aproximación o iteración de, yes la siguiente (o k +1) iteración de.
Fórmula basada en matrices
Entonces 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 de forma iterativa mediante
Fórmula basada en elementos
La fórmula basada en elementos para cada filaes así:El cálculo derequiere cada elemento enexcepto ella misma. A diferencia del método de Gauss-Seidel , no podemos sobrescribircon, ya que ese valor será necesario para el resto del cálculo. La cantidad mínima de almacenamiento son dos vectores de tamaño n .
Algoritmo
Entrada: estimación inicial x (0) de la solución , matriz A (diagonal dominante) , vector del lado derecho b , criterio de convergencia. Salida: solución cuando se alcanza la convergencia. Comentarios: pseudocódigo basado en la fórmula basada en elementos anterior. k = 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 demás términos:
El método de Jacobi a veces converge incluso si no se cumplen estas condiciones.
Tenga en cuenta que el método de Jacobi no converge para todas las matrices simétricas definidas positivas . Por ejemplo,
Ejemplos
Ejemplo de pregunta
Un sistema lineal de la formacon estimación iniciales dado por
Usamos la ecuación, descrito anteriormente, para estimarPrimero, reescribimos la ecuación en una forma más conveniente., dóndeyA partir de los valores conocidos determinamoscomo Más,se encuentra como ConyCalculado, estimamoscomo: La siguiente iteración produce Este proceso se repite hasta la convergencia (es decir, hastaes pequeño). La solución después de 25 iteraciones es
Ejemplo de pregunta 2
Supongamos que se nos da 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. A continuación se muestran las soluciones aproximadas tras cinco iteraciones.
La solución exacta del sistema es (1, 2, − 1, 1) .
Ejemplo de Python
import numpy as npLÍMITE_DE_ITERACIÓN = 1000# inicializar la matrizA = np . array ([[ 10. , - 1. , 2. , 0. ],[ - 1. , 11. , - 1. , 3. ],[ 2. , - 1. , 10. , - 1. ],[ 0.0 , 3. , - 1. , 8. ]])# Inicializar el vector RHSb = np.array ([ 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 rango ( A . forma [ 1 ])]print ( f ' { " + " . join ( fila ) } = { b [ i ] } ' )imprimir ()x = np.zeros_like ( b )para it_count en range ( ITERATION_LIMIT ):Si it_count es distinto de 0 :print ( f "Iteración { it_count } : { x } " )x_nuevo = np.zeros_like ( x )para i en rango ( A . forma [ 0 ]):s1 = np.dot ( 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_new [ i ] == x_new [ i - 1 ]:romperif np . allclose ( x , x_new , atol = 1e-10 , rtol = 0. ):romperx = x_nuevoimprimir ( "Solución: " )imprimir ( x )error = np.punto ( A , x ) - bimprimir ( "Error:" )imprimir ( error )Método de Jacobi ponderado
La iteración de Jacobi ponderada utiliza un parámetropara calcular la iteración como
consiendo la opción habitual. [ 1 ] De la relación, esto también puede expresarse como
dóndees el residuo algebraico en la iteración.
Convergencia en el caso simétrico definido positivo
Si la matriz del sistemaSi es simétrica definida positiva , se puede demostrar la convergencia.
Dejarsea la matriz de iteración. Entonces, la convergencia está garantizada para
dóndees el valor propio máximo.
El radio espectral se puede minimizar para una elección particular decomo sigue dóndees el número de condición de la matriz .
Véase también
Referencias
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. "Método Jacobi" . MathWorld .
- Método Jacobi de www.math-linux.com
- Álgebra lineal numérica
- Relajación (métodos iterativos)