Documentaciónjacobi(A, b, x0, tol, maxiter)
Nombre
jacobi - Resuelve un sistema lineal Ax=b con el metodo iterativo de Jacobi.
Sinopsis
x = gauss.jacobi(A, b, x0, tol, maxiter)
Descripcion
Aplica el metodo iterativo de Jacobi para aproximar la solucion de un sistema lineal.
A diferencia de Gauss-Seidel, cada iteracion usa unicamente los valores de la iteracion anterior.
Formula:
Validaciones y casos borde
- Valida que
Asea cuadrada y no vacia. - Valida que
byx0sean matrices columnan x 1compatibles conA. - Valida que
tolsea mayor que cero. - Valida que
maxitersea entero y mayor que cero. - Valida que la diagonal de
Ano contenga ceros. - Si alguna condicion falla, emite
ERROR(). - Si no converge dentro de
maxiter, retorna el ultimo vector calculado.
Comportamiento
- Recibe
Acomo matrizn x n,bcomo columnan x 1yx0como aproximacion inicial. - Construye
x_newusando solo los valores dexde la iteracion anterior. - Usa la diferencia maxima entre iteraciones como criterio de parada.
- Retorna el ultimo vector calculado.
Funciones API relacionadas
gauss.gauss_seidel()gauss.sor()gauss.gauss_seidel_residuo()
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
| A | MATRIZ | Matriz de coeficientes A de tamaño n x n. |
| b | MATRIZ | Vector columna de términos independientes b, representado como MATRIZ n x 1. |
| x0 | MATRIZ | Aproximación inicial x0, representada como MATRIZ n x 1. |
| tol | NUMERICO | Tolerancia numérica usada como criterio de parada. |
| maxiter | NUMERICO | Cantidad máxima de iteraciones permitidas. |
Valor de retorno
MATRIZ - Matriz columna x_new de tamaño n x 1 con la solución aproximada.
Ejemplo
ejemplo.blox
INCLUIR "matrices.api"
INCLUIR "gauss.api"
FUNCION PRINCIPAL
INICIO
MATRIZ A[3][3], b[3][1], x0[][]
MATRIZ x_jac[][], r_jac[][]
NUMERICO i, nr_jac
// Definimos la matriz A
A = [[ 4, -1, 1],
[-2, 6, 1],
[-1, 1, 7]]
// Definimos la matriz B
b = [[ 7],
[ 9],
[-6]]
IMPRIMIR("\nPROBLEMA:")
IMPRIMIR(" Ax = b\n\n")
IMPRIMIR("\nA = ")
matrices.imprimir(A)
IMPRIMIR("\nb = ")
matrices.imprimir(b)
// x0 inicial
x0 = matrices.carga_cero(3, 1)
// Jacobi
x_jac = gauss.jacobi(A, b, x0, 0.0001, 200)
IMPRIMIR("\nSolución aproximada por Jacobi:\n")
IMPRIMIR("\nx = ")
matrices.imprimir(x_jac)
// Podemos reutilizar las funciones de residuo/norma:
r_jac = gauss.gauss_seidel_residuo(A, x_jac, b)
nr_jac = gauss.gauss_seidel_norma_infinito(r_jac)
IMPRIMIR("\nResiduo Jacobi\n")
IMPRIMIR("\nr = ")
matrices.imprimir(r_jac)
IMPRIMIR("\n||r_jac||_inf = ", nr_jac:4)
FINAL
Restringido: este ejemplo no puede ejecutarse en el Playground web porque la API requerida no está disponible en el sandbox.