Está en la página 1de 11

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERIA CIVIL


ESCUELA PROFESIONAL DE INGENIERIA
SANITARIA

CURSO: MÉTODOS NUMÉRICOS Y


PROGRAMACION
TEMA: MÉTODO DE JACOBI
ALUMNOS:
 JAIME CÁCERES CAHUA
 JAMES SEGALES SAICO

DOCENTE: DR. BIDER CALAPUJA

AREQUIPA-2016
Método de Jacobi

Marco Teórico
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

 a11 a12 a13 ... a1n   x1  b1 


a x  b 
 21 a22 a23 ... a2 n   2  2
A   a31 a32 a33 ... a3n  X   x3  B  b3 
     
     
 am1 ... amn  x  b 
am 2 am3  n  m

El algoritmo toma su nombre del matemático alemán Carl Gustav Jakob. El


método consiste en usar fórmulas como iteración de punto fijo.

La base del método consiste en construir una sucesión convergente definida


iterativamente. El límite de esta sucesión es precisamente la solución del
sistema. A efectos prácticos si el algoritmo se detiene después de un número
finito de pasos se llega a una aproximación al valor de x de la solución del
sistema.

En la iteración de Jacobi, se escoge una matriz Q que es diagonal y cuyos


elementos diagonales son los mismos que los de la matriz A. La matriz Q toma
la forma:

 a11 0 0 ... 0 
0 a22 0 ... 0 

Q0 0 a33 ... 0 
 
 
 0 0 0 ... ann 

y la ecuación general se puede escribir como

Qx ( k )  (Q  A) x ( k 1)  b
Si denominamos R a la matriz A-Q:

0 a12 a13 ... a1n 


a 0 a23 ... a2 n 
 21
R   a31 a32 0 ... a3n 
 
 
 an1 an 2 an3 ... 0 

la ecuación se puede reescribir como:

Qx ( k )   Rx ( k 1)  b

El producto de la matriz Q por el vector columna x(k) será un vector columna.


De modo análogo, el producto de la matriz R por el vector columna x(k-1)será
también un vector columna. La expresión anterior, que es una ecuación
vectorial, se puede expresar por n ecuaciones escalares (una para cada
componente del vector). De este modo, podemos escribir, para un elemento i
cualquiera y teniendo en cuenta que se trata de un producto matriz-vector:
n n

 qij x j (k )   rij x j (k 1)  bi


j 1 j 1

Si tenemos en cuenta que en la matriz Q todos los elementos fuera de la


diagonal son cero, en el primer miembro el único término no nulo del sumatorio
es el que contiene el elemento diagonal qii, que es precisamente aii. Más aún,
los elementos de la diagonal de Rson cero, por lo que podemos eliminar el
término i=j en el sumatorio del segundo miembro. De acuerdo con lo dicho, la
expresión anterior se puede reescribir como:

n
aii xi (k )
 
j 1, j i
aijx ( k 1) b
j i

de donde despejando xi(k) obtenemos:


n
xi  (b i 
(k )
a
j 1, j i
ijx j ( k 1)
) / aii

que es la expresión que nos proporciona las nuevas componentes del


vector x(k) en función de vector anterior x(k-1) en la iteración de Jacobi. A
continuacion se presenta un algoritmo para el método de Jacobi.
input n, (aij ), (bi ), ( xi ), M

for k  1, 2,...., Mdo

for

i  1, 2,...., ndo
ui  (bi   j  1, j  aij xj ) / aii
n

end
for i  1, 2,...., ndo

xi  ui

end
end
output k , ( x j )

El método de Jacobi se basa en escribir el sistema de ecuaciones en la forma:

 x1  (b1  a21 x2  a31 x3... an1 xn ) / a11 


 x  (b  a x  a x a x ) / a 
 2 2 12 1 32 3... n 2 n 22 

. 
 
. 
. 
 
 xn  (bn  a1n x1  a2 n x2... ) / ann 

Partimos de una aproximación inicial para las soluciones al sistema de


ecuaciones y sustituimos estos valores en la ecuación. De esta forma, se
genera una nueva aproximación a la solución del sistema, que en determinadas
condiciones, es mejor que la aproximación inicial. Esta nueva aproximación se
puede sustituir de nuevo en la parte derecha de la ecuación y así
sucesivamente hasta obtener la convergencia.
Programa para resolver sistemas lineales utilizando el método de Jacobi
function jacovi = jacovi(A,b,val_inicial,max_error,max_iter)
try
iter = 0;
xk = val_inicial;
D = diag(diag(A));
L = (tril(A) - diag(diag(A))).*(-1);
U = (triu(A) - diag(diag(A))).*(-1);
while(1)
final = (inv(D)*b) + ((inv(D)*(L+U))*xk);
iter=iter+1;
fprintf('Iteracion: %d \n',iter)
disp('Valores X k+1')
disp(final)
error = abs((final-xk)./xk)
if ( (max_iter~=-1 & max_error==-1)| (max_iter<=-1 & max_error~=-1))
if(max_iter~=-1 & max_error==-1)
if(iter>=max_iter) break;
else xk = final;
end
end
if(max_iter<=-1 & max_error~=-1)
[x y] = size(error);
validacion = [];
for i=1:x
if(error(i,1)<=max_error)
validacion = [validacion ; 1];
else validacion = [validacion ; 0];
end
end
if(validacion == ones(x,y)) break;
else xk = final;
end
end
else
disp('Debe especificar solo error o solo iteraciones')
break;
end
end
catch
warning('Error en ingreso de las matrices');
end
end
Pseudocódigo:
Iniciar A , b  , num _ ite, aprox _ ini
Xk  aprox _ ini;
Iteración  0;
D  diagonal  A 
L  triangular inferior  A  *  1
U  triangular superior  A  *  1
PARA  verdadero  :
Xk  1  D 1 * b  D 1  L  U  Xk
error   xk  1  xk  / xk
Iteración  iteración  1
Mostrar resultado
Si  se cumplió las iteraciones  :, Fin;
Si  se llegó al error máximo  : Fin;
Sino : Xk  Xk  1
FIN PARA
FIN
Seudocódigo

Inicio

Iniciar _ A, b
num _ ite, aprox _ ini

Xk  aprox _ ini

Iteracion  0

D  Diagonal ( A)
L  Triangular inf erior ( A) * 1
U  Triangular sup erior ( A) * 1

Xk  1  D1 * b  D1 ( L  U ) Xk

Si No No Se _ llego Si Mostrar
Mostrar Se_ cumplio _ las
error
iteraciones
resultado max imo resultado

Xk  Xk  1

FIN
APLICACIÓN 1
Resolver el sistema

4 x1  x2  6

 x1  4 x2  x3  6

 x2  4 x3  2

Despejando x1 de la primera ecuación , x2 de la segunda y x3 de la tercera , se


tiene :

x1  0.50  0.25 x2

x2  1.50  0.25x1  0.25x3

x3  0.50  0.25x2

O sea,

x1( k 1)  0.50  0.25 x2( k )

x2( k 1)  1.50  0.25 x1( k )  0.25 x3( k )

x3( k 1)  0.50  0.25 x2( k )

0
Considérese como aproximación inicial al vector : x (0)
 0 , esto es :
0

x1(0)  0 ; x2(0)  0 ; x3(0)  0

Este primer valor de solución puede tener cualquier valor , y entre mas cercano
o sea el salor supuesto con respecto al valor final , la convergencia será mas
rápida.

En general no se conocen los signos de los resultados y por esta razón se


escoge el vector inicial supuesto igual a cero . sustituyendo en el sistema (3)
,haciendo k  0 , se obtiene :
x1(1)  0.50  0.25(0)  0.50

0.50 
x2 (1)
 1.50  0.25(0)  0.25(0)  1.50 . ; x  1.50 
(1)
 
0.50 

x3(1)  0.50  0.25(0)  0.50

Siguiendo en igual forma las iteraciones , resulta :

x1(2)  0.50  0.25(1.50)  0.875

0.875
x2 (2)
 1.50  0.25(0.50)  0.25(0.50)  1.750 ; x (2)
 1.750 
0.875

x3(2)  0.50  0.25(1.50)  0.875

Siguiendo de igual forma las iteraciones , resulta :

 0.938   0.985   0.995 


     
x (3)
  1.940  ; x (4)
  1.970  : x   1.990  ;
(5)

 0.938   0.985   0.995 


     

 0.998 
 
x (6)
  2.000  ;
 0.998 
 

 1.000 
 
x (7)
  2.000  ,
 1.000 
 

 1.000 
 
x(8)   2.000  .
 1.000 
 

Y la solución del sistema es :

x1  1 ; x2  2 ; x3  1
APLICACIÓN 2

Utiliza el método de Jacobi, para resolver el siguiente sistema, con x0  0 y


tolerancia=10-3, usando como criterio de parada el error absoluto.

10 x1  x2  2 x3  6

x1  10 x2  x3  3x4  25

2 x1  x2  8x3  x4  11

3x2  x3  5x4  11

Solución

Utilizando el algoritmo de Jacobi , vamos obteniendo los siguientes valores


para el vector x ( i ) 13 iteraciones

 10 1 2 0 6 0
 
1 10 1 3 25 0
A B
 2 1 8 1 11 init  0
  11
 0 3 1 5 0

Empezamos con las iteraciones

 0.6000   0.0663 
   
 2.5000   3.5663 
x (1)   1.3750  ; x (3)   1.4828  ;
   
 2.2000   4.2150 
   
   

 0.0750   0.0532 
   
 2.9625   3.6096 
x (2)   1.1875  ; x (4)   1.4395  ;
   
 3.9750   4.6363 
   
   
 0.0489   0.0829 
   
 3.7523   3.7874 
x (5)   1.5166  ; x (10)   1.5180  ;
   
 4.6537   4.7775 
   
   

 0.0786   0.0823 
   
 3.7493   3.7897 
x (6)   1.4999  ; x (11)   1.5195  ;
   
 4.7547   4.7760 
   
   

 0.0749   0.0829 
   
 3.7843   3.7891 
x (7)   1.5203  ; x (12)   1.5189  ;
   
 4.7496   4.7777 
   
   

 0.0825   0.0827 
   
 3.7803   3.7897 
x (8)   1.5144  ; x (13)   1.5193 
   
 4.7746   4.7772 
   
   

 0.0809 
 
 3.7892 
x (9)   1.5199  ;
 
 4.7711 
 
 

También podría gustarte