Método jacobi

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

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...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save