Sei sulla pagina 1di 3

Prcticas de Matemticas con

Mathematica .
Matemticas II . Ingeniera Tcnica Industrial Mecnica.
Prctica n 3. Resolucin de sistemas lineales: Mtodo
de Gauss-Seidel.

Veremos en esta prctica la utilizacin del Mathematica para la resolucin de un sistema de ecuaciones
lineales mediante el mtodo de Gauss-Seidel.
Ejemplo 1: Calcule mediante el mtodo de Gauss-Seidel la solucin aproximada del sistema
7x+3y+z=5
x+4y=-3
2x+y-7z=-6
Primero introducimos los datos en el formato del Mathematica

a = 887, 3, 1<, 81, 4, 0<, 82, 1, -7<<; b = 85, -3, -6<;


y consideramos como aproximacin inicial la dada por

x0 = 80, 0, 0<;

Indicamos otros datos necesarios en la ejecucin del programa como el nmero de ecuaciones y la tolerancia
requerida:

n = Length@x0D;
tol = 10^H-4L;
Si en la iteracin n el valor de la solucin es xn, entonces el valor de la siguiente iteracin viene dado por la
frmula:

xn1 = Table@
Hb@@iDD - HSum@a@@i, jDD xn@@jDD, 8j, 1, i - 1<D + Sum@a@@i, jDD
xn@@jDD, 8j, i + 1, n<DLL a@@i, iDD, 8i, 1, n<D
Comenzando con xn=x0, al ejecutar lo anterior resulta la primera aproximacin

Resolucin de sistemas mediante Gauss-Seidel.nb

xn = x0;
xn1 = Table@
Hb@@iDD - HSum@a@@i, jDD xn@@jDD, 8j, 1, i - 1<D + Sum@a@@i, jDD
xn@@jDD, 8j, i + 1, n<DLL a@@i, iDD, 8i, 1, n<D
5
3 6
: ,- , >
7
4 7

Si identificamos el valor obtenido con xn y seguimos iterando con la misma frmula obtendremos las sucesivas aproximaciones proporcionadas por el mtodo de Jacobi. Esto lo podemos incluir en una funcin donde
hay que indicar el valor inicial, la tolerancia y el nmero mximo de iteraciones (por defecto ponemos 100):

metodoGaussSeidel@x0_, tol_, maxiter_: 100D :=


Hn = Length@x0D; xn = xn1 = x0;
Do@xn1@@iDD = Hb@@iDD - HSum@a@@i, jDD xn1@@jDD, 8j, 1, i - 1<D +
Sum@a@@i, jDD xn@@jDD, 8j, i + 1, n<DLL a@@i, iDD,
8i, 1, n<D; cont = 1; While@HMax@Abs@Hxn1 - xnLDD > tolL &&
cont < maxiter, cont++; xn = xn1;
Do@xn1@@iDD = Hb@@iDD - HSum@a@@i, jDD xn1@@jDD, 8j, 1, i - 1<D +
Sum@a@@i, jDD xn@@jDD, 8j, i + 1, n<DLL a@@i, iDD,
8i, 1, n<DD; 8cont, xn1, Max@Abs@a.xn1 - bDD<L

El criterio de paro lo podemos referir al error relativo: Max[Abs[(xn1-xn)/xn1]]>tol


o al error absoluto: Max[Abs[xn1-xn]]>tol, y as, mientras estos errores sean mayores que la tolerancia se
seguir iterando (siempre que el nmero mximo de iteraciones se mantenga menor que maxiter).

Veamos la ejecucin de la funcin anterior para distintos valores de los parmetros. La salida que se obtiene es
el nmero de iteraciones realizado, el valor aproximado y una medida del error cometido obtenida como el
mximo de los valores absolutos al sustituir el valor obtenido en la expresin a.x-b (esto debera ser cero si el
valor obtenido es solucin de la ecuacin):

metodoGaussSeidel@80, 0, 0<, 10^H-4LD


:5, :

134 455

,-

134 456

537 823
537 824

537 823
537 824

>,

13
268 912

Si utilizamos valores reales el formato de salida es con decimales:

>

metodoGaussSeidel@80., 0., 0.<, 10^H-8LD

99, 81., -1., 1.<, 1.25841 10-9=


Si queremos ms precisin se los podemos indicar:

SetPrecision@metodoGaussSeidel@80., 0, 0<, 10^H-16LD, 20D


916.000000000000000000,

80.99999999999999999816, -0.99999999999999999954,
0.99999999999999999954<, 1.1937813151750678949 10-17=

Llegados a este punto podemos comprobar si los valores enteros que parecen ser la solucin en realidad lo son:

a.81, -1, 1< - b


80, 0, 0<

Resolucin de sistemas mediante Gauss-Seidel.nb

Ejemplo 2: Calcule mediante el mtodo de Gauss-Seidel la solucin aproximada del sistema de ecuaciones
x+0.3636 y+0.273 z=0.18182
0.75 x+y+0.125 z=1.25
0.5 x+0.5 y+z=0.25
Como ya tenemos definida la funcin en el problema anterior, slo habr que indicar quienes son la matriz de
coeficientes y el vector de trminos independientes:

a = 881, 0.3636 , 0.273 <, 80.75 , 1, 0.125 <, 80.5 , 0.5 , 1<<;
b = 80.18182, 1.25, 0.25<;
metodoGaussSeidel@80., 0, 0<, 10^H-4LD

89, 8-0.260619, 1.49112, -0.365251<, 0.0000192345<

Si tomamos la solucin inicial ms prxima a la solucin verdadera necesitaremos menos iteraciones:

metodoGaussSeidel@8-0.2, 1.5, -0.3<, 10^H-4LD

86, 8-0.260675, 1.49116, -0.365243<, 0.0000206569<

Podemos cambiar el nmero mximo de iteraciones (si no se pone nada en la tercera variable se toma el valor
por defecto, 100, y si se le indica qu nmero mximo de iteraciones queremos, ese ser el valor mximo que
considere el programa):

metodoGaussSeidel@8-0.2, 1.5, -0.3<, 10^H-12LD

921, 8-0.260646, 1.49114, -0.365247<, 1.9057 10-13=


metodoGaussSeidel@8-0.2, 1.5, -0.3<, 10^H-12L, 15D

915, 8-0.260646, 1.49114, -0.365247<, 3.11861 10-10=

Comparando con el mtodo de Jacobi que vimos en la prctica anterior observamos cmo el pequeo cambio
que aporta el mtodo de Gauss-Seidel se traduce en una notable mejora del mtodo iterativo, mientras para la
misma tolerancia, el mtodo de Gauss-Seidel necesita 21 iteraciones, el mtodo de Jacobi requiere 115
iteraciones.

metodoJacobi@8-0.2, 1.5, -0.3<, 10^H-12L, 200D

9115, 8-0.260646, 1.49114, -0.365247<, 3.28737 10-13=

Potrebbero piacerti anche