-Fundamento Teórico-
- Se organiza el sistema de ecuaciones de manera que cada ecuación tenga una variable despejada. Se seleccionan valores iniciales para las variables.
- Se calcula un nuevo valor para cada variable utilizando las ecuaciones despejadas y los valores anteriores de las otras variables.
- Se compara el nuevo valor de cada variable con el valor anterior. Si la diferencia es menor que un valor predefinido (criterio de convergencia), se considera que la solución ha convergido. En caso contrario, se vuelve al paso 2.
- Cuando se alcanza la convergencia, los valores de las variables son las soluciones del sistema de ecuaciones.
-Algoritmo del Método-
- Se toma cada ecuación del sistema y se despeja la variable correspondiente a la diagonal principal.
- Por ejemplo, si la ecuación es
2x + y - z = 5
, se despejaráx = (5 - y + z) / 2
.
- Se toma cada ecuación del sistema y se despeja la variable correspondiente a la diagonal principal.
- Se asignan valores iniciales a las variables. Estos valores pueden ser cero o cualquier otro valor razonable.
- Se asignan valores iniciales a las variables. Estos valores pueden ser cero o cualquier otro valor razonable.
- Se calcula el valor de cada variable usando las ecuaciones despejadas y los valores de la iteración anterior. Por ejemplo, si en la iteración anterior
y = 2
yz = 3
, entonces se calculax = (5 - 2 + 3) / 2 = 3
. - Se repite este proceso hasta que los valores de las variables se estabilicen o se cumpla un criterio de convergencia.
- Se calcula el valor de cada variable usando las ecuaciones despejadas y los valores de la iteración anterior. Por ejemplo, si en la iteración anterior
- Se define una tolerancia para la diferencia entre los valores de las variables en dos iteraciones consecutivas.
- Si la diferencia es menor que la tolerancia, se considera que el método ha convergido y se detiene la iteración.
- Se define una tolerancia para la diferencia entre los valores de las variables en dos iteraciones consecutivas.
- Los valores de las variables en la última iteración son la solución aproximada del sistema de ecuaciones.
- Los valores de las variables en la última iteración son la solución aproximada del sistema de ecuaciones.
Ejemplo:
Supongamos el sistema de ecuaciones:
- Despejar:
x = (5 - y + z) / 2
y = (10 - x - 2z) / 3
z = (7 - y) / 4
- Aproximación inicial:
x = 0
,y = 0
,z = 0
- Iteración 1:
x = (5 - 0 + 0) / 2 = 2.5
y = (10 - 0 - 2 * 0) / 3 = 10/3
z = (7 - 0) / 4 = 1.75
- Iteración 2:
x = (5 - 10/3 + 1.75) / 2 = 1.458
y = (10 - 1.458 - 2 * 1.75) / 3 = 2.916
z = (7 - 10/3) / 4 = 1.083
- ...
Se repite la iteración hasta que se cumpla el criterio de convergencia, por ejemplo, que la diferencia entre los valores de las variables en dos iteraciones consecutivas sea menor que 0.001.
-Ejercicio Resuelto Paso a Paso-
resolver el siguiente sistema:
✅ Paso 1: Escribir la forma iterativa de Jacobi
Despejamos cada variable en términos de las otras dos:
✅ Paso 2: Elegir una estimación inicial
Sea:
🔁 Iteración 1
Usamos los valores iniciales en las ecuaciones:
🔁 Iteración 2
Ahora usamos :
🔁 Iteración 3
🛑 Criterio de paro
Podemos detenernos cuando las diferencias entre iteraciones consecutivas sean pequeñas, por ejemplo:
En este caso:
Todavía no cumple completamente, así que se puede continuar iterando hasta que se estabilicen todos.
✅ Aproximación tras varias iteraciones:
Después de unas 6 iteraciones, obtendremos algo cercano a:
📌 Nota
El método de Jacobi requiere que la matriz sea diagonalmente dominante (es decir, que el valor absoluto del coeficiente principal de cada fila sea mayor que la suma de los otros valores absolutos de la misma fila). En este caso:
-
Fila 1: ✔️
✔️
-
Fila 2: ✔️
-
Fila 3:
-Código del Método-
import numpy as np
import matplotlib.pyplot as plt
# Coeficientes del sistema
A = np.array([
[10.0, 2.0, 1.0],
[2.0, 20.0, -2.0],
[-2.0, 3.0, 10.0]
])
# Vector de constantes
b = np.array([9.0, -44.0, 22.0])
# Condiciones iniciales
x = np.zeros_like(b)
# Número máximo de iteraciones y tolerancia
max_iter = 25
tolerance = 1e-6
# Guardar las soluciones en cada iteración
history = [x.copy()]
# Método de Jacobi
for iteration in range(max_iter):
x_new = np.zeros_like(x)
for i in range(len(A)):
s = sum(A[i][j] * x[j] for j in range(len(A)) if j != i)
x_new[i] = (b[i] - s) / A[i][i]
history.append(x_new.copy())
# Verificación de convergencia
if np.allclose(x, x_new, atol=tolerance):
print(f"Convergió en {iteration + 1} iteraciones.")
break
x = x_new
# Convertir historial a matriz para graficar
history = np.array(history)
# Mostrar soluciones aproximadas
print("Aproximación final:")
print(f"x = {x[0]:.6f}, y = {x[1]:.6f}, z = {x[2]:.6f}")
# Graficar la convergencia
plt.figure(figsize=(10, 6))
plt.plot(history[:, 0], label='x')
plt.plot(history[:, 1], label='y')
plt.plot(history[:, 2], label='z')
plt.xlabel('Iteración')
plt.ylabel('Valor de la variable')
plt.title('Convergencia del método de Jacobi')
plt.grid(True)
plt.legend()
plt.show()
-Grafica-
-Conclusión-
El método de Jacobi es una técnica iterativa para resolver sistemas de ecuaciones lineales. Puede ser útil en sistemas grandes donde los métodos directos son computacionalmente costosos.
Comentarios
Publicar un comentario