Método iterativo utilizado para resolver un sistema lineal de ecuaciones
En álgebra lineal numérica, el Método Jacobi (a.k.a. the Método de iteración Jacobi) es un algoritmo iterativo para determinar las soluciones de un sistema estrictamente diagonal dominante de ecuaciones lineales. Cada elemento diagonal se resuelve, y un valor aproximado está conectado. El proceso es entonces iterado hasta que converge. Este algoritmo es una versión desmontada del método de transformación Jacobi de la diagonalización matriz. El método es nombrado por Carl Gustav Jacob Jacobi.
Descripción
Vamos.
ser un sistema cuadrado n ecuaciones lineales, donde:
Cuando
y
son conocidos, y
es desconocido, podemos utilizar el método Jacobi para aproximarse
. El vector
denota nuestra suposición inicial para
(a menudo
para
). We denote
como k-t aproximación o iteración de
, y
es el siguiente (o k+1) iteración de
.
Fórmula basada en la matriz
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 por vía iterativa

Fórmula basada en elementos
La fórmula basada en elementos para cada fila
es así:
La computación de
requiere cada elemento en
excepto ella misma. A diferencia del método Gauss–Seidel, no podemos sobreescribir
con
, ya que ese valor será necesario por el resto de la computación. La cantidad mínima de almacenamiento es dos vectores de tamaño n.
Algoritmo
Entrada: inicial x(0) a la solución, matriz (diagonal dominante) A, vector de lado derecho b, criterio de convergencia
Producto: solución cuando se alcanza la convergenciaComentarios: pseudocódigo basado en la fórmula basada en elementos arriba
k = 0mientras convergencia no alcanzada do para i:= 1 paso hasta n do σ = 0 para j:= 1 paso hasta n do si j ل i entonces σ = σ + aij xj()k) final final xi()k+1) =bi − σ) aii finalaumento kfinal
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 estricta o irreductiblemente diagonalmente dominante. La dominancia diagonal de fila estricta significa que para cada fila, el valor absoluto del término diagonal es mayor que la suma de los valores absolutos de otros términos:

El método de Jacobi a veces converge incluso si estas condiciones no se cumplen.
Tenga en cuenta que el método Jacobi no converge para cada matriz simétrica positiva-definida. Por ejemplo,

Ejemplos
Pregunta de ejemplo
Sistema lineal de la forma
con estimación inicial
es dado por

Usamos la ecuación
, descrita anteriormente, para estimar
. Primero, reescribimos la ecuación en una forma más conveniente
, donde
y
. De los valores conocidos
determinamos
como
Además,
se encuentra como
Con
y
calculada, estimamos
como
:
El próximo rendimiento de la iteración
Este proceso se repite hasta la convergencia (es decir, hasta
es pequeño). La solución después de 25 iteraciones es

Ejemplo de pregunta 2
Supongamos que tenemos el siguiente sistema lineal:

Si elegimos (0, 0, 0, 0) como la aproximación inicial, entonces la primera solución aproximada es dada por
Utilizando las aproximaciones obtenidas, el procedimiento iterativo se repite hasta que se haya alcanzado la precisión deseada. Las siguientes son las soluciones aproximadas después de cinco iteraciones.
 |  |  |  |
---|
0.6
| 2.27272
| -1.1
| 1.875
|
1.04727
| 1.7159
| -0.80522
| 0.88522
|
0,9263
| 2.05330
| -1.0493
| 1.13088
|
1.01519
| 1.95369
| -0.9681
| 0.97384
|
0.98899
| 2.0114
| -1.0102
| 1.02135
|
La solución exacta del sistema es (1, 2, −1, 1).
Ejemplo de Python
importación numposo como npITERATION_LIMIT = 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([2]6., 25., -11., 15.])# prints the systemimpresión()"System:")para i dentro rango()A.forma[0]] fila = [f"{}A[i, j]}*x{}j + 1}" para j dentro rango()A.forma[1]] impresión()f'{}" + ".Únase()fila)} = {}b[i]}')impresión()x = np.ceros()b)para it_count dentro rango()ITERATION_LIMIT): si it_count ! 0: impresión()f"Iteración {}it_count}: {}x}") x_new = np.ceros()x) para i dentro rango()A.forma[0]] s1 = np.#()A[i, :i] x[:i]) s2 = np.#()A[i, i + 1:] x[i + 1:) x_new[i] = ()b[i] - s1 - s2) / A[i, i] si x_new[i] == x_new[i-1]: descanso si np.allclose()x, x_new, atol=1e-10, rtol=0.): descanso x = x_newimpresión()"Solución: ")impresión()x)error = np.#()A, x) - bimpresión()"Error:")impresión()error)
Método de Jacobi ponderado
La iteración jacobi ponderada utiliza un parámetro
para calcular la iteración como

con
ser la opción habitual.
De la relación
, esto también puede expresarse
.
Convergencia en el caso definido positivo simétrico
En caso de que la matriz del sistema
es de tipo simétrico positivo-definido uno puede mostrar convergencia.
Vamos.
ser la matriz de iteración.
Entonces, la convergencia está garantizada para

Donde
es el valor máximo.
El radio espectral se puede minimizar para una elección particular
como sigue:
Donde
es el número de la condición de matriz.
Más resultados...