stringtranslate.com

Método Jacobi

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

  1. ^ Saad, Yousef (2003). Métodos iterativos para sistemas lineales dispersos (2.ª ed.). SIAM . p. 414. ISBN 0898715342.

Enlaces externos