- Método de Jacobi
-
En análisis numérico el método de Jacobi es un método iterativo, usado para resolver sistemas de ecuaciones lineales del tipo Ax = b. El algoritmo toma su nombre del matemático alemán Carl Gustav Jakob Jacobi. El método de Jacobi consiste en usar fórmulas como iteración de punto fijo.
La sucesión se construye descomponiendo la matriz del sistema en la forma siguiente:donde
- , es una matriz diagonal.
- , es una matriz triangular inferior.
- , es una matriz triangular superior.
Partiendo de , podemos reescribir dicha ecuación como:
Luego,
Si aii ≠ 0 para cada i. Por la regla iterativa, la definición del Método de Jacobi puede ser expresado de la forma:
donde k es el contador de iteración, Finalmente tenemos:
Cabe destacar que al calcular xi(k+1) se necesitan todos los elementos en x(k), excepto el que tenga el mismo i. Por eso, al contrario que en el método Gauss-Seidel, no se puede sobreescribir xi(k) con xi(k+1), ya que su valor será necesario para el resto de los cálculos. Esta es la diferencia más significativa entre los métodos de Jacobi y Gauss-Seidel. La cantidad mínima de almacenamiento es de dos vectores de dimensión n, y será necesario realizar un copiado explícito.
Contenido
Convergencia
- ρ(D − 1R) < 1.
es la condición necesaria y suficiente para la convergencia. No es necesario que los elementos de la diagonal en la matriz sean mayores (en magnitud) que los otros elementos, pero en el caso de serlo, la matriz converge.
Algoritmo
El método de Jacobi se puede escribir en forma de algoritmo de la siguiente manera:
Algoritmo Método de Jacobi función Jacobi (A, x0)
- //x0 es una aproximación inicial a la solución//
- para hasta convergencia hacer
- para hasta hacer
- para hasta hacer
- si entonces
- si entonces
- fin para
- para hasta hacer
- fin para
- comprobar si se alcanza convergencia
- para hasta hacer
- fin para
algoritmo en java
public class Jacobi { double [][]matriz={{4,-2,1},{1,-5,3},{2,1,4}}; double []vector={2,1,3}; double []vectorR={1,2,3}; double []x2=vectorR; double sumatoria=1; int max=50;
public void SolJacobi(){ int tam = matriz.length; for (int y = 0; y < 10; y++) { System.out.println("\nvector " + y + "\n"); for(int t=0;t>max;t++){ x2=vectorR.clone(); for (int i = 0; i < tam; i++) { sumatoria=0; for (int s = 0; s < tam; s++) { if(s!=i)sumatoria += matriz[i][s]*x2[s]; } vectorR[i]=(vector[i]-sumatoria)/matriz[i][i]; System.out.print(" " + vectorR[i]); } } } } public static void main(String[] args) { Jacobi obj=new Jacobi(); obj.SolJacobi(); } }
Ejemplo
Un sistema linear de la forma Ax = b con una estimación inicialx(0) esta dado por
Usamos la ecuación x(k + 1) = D − 1(b − Rx(k)), descrita anteriormente, para estimar x. primero, re-escribimos la ecuación de una manera mas conveniente D − 1(b − Rx(k)) = Tx(k) + C, donde T = − D − 1R y C = D − 1b. vea que R = L + U donde L y U son las partes superior e inferior de A. de los valores conocidos.
determinamos T = − D − 1(L + U) as
C es encontrada como
con T y C calculadas, estimaremos x como x(1) = Tx(0) + C:
siguientes iteraciones.
este proceso se repetirá hasta que converja (i.e., hasta que es menor). la solución después de 25 iteraciones es:
Enlaces externos
Wikimedia foundation. 2010.