Subido por Giovanni Quiroz

Semana 2 - RGSeidel

Anuncio
Método de relajación de Gauss-Seidel (RGS)
A fin de lograr una convergencia más rápida a la proporcionada en el método
implementado por Jacobi, se realizan cambios en el algoritmo.
Sabemos que se definió a la matriz A como: A = L + R + D, llegando a la siguiente
ecuación:
DXK+1 = B + (D – A) XK
Esta vez haremos el siguiente cambio:
A=G+R ⇒ G–A=-R
L+D=G ⇒
(3.24)
Reemplazando en la ecuación (3.20), se obtiene:
(G + R )(X K +1 − X K ) = B − (G + R )X K
(3.25)
Desarrollando:
GX K +1 − GX K + RX K +1 − RX K = B − GX K − RX K
Eliminando términos:
GX K +1 = B − RX K +1
Ajustando el lado derecho para el proceso iterativo, se llega a la formula recursiva:
GX K +1 = B − RX K
(3.26)
Desarrollando (3.26) en forma matricial, se tiene:
  a11
 0

 


  a 21

  a 22




.
+ a a
  31 32


.
  a 41 a 42







a nn   a n1 a n 2 a nn −1 0 









 x1( k +1)   b1  0 a12 a13 a1n 
  


 x (2k +1)   b1   .
. 
  

. 
   =    −  .

     
.
. 
 ( k +1)    
 x n   bn  
0 a n −1 n 


 x1( k ) 
 (k) 
x 2 
 


 
 (k) 
 x n 
Desarrollando en forma explícita tenemos:
K +1
ii i
a x
Dónde:
N
+ ∑ ai j x
j <i
K +1
j
N
= bi − ∑ ai j x Kj
j >i
(3.27)
i = 1, 2, 3,......., N
K, es el orden de aproximación y N el orden del sistema de ecuaciones.
Ejemplo:
Usando el método de Relajación de Gauss-Seidel, resolver el siguiente
sistema:
3x + y = 3
2x + 4 y = 2
Utilizaremos una tolerancia de 0.06 y el siguiente vector de aproximación:
 x10 = 1.2 

X = 0
 x = 0.2 
 2

0
Escribiendo en forma matricial:
 3 1  x   3 

  =  
 2 4  y   2 
x = x1, y = x2 y N = 2
Dónde:
Para obtener la primera aproximación (K = 1), usaremos la ecuación (3.27) con K = 0 y
N = 2, haciendo variar i desde 1 hasta N.
i=1
2
2
j <1
j >1
a 11 x 11 + ∑ a 1j x 1j = b1 − ∑ a 1j x 0j
a 11 x + 0 = b1 − a 12 x
1
1
b1 − a 12 x 02 3 − 1(0.2 )
⇒ x =
=
= 0.933
a 11
3
0
2
1
1
i=2
2
2
j <2
j >2
a 22 x 12 + ∑ a 2j x 1j = b 2 − ∑ a 2j x 0j
a 22 x 12 + a 21 x 11 = b 2 − 0 ⇒ x 12 =
b 2 − a 21 x 11 2 − 2(0.933)
=
= 0.034
a 22
4
El vector solución en primera aproximación es:
 0.933 

X1 = 
 0.034 
Evaluamos ahora la convergencia, calculando si se cumple ó no la condición de
convergencia (evaluación de la diferencia).
X K +1 − X K ≤ tolerancia (TOL)
Operando:
 0.933   1.2   0.267 

 −   = 

 0.034   0.2   0.166 
Dado que aún no se ha logrado cumplir la condición para detener las iteraciones, se
continúa el proceso para una segunda aproximación (K = 2). Ahora para K = 1y N = 2
i=1
2
2
j <1
j >1
a11 x12 + ∑ a1 j x 2j = b1 − ∑ a1 j x1j
a11 x12 + 0 = b1 − a12 x12
⇒
x12 =
b1 − a12 x12 3 − 1(0.034)
=
= 0.989
a11
3
i=2
2
2
j <2
j >2
a 22 x22 + ∑ a 2 j x 2j = b2 − ∑ a 2 j x1j
a 22 x + a x = b2 − 0 ⇒
2
2
2
21 1
b2 − a 21 x12 2 − 2 (0.989)
x =
=
= 0.006
a 22
4
2
2
El vector solución en segunda aproximación es:
 0.989 

X 2 = 
 0.006 
Evaluamos la condición de convergencia, con la tolerancia indicada (0.06)
 0.989   0.933   0.056 

 − 
 = 

 0.006   0.034   0.028 
Se observa que cumple la condición y por lo tanto se detienen las iteraciones, la
solución aproximada del sistema es:
y = 0.006 y x = 0.989
Los resultados computacionales con el programa en Fortran son:
SOLUCION DE SISTEMAS LINEALES GAUSS-SEIDEL
==========================================
INGRESO DE DATOS
=============================================
INGRESE LA DIMENSION DE LA MATRIZ
2
INGRESE LA TOLERANCIA
0.06
INGRESE MATRIZ DE COEFICIENTES A
3 1
2 4
INGRESE ELEMENTOS DE B
3
2
INGRESE ELEMENTOS DE VECTOR APROXIMADO
1.2
0.2
=============================================
RESULTADOS EN TODOS LOS ORDENES
===============================
X: 1 1.2000 0.9333 0.9889
X: 2 0.2000 0.0333 0.0056
===============================
TOLERANCIA: 0.060000 NUM ITERACIONES:
2
Codificación
La codificación que genera los resultados mostrados del ejemplo anterior es la
siguiente:
PROGRAM RELAJACION_GAUSS_SEIDEL
REAL(4) A(100,100),B(100),XP(100,100)
5
10
WRITE
WRITE
WRITE
WRITE
WRITE
(*,*)''
(*,*)'
(*,*)'
(*,*)''
(*,*)'
SOLUCION DE SISTEMAS LINEALES GAUSS-SEIDEL'
=========================================='
INGRESO DE DATOS'
WRITE (*,*)'
============================================='
WRITE (*,*)'
INGRESE LA DIMENSION DE LA MATRIZ '
READ (*,*)M
WRITE (*,*)'
INGRESE LA TOLERANCIA'
READ(*,*)TOL
K2=0
WRITE (*,*)'
INGRESE MATRIZ DE COEFICIENTES A'
DO I=1,M
READ (*,*)(A(I,J),J=1,M)
END DO
WRITE (*,*)'
INGRESE ELEMENTOS DE B'
DO I=1,M
READ(*,*)B(I)
END DO
WRITE(*,*)''
WRITE (*,*)'
INGRESE ELEMENTOS DE VECTOR APROXIMADO'
K2=1
DO I=1,M
READ(*,*)XP(K2,I)
END DO
WRITE (*,*)'
============================================='
WRITE (*,*)''
DO I=1,M
SUMA1=0
SUMA2=0
DO J=1,M
IF (J.LT.I) THEN
SUMA1=SUMA1+A(I,J)*XP(K2+1,J)
END IF
IF (J.GT.I) THEN
SUMA2=SUMA2+A(I,J)*XP(K2,J)
END IF
XP(K2+1,I)=(B(I)-SUMA1-SUMA2)/A(I,I)
END DO
END DO
DO I=1,M
ER=ABS(XP(K2,I)-XP(K2+1,I))
IF (ER.GT.TOL)THEN
K2=K2+1
GOTO 10
ELSE
END IF
END DO
WRITE(*,*)' RESULTADOS EN TODOS LOS ORDENES'
WRITE(*,*)' ==============================='
DO J=1,M
WRITE(*,25)J,(XP(MM,J),MM=1,K2+1)
END DO
WRITE(*,*)' ==============================='
WRITE(*,23)TOL,K2
FORMAT ('
TOLERANCIA:',F9.6,1X,'NUM ITERACIONES:',I3)
FORMAT ('
X:',I3,8(1x,F8.4))
END
20
23
25
Observaciones:
•
•
•
•
El método de relajación de Jacobi y el método RGS convergen solo para
matrices cuya diagonal es dominante.
Es necesario calcular la tasa de convergencia para cada sistema evaluado.
Para calcular la solución en primer orden (iniciando con K = 0), el programa
necesita de una solución aproximada, esto determinara el número de
iteraciones requeridas.
Para detener el proceso iterativo debe compararse la diferencia en valor
absoluto de cada uno de los componentes de los vectores aproximados con
cierta tolerancia.
Descargar