Pr‡ctica 5: MŽtodos Iterativos
Los mŽtodos iterativos de los cuales hablaremos en esta pr‡ctica se encargan de resolver sistemas de ecuaciones lineales de la forma
![]()
donde
es una matriz
real
conocida,
un vector
(columna) conocido con
componentes
y
el vector
(columna) que buscamos, con
componentes
. En tŽrminos de cantidades escalares se rescribe:

Si la matriz
es invertible
entonces posee una œnica soluci—n
y no hay m‡s que
decir. Sin embargo, en muchas aplicaciones es preciso resolver sistemas de
forma efectiva. De hecho es una tarea muy usada en
computaci—n. Como consecuencia existir‡n muchos mŽtodos para resolver este tipo
de sistemas como el mŽtodo de Gauss, el de Jacobi, el de Gauss-Seidel,...
Los mŽtodos que vamos a estudiar e implementar en el lenguaje de programaci—n Fortran ser‡n el mŽtodo de Jacobi y el mŽtodo de Gauss-Seidel. Estos mŽtodos producen una secuencia de aproximaciones sucesivas que bajo condiciones especificadas convergen a un vector soluci—n.
MŽtodo de Jacobi
El mŽtodo de Jacobi consistir‡ en calcular las soluciones de modo:

As’, la forma compacta del mŽtodo iterativo de Jacobi ser‡:
![]()
para
.
MŽtodo de Gauss-Seidel
El mŽtodo de Gauss-Seidel consiste en
sustituir el par‡metro
del primer
sumatorio por el par‡metro
en el mŽtodo de
Jacobi. Este par‡metro ser‡ el que estamos calculando actualmente. As’, nos
quedar‡:
![]()
para
.
Este mŽtodo de Gauss-Seidel converger‡ m‡s rapidamente que el mŽtodo de Jacobi a causa del cambio realizado.
En esta pr‡ctica implementaremos los algoritmos necesarios para resolver sistemas lineales mediante los mŽtodos iterativos de Jacobi y de Gauss-Seidel. Como condiciones de parada del bucle introduciremos un m‡ximo de iteraciones (para funciones que son asint—ticas, con las cuales no acabar’amos nunca) y una condici—n de tolerancia para detenerlo cuando la aproximaci—n sea lo buena que deseemos. Esta condici—n ser‡:
tomando como
el valor 0.00005.
Inicialmente consideraremos
.
El problema a aproximar numŽricamente el siguiente sistema de ecuaciones lineales:

del cual conocemos la soluci—n real:
![]()
Introduciendo estos datos en el programa realizado en Fortran hemos obtenido los siguientes resultados:
Con el mŽtodo de Jacobi:
|
|
1.00000002626461 |
|
|
1.99999997725430 |
|
|
-0.999999998701855 |
|
|
0.999999991632631 |
Podemos comprobar que se aproxima mucho a la soluci—n real del problema, produciendo un error de orden elevado, a partir del octavo decimal, es decir, tiene siete cifras decimales exactas, lo cual nos indica que el error tendr‡ un orden 8.
Con el mŽtodo de Gauss-Seidel:
|
|
1.00000000023955 |
|
|
1.99999999979347 |
|
|
-0.999999999988614 |
|
|
0.999999999923973 |
Con el mŽtodo de Gauss-Seidel observamos que nos aproxima mucho m‡s el resultado. As’, tendremos diez cifras decimales exactas, por lo tanto ser‡ un sistema con error de orden 11.