Está en la página 1de 13

0.

1 Metodo de Gauss-Seidel
Los meto dos de Gauss y Cholesky hacen parte de los m etodos directos o nitos. Al cabo de un n umero nito de operaciones, en ausencia de errores on del sistema Ax = b. de redondeo, se obtiene x* soluci
El metodo de Gauss-Seidel hace parte de los meto dos llamados indirectos o iterativos. En ellos se comienza con x0 = (x0 1, x02, ..., x0

n), una aproximaci on inicial de la soluci on. A partir de x0 se construye una nueva aproximaci on de la solucion, x1 = (x1 1, x12, ..., x1 n). A partir de x1 se construye x2 (aqui el superindice indica la iteraci on y no indica una potencia). Asi sucesivamente se construye una sucesi on de vectores {xk}, con el objetivo, no siempre garantizado, de que lim xk = x*.
k8

Generalmente los meto dos indirectos son una buena opci on cuando la matriz es muy grande y dispersa o rala (sparse), es decir, cuando el n umero de elementos no nulos es peque no comparado con n2, n umero total de elementos de A. En estos casos se debe utilizar una estructura de datos adecuada que permita almacenar unicamente los elementos no nulos. En cada iteraci on del m etodo de Gauss-Seidel, hay n subiteraciones. En la primera subiteraci on se modi ca unicamente x1. Las dem as co ordenadas x2,
x3, ..., xn no se modi can. El c alculo de x1 se hace de tal manera que se

satisfaga la primera ecuaci on.


x1 1 = b1 - (a12x0 x1 i = x0
2 + a13x0 3 + + a1nx0 a11

n)

i , i = 2, ..., n.

En la segunda subiteraci on se modi ca unicamente x2. Las dem


nadas x1, x3, ..., xn no se modi can. El c

as coorde-

alculo de x2 se hace de tal manera

que se satisfaga la segunda ecuaci on.


x2 2 = b2 - (a21x1 x2 i = x1
1 + a23x1 3 + + a2nx1 a22

n)

i , i = 1, 3, ..., n.

Asi sucesivamente, en la n- esima subiteraci on se mo di ca unicamente xn. Las demas co ordenadas x1, x2, ..., xn-1 no se mo di can. El c alculo de xn se 1

hace de tal manera que se satisfaga la n-


xn n = bn - (an1xn-1 xn i = xn-1
1 + an3xn-1

esima ecuacion.
3 + + annxn-1

n)

ann

i , i = 1, 2, ..., n - 1.

Ejemplo 0.1. Resolver 10 2 -1 0 1 20 -2 3 -2 1 30 0 1 2 3 20


partiendo de x0 = (1, 2, 3, 4).
x1 1 = 26 - (2 2 + (-1) 3 + 0 4) x1 x2 x3 x4

26 -15

53 47

10 = 2.5,

x1 = (2.5, 2, 3, 4).
x2 2 = -15 - (1 2.5 + (-2) 3 + 3 4)

20 = -1.175, = 1.9725,

x2 = (2.5, -1.175, 3, 4).


x3 3 = 53 - (-2 2.5 + 1 (-1.175) + 0 4)

30

x3 = (2.5, -1.175, 1.9725, 4).


x4 4 = 47 - (1 2.5 + 2 (-1.175) + 3 1.9725)

20

= 2.0466,

x4 = (2.5, -1.175, 1.9725, 2.0466).

Una vez que se ha hecho una iteraci on completa (n subiteraciones), se utiliza el ultimo x obtenido como aproximaci on inicial y se vuelve a empezar; se on, luego se calcula calcula x1 de tal manera que se satisfaga la primera ecuaci x2... A continuaci on estan las iteraciones siguientes para el ejemplo anterior. 3.0323 -1.1750 1.9725 2.0466 3.0323 -1.0114 1.9725 2.0466 3.0323 -1.0114 2.0025 2.0466 3.0323 -1.0114 2.0025 1.9991

3.0025 -1.0114 2.0025 1.9991 3.0025 -0.9997 2.0025 1.9991 3.0025 -0.9997 2.0002 1.9991 3.0025 -0.9997 2.0002 1.9998 3.0000 -0.9997 2.0002 1.9998 3.0000 -1.0000 2.0002 1.9998 3.0000 -1.0000 2.0000 1.9998 3.0000 -1.0000 2.0000 2.0000 3.0000 -1.0000 2.0000 2.0000 3.0000 -1.0000 2.0000 2.0000 3.0000 -1.0000 2.0000 2.0000 3.0000 -1.0000 2.0000 2.0000 Te oricamente, el m etodo de Gauss-Seidel puede ser un pro ceso in nito. En la practica el pro ceso se acaba cuando de xk a xk+n los cambios son muy pequenos. Esto quiere decir que el x actual es casi la soluci on x*. Como el meto do no siempre converge, entonces otra detenci on del proceso, no deseada pero posible, est a determinada cuando el n umero de iteraciones realizadas es igual a un n umero maximo de iteraciones previsto. El siguiente ejemplo no es convergente, ni siquiera empezando de una aproximaci on inicial muy cercana a la soluci on. La soluci on exacta es x = (1, 1, 1). Ejemplo 0.2. Resolver -1 2 10 11 -1 2 152
partiendo de x0 = (1.0001, 1.0001, 1.0001).
x1 x2 x3

11 12
8

1.0012 1.0001 1.0001 1.0012 1.0134 1.0001 1.0012 1.0134 0.9660 0.6863 1.0134 0.9660 0.6863 -2.5189 0.9660 0.6863 -2.5189 9.9541 3

83.5031 -2.5189 9.9541 83.5031 926.4428 9.9541 83.5031 926.4428 -2353.8586 Algunos criterios garantizan la convergencia del metodo de Gauss-Seidel. Por ser condiciones su cientes para la convergencia son criterios demasiado fuertes, es decir, la matriz A puede no cumplir estos requisitos y sin embargo el metodo puede ser convergente. En la pr actica, con frecuencia, es muy dispendioso poder aplicar estos criterios. Una matriz cuadrada es de diagonal estrictamente dominante por las si en cada la el valor absoluto del elemento diagonal es mayor que la suma de los valores absolutos de los otros elementos de la la,
n

|aii | >
j=1,j=i

|aij | , i.

Teorema 0.1. Si A es de diagonal estrictamente dominante por las, entonces el metodo de Gauss-Seidel converge para cualquier x0 inicial.

Teorema 0.2. Si A es de nida positiva, entonces el m


converge para cualquier x0 inicial.

etodo de Gauss-Seidel

Te oricamente el m etodo de Gauss-Seidel se deberia detener cuando xk x* < e. Sin embargo la condici on anterior necesita conocer x*, que es pre-

cisamente lo que se est a buscando. Entonces, de manera pr actica el metodo de GS se detiene cuando xk - xk+n < e. Dejando de lado los superindices, las f ormulas del meto do de Gauss-Seidel se
pueden reescribir para facilitar el algoritmo y para mostrar que xk - x* y

xk - xk+n est

an relacionadas.
n

bi xi bi xi
j=1 j=1,j=i

aijxj

aii
n

aijxj + aiixi aii

xi xi + bi - Ai x

aii

Sean
ri = bi - Ai x,
di = ri aii

El valor ri es simplemente el error, residuo o resto que se comete en la i-esima ecuaci on i-esima se on al utilizar el x actual. Si ri = 0, entonces la ecuaci
satisface perfectamente. El valor di es la mo di caci on que sufre xi en una

iteracion.
Sean r = (r1, r2, ..., rn), d = (d1, d2, ..., dn). Entonces xk+n = xk + d. Adem xk es soluci on si y solamente si r = 0, o sea, si y solamente d = 0. Lo

as

anterior justi ca que el meto do de GS se detenga cuando d = e. La norma


d puede ser la norma euclidiana o max |di | o |di|. Si en el criterio de parada del algoritmo se desea enfatizar sobre los errores o residuos, entonces se puede comparar d con e/ (a11, ..., ann) ; por ejemplo,

d=e

max |aii|

El esquema del algoritmo para resolver un sistema de ecuaciones por el meto do de Gauss-Seidel es:
datos: A, b, x0, e, maxit
x = x0

para k = 1, ...,maxit nrmD 0 para i = 1, ..., n


di = (bi - pro dEsc(Ai, x))/aii

xi xi + di

nrmd nrmD+di

n-para i
si nrmD = e ent x* x, salir

n-para k

0.2 Soluci

on por minimos cuadrados

Consideremos ahora un sistema de ecuaciones Ax = b, no necesariamente cuadrado, donde A es una matriz m n cuyas columnas son linealmente independientes. Esto implica que hay m as las que columnas, m = n, y que ademas el rango de A es n. Es muy probable que este sistema no tenga soluci on, es decir, tal vez no existe x que cumpla exactamente las m igualdades. Se desea que Ax = b, Ax - b = 0, Ax - b = 0,
Ax - b 2 = 0, Ax - b 2

2 = 0.

Es Posible que lo deseado no se cumpla, entonces se quiere que el incumplimiento (el error) sea lo m as pequeno posible. Se desea minimizar esa cantidad,
min Ax - b 2 El vector x que minimice Ax- b 2 2.

(1)

2 se llama soluci on por minimos cuadrados. Como se ver a mas adelante, tal x existe y es unico (suponiendo que las columnas de A son linealmente independientes). Con el animo de hacer m as clara la deducci on, supongamos que A es una
matriz 4 3. Sea f (x) = Ax - b 2 2,

f (x) =(a11x1 + a12x2 + a13x3 - b1)2 + (a21x1 + a22x2 + a23x3 - b2)2+ (a31x1 + a32x2 + a33x3 - b3)2 + (a41x1 + a42x2 + a43x3 - b4)2.

0.2.1 Ecuaciones normales


Para obtener el minimo de f se requiere que las tres derivadas parciales,
f / x1, f / x2 y f / x3, sean nulas.

f
x1
=2(a11x1 + a12x2 + a13x3 - b1)a11 + 2(a21x1 + a22x2 + a23x3 - b2)a21

+ 2(a31x1 + a32x2 + a33x3 - b3)a31

+ 2(a41x1 + a42x2 + a43x3 - b4)a41.

Escribiendo de manera matricial, f


x1
=2(A1x - b1)a11 + 2(A2 x - b2)a21 + 2(A3x - b3)a31

+ 2(A4x - b4)a41.

Si B es una matriz y u un vector columna, entonces (Bu)i = Biu.

f
x1
= 2 ((Ax)1 - b1)a11 + ((Ax)2 - b2)a21 + ((Ax)3 - b3)a31

+((Ax)4 - b4a41 ,
4

=2
i=1 4

(Ax - b)i ai1,

=2
i=1

(A1)i(Ax - b)i ,

=24
i=1

(AT 1)i(Ax - b)i,

= 2AT 1(Ax - b),


= 2 AT (Ax - b) 1

De manera semejante f
x2 = 2 AT (Ax - b) 2 ,
= 2 AT (Ax - b) 3

f
x3

Igualando a cero las tres derivadas parciales y quitando el 2 se tiene


AT (Ax - b) 1 = 0, AT (Ax - b) 2 = 0, AT (Ax - b) 3 = 0

Es decir,
AT(Ax - b) = 0, AT A x = AT b .

(2) on (o seu-

Las ecuaciones (2) se llaman ecuaciones normales para la soluci dosolucion) de un sistema de ecuaciones por minimos cuadrados.

no n n. En general, si A es una matriz La matriz AT A es simetrica de tama en es de rango r (ver [Str86]). Como m n de rango r, entonces ATA tambi as a un, AT A se supuso que el rango de A es n, entonces AT A es invertible. M es de nida positiva. Por ser AT A invertible, hay una

unica soluci on de (2), o sea, hay un solo vector x que hace que las derivadas parciales sean nulas. En general, las derivadas parciales nulas son simplemente una condici on necesaria para obtener el minimo de una funcion (tambien lo es para maximos o para puntos de silla), pero en este caso, como ATA es de nida positiva, f es convexa, y entonces anular las derivadas parciales se convierte en condici on necesaria y su ciente para el minimo. En resumen, si las columnas de A son linealmente independientes, entonces la soluci on por minimos cuadrados existe y es unica. Para obtener la soluci on
por minimos cuadrados se resuelven las ecuaciones normales. Como ATA es de nida positiva, (2) se puede resolver por el m

etodo de Cholesky. Si m = n y al hacer la factorizaci on de Cholesky resulta que ATA no es de nida positiva, entonces las columnas de A son linealmente dependientes. Si el sistema Ax = b tiene soluci on exacta, esta coincide con la soluci on por minimos cuadrados. Ejemplo 0.3. Resolver por minimos cuadrados: 210 -1 -2 3 -2 2 1 5 4 -2 Las ecuaciones normales dan: 34 20 -15 20 25 -12 -15 -12 14 8
x1 x2 x3

3.1 8.9
-3.1 0.1

x1 x2 x3

4.0 -20.5 23.4

La solucion por minimos cuadrados es: x = (2.0252, -1.0132, 2.9728) . El error, Ax - b, es: -0.0628 0.0196 -0.0039 .3 0.0275

Ejemplo 0.4. Resolver por minimos cuadrados: 213 -1 -2 0 -2 2 -6 546 Las ecuaciones normales dan: 34 20 48 20 25 15 48 15 81
x1 x2 x3 x1 x2 x3

-3 0

3 9
.

3 -21 27

Al tratar de resolver este sistema de ecuaciones por el m etodo de Cholesky; no se puede obtener la factorizaci on de Cholesky, luego ATA no es de nida positiva, es decir, las columnas de A son linealmente dependientes. Si se aplica el metodo de Gauss, se obtiene que ATA es singular y se concluye que las columnas de A son linealmente dependientes. 3 Ejemplo 0.5. Resolver por minimos cuadrados: 21 -1 -2 -2 2 54 Las ecuaciones normales dan: 34 20 20 25 La solucion por minimos cuadrados es: x = (2, -1) . 9
x1 x2 x1 x2

-6 6

3 0
.

= 48

15

El error, Ax - b, es:

0 0 0. En este caso, el sistema inicial tenia soluci on exacta y la soluci on por minimos 0 cuadrados coincide con ella. 3
La implementaci on e ciente de la soluci on por minimos cuadrados, via ecuaciones normales, debe tener en cuenta algunos detalles. No es necesario construir to da la matriz simetrica ATA (n2 elementos). Basta con almacenar en un arreglo de tama no n(n + 1)/2 la parte triangular superior de AT A. Este almacenamiento puede ser por las, es decir, primero los n elementos de la primera la, enseguida los n - 1 elementos de la segunda la a partir del elemento diagonal, despues los n - 2 de la tercera la a partir del elemento diagonal y asi sucesivamente hasta almacenar un solo elemento de la la n. Si se almacena la parte triangular superior de AT A por columnas, se almacena primero un elemento de la primera columna, enseguida dos elementos de la segunda columna y asi sucesivamente. Cada una de las dos formas tiene sus venta jas y desventa jas. La soluci on por el m etodo de Cholesky debe tener en cuenta este tipo de estructura de almacenamiento de la informaci on. Otros metodos e cientes para resolver sistemas de ecuaciones por minimos cuadrados utilizan matrices ortogonales de Givens o de Householder.

10

function a = interFilas(a, i, j) t = a(i,:) a(i,:) = a(j,:) a(j,:) = t endfunction //---------------------------------------------------------function x = sistTriSup(a, b) // solucion de un sistema triangular superior n = size(a,1) x = zeros(n,1) for i=n:-1:1 x(i) = ( b(i) - a(i,i+1:n)*x(i+1:n) ) / a(i,i) end endfunction //---------------------------------------------------------function [x, y] = interc(x, y)

t=x x=y y=t


endfunction //========================================================== //========================================================== // metodo de Gauss con pivoteo parcial // no muy eficiente a0 = [ 2 4 5 -10; 1 2 3 4; -10 8 5 4; -1 1 2 -2] b = [-14 eps = 1.0e-8; n = size(a0,1) a = [a0 b] for k = 1:n-1 [vmax , pos] = max( abs(a(k:n,k) ) )

40

44

-1]

11

if vmax <= eps printf(\n Matriz singular o casi singular.\n\n) return end m = k-1 + pos if m > k a = interFilas(a, k, m) end for i = k+1:n coef = a(i,k)/a(k,k) a(i,:) = a(i,:) - coef*a(k,:) end end if abs( a(n,n) ) <= eps printf(\n Matriz singular o casi singular.\n\n) return end x = sistTriSup(a(:,1:n), a(:,n+1) ) //========================================================== //========================================================== // metodo de Cholesky // resolver A x = b // A simetrica y definida positiva // // factorizacion de Cholesky A = U U, U triangular superior inevertible // // A x = b // U U x = b // sea y = U x // U y = b // resolver el sistema anterior para obtener y 12

// reoslver for i = 1:n U x = y para obtener x res = b(i) - a(i,:)*x x(i) = x(i) + res/a(i,i) a= end [9 2 3; 2 8 -1; 3 -1 5] end b = [36 24 n = size(a, 1) y = zeros(n,1); x = zeros(n,1); u = chol(a) y(1) = b(1)/u(1,1) for i=2:n y(i) = ( b(i) - u(1:i-1,i)*y(1:i-1) )/u(i,i) end x(n) = y(n)/u(n,n) for i=n-1:-1:1 x(i) = ( y(i) - u(i,i+1:n)*x(i+1:n) )/u(i,i) end

23]

//========================================================== //========================================================== // metodo de Gauss-Seidel a = [ 10 2 -1 0 ; 1 20 -2 3 ; -2 1 30 0 ; 1 2 3 20] b = [26 -15 53 47 ] x0 = n = size(a,1) [0 0 0 0]

x = x0 maxit = 10 for k = 1:maxit 13 14

También podría gustarte