Metodo gauss seidel

14

Click here to load reader

Transcript of Metodo gauss seidel

Page 1: Metodo gauss seidel

0.1 Metodo de Gauss-Seidel

Los metodos de Gauss y Cholesky hacen parte de los metodos directos ofinitos. Al cabo de un numero finito de operaciones, en ausencia de erroresde redondeo, se obtiene x∗ solucion del sistema Ax = b.

El metodo de Gauss-Seidel hace parte de los metodos llamados indirectos oiterativos. En ellos se comienza con x0 = (x0

1, x02, ..., x

0n), una aproximacion

inicial de la solucion. A partir de x0 se construye una nueva aproximacion dela solucion, x1 = (x1

1, x12, ..., x

1n). A partir de x1 se construye x2 (aquı el su-

perındice indica la iteracion y no indica una potencia). Ası sucesivamente seconstruye una sucesion de vectores {xk}, con el objetivo, no siempre garan-tizado, de que

limk→∞

xk = x∗.

Generalmente los metodos indirectos son una buena opcion cuando la matrizes muy grande y dispersa o rala (sparse), es decir, cuando el numero deelementos no nulos es pequeno comparado con n2, numero total de elementosde A. En estos casos se debe utilizar una estructura de datos adecuada quepermita almacenar unicamente los elementos no nulos.

En cada iteracion del metodo de Gauss-Seidel, hay n subiteraciones. En laprimera subiteracion se modifica unicamente x1. Las demas coordenadas x2,x3, ..., xn no se modifican. El calculo de x1 se hace de tal manera que sesatisfaga la primera ecuacion.

x11 =

b1 − (a12x02 + a13x

03 + · · ·+ a1nx

0n)

a11,

x1i = x0

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

En la segunda subiteracion se modifica unicamente x2. Las demas coorde-nadas x1, x3, ..., xn no se modifican. El calculo de x2 se hace de tal maneraque se satisfaga la segunda ecuacion.

x22 =

b2 − (a21x11 + a23x

13 + · · ·+ a2nx

1n)

a22

,

x2i = x1

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

Ası sucesivamente, en la n-esima subiteracion se modifica unicamente xn.Las demas coordenadas x1, x2, ..., xn−1 no se modifican. El calculo de xn se

1

Page 2: Metodo gauss seidel

hace de tal manera que se satisfaga la n-esima ecuacion.

xnn =bn − (an1x

n−11 + an3x

n−13 + · · ·+ annx

n−1n )

ann,

xni = xn−1i , i = 1, 2, ..., n− 1.

Ejemplo 0.1. Resolver

10 2 −1 01 20 −2 3−2 1 30 0

1 2 3 20

x1

x2

x3

x4

=

26−15

5347

partiendo de x0 = (1, 2, 3, 4).

x11 =

26− (2× 2 + (−1)× 3 + 0× 4)

10= 2.5,

x1 = (2.5, 2, 3, 4).

x22 =−15− (1× 2.5 + (−2)× 3 + 3× 4)

20= −1.175,

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

x33 =

53− (−2× 2.5 + 1× (−1.175) + 0× 4)

30= 1.9725,

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

x44 =

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 iteracion completa (n subiteraciones), se utilizael ultimo x obtenido como aproximacion inicial y se vuelve a empezar; secalcula x1 de tal manera que se satisfaga la primera ecuacion, luego se calculax2... A continuacion estan las iteraciones siguientes para el ejemplo anterior.

3.0323 −1.1750 1.9725 2.04663.0323 −1.0114 1.9725 2.04663.0323 −1.0114 2.0025 2.04663.0323 −1.0114 2.0025 1.9991

2

Page 3: Metodo gauss seidel

3.0025 −1.0114 2.0025 1.99913.0025 −0.9997 2.0025 1.99913.0025 −0.9997 2.0002 1.99913.0025 −0.9997 2.0002 1.9998

3.0000 −0.9997 2.0002 1.99983.0000 −1.0000 2.0002 1.99983.0000 −1.0000 2.0000 1.99983.0000 −1.0000 2.0000 2.0000

3.0000 −1.0000 2.0000 2.00003.0000 −1.0000 2.0000 2.00003.0000 −1.0000 2.0000 2.00003.0000 −1.0000 2.0000 2.0000

Teoricamente, el metodo de Gauss-Seidel puede ser un proceso infinito. Enla practica el proceso se acaba cuando de xk a xk+n los cambios son muypequenos. Esto quiere decir que el x actual es casi la solucion x∗.

Como el metodo no siempre converge, entonces otra detencion del proceso,no deseada pero posible, esta determinada cuando el numero de iteracionesrealizadas es igual a un numero maximo de iteraciones previsto.

El siguiente ejemplo no es convergente, ni siquiera empezando de una aprox-imacion inicial muy cercana a la solucion. La solucion exacta es x = (1, 1, 1).

Ejemplo 0.2. Resolver−1 2 1011 −1 21 5 2

x1

x2

x3

=

11128

partiendo de x0 = (1.0001, 1.0001, 1.0001).

1.0012 1.0001 1.00011.0012 1.0134 1.00011.0012 1.0134 0.9660

0.6863 1.0134 0.96600.6863 −2.5189 0.96600.6863 −2.5189 9.9541

3

Page 4: Metodo gauss seidel

83.5031 −2.5189 9.954183.5031 926.4428 9.954183.5031 926.4428 −2353.8586

Algunos criterios garantizan la convergencia del metodo de Gauss-Seidel.Por ser condiciones suficientes para la convergencia son criterios demasiadofuertes, es decir, la matriz A puede no cumplir estos requisitos y sin embargoel metodo puede ser convergente. En la practica, con frecuencia, es muydispendioso poder aplicar estos criterios.

Una matriz cuadrada es de diagonal estrictamente dominante por filassi en cada fila el valor absoluto del elemento diagonal es mayor que la sumade los valores absolutos de los otros elementos de la fila,

|aii| >n∑

j=1,j 6=i|aij| , ∀i.

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

Teorema 0.2. Si A es definida positiva, entonces el metodo de Gauss-Seidelconverge para cualquier x0 inicial.

Teoricamente el metodo de Gauss-Seidel se deberıa detener cuando ‖xk −x∗‖ < ε. Sin embargo la condicion anterior necesita conocer x∗, que es pre-cisamente lo que se esta buscando. Entonces, de manera practica el metodode GS se detiene cuando ‖xk − xk+n‖ < ε.

Dejando de lado los superındices, las formulas del metodo de Gauss-Seidel sepueden reescribir para facilitar el algoritmo y para mostrar que ‖xk − x∗‖ y‖xk − xk+n‖ estan relacionadas.

xi ←bi −

n∑

j=1,j 6=iaijxj

aii,

xi ←bi −

n∑

j=1

aijxj + aiixi

aii,

4

Page 5: Metodo gauss seidel

xi ← xi +bi − Ai· x

aii.

Sean

ri = bi − Ai· x,δi =

riaii·

El valor ri es simplemente el error, residuo o resto que se comete en la i-esimaecuacion al utilizar el x actual. Si ri = 0, entonces la ecuacion i-esima sesatisface perfectamente. El valor δi es la modificacion que sufre xi en unaiteracion.

Sean r = (r1, r2, ..., rn), δ = (δ1, δ2, ..., δn). Entonces xk+n = xk + δ. Ademasxk es solucion si y solamente si r = 0, o sea, si y solamente δ = 0. Loanterior justifica que el metodo de GS se detenga cuando ‖δ‖ ≤ ε. La norma‖δ‖ puede ser la norma euclidiana o max |δi| o

∑ |δi|.Si en el criterio de parada del algoritmo se desea enfatizar sobre los errores oresiduos, entonces se puede comparar ‖δ‖ con ε/‖(a11, ..., ann)‖; por ejemplo,

‖δ‖ ≤ ε

max |aii|·

El esquema del algoritmo para resolver un sistema de ecuaciones por elmetodo de Gauss-Seidel es:

datos: A, b, x0, ε, maxitx = x0

para k = 1, ...,maxitnrmD← 0para i = 1, ..., n

δi = (bi − prodEsc(Ai·, x))/aiixi ← xi + δinrmd←nrmD+δi

fin-para isi nrmD ≤ ε ent x∗ ≈ x, salir

fin-para k

5

Page 6: Metodo gauss seidel

0.2 Solucion por mınimos cuadrados

Consideremos ahora un sistema de ecuaciones Ax = b, no necesariamentecuadrado, donde A es una matriz m × n cuyas columnas son linealmenteindependientes. Esto implica que hay mas filas que columnas, m ≥ n, yque ademas el rango de A es n. Es muy probable que este sistema no tengasolucion, es decir, tal vez no existe x que cumpla exactamente las m igual-dades. Se desea que

Ax = b,

Ax− b = 0,

‖Ax− b‖ = 0,

‖Ax− b‖2 = 0,

‖Ax− b‖22 = 0.

Es Posible que lo deseado no se cumpla, entonces se quiere que el incumplim-iento (el error) sea lo mas pequeno posible. Se desea minimizar esa cantidad,

min ‖Ax− b‖22 . (1)

El vector x que minimice ‖Ax−b‖22 se llama solucion por mınimos cuadrados.

Como se vera mas adelante, tal x existe y es unico (suponiendo que lascolumnas de A son linealmente independientes).

Con el animo de hacer mas clara la deduccion, supongamos que A es unamatriz 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 mınimo 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

6

Page 7: Metodo gauss seidel

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

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

Escribiendo de manera matricial,

∂f

∂x1=2(A1·x− b1)a11 + 2(A2·x− b2)a21 + 2(A3·x− b3)a31

+ 2(A4·x− b4)a41.

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

∂f

∂x1

= 2(

((Ax)1 − b1)a11 + ((Ax)2 − b2)a21 + ((Ax)3 − b3)a31

+((Ax)4 − b4a41

),

= 2

4∑

i=1

(Ax− b)i ai1,

= 24∑

i=1

(A·1)i(Ax− b)i,

= 24∑

i=1

(AT1·)i(Ax− b)i,

= 2AT1·(Ax− b),

= 2(AT(Ax− b)

)1

De manera semejante

∂f

∂x2= 2

(AT(Ax− b)

)2,

∂f

∂x3= 2

(AT(Ax− b)

)3

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

7

Page 8: Metodo gauss seidel

Es decir,

AT(Ax− b) = 0,

AT Ax = AT b . (2)

Las ecuaciones (2) se llaman ecuaciones normales para la solucion (o seu-dosolucion) de un sistema de ecuaciones por mınimos cuadrados.

La matriz ATA es simetrica de tamano n×n. En general, si A es una matrizm× n de rango r, entonces ATA tambien es de rango r (ver [Str86]). Comose supuso que el rango de A es n, entonces ATA es invertible. Mas aun, ATAes definida positiva.

Por ser ATA invertible, hay una unica solucion de (2), o sea, hay un solovector x que hace que las derivadas parciales sean nulas. En general, lasderivadas parciales nulas son simplemente una condicion necesaria para obtenerel mınimo de una funcion (tambien lo es para maximos o para puntos de silla),pero en este caso, como ATA es definida positiva, f es convexa, y entoncesanular las derivadas parciales se convierte en condicion necesaria y suficientepara el mınimo.

En resumen, si las columnas de A son linealmente independientes, entoncesla solucion por mınimos cuadrados existe y es unica. Para obtener la solucionpor mınimos cuadrados se resuelven las ecuaciones normales.

Como ATA es definida positiva, (2) se puede resolver por el metodo deCholesky. Si m ≥ n y al hacer la factorizacion de Cholesky resulta queATA no es definida positiva, entonces las columnas de A son linealmentedependientes.

Si el sistema Ax = b tiene solucion exacta, esta coincide con la solucion pormınimos cuadrados.

Ejemplo 0.3. Resolver por mınimos cuadrados:

2 1 0−1 −2 3−2 2 1

5 4 −2

x1

x2

x3

=

3.18.9−3.1

0.1

.

Las ecuaciones normales dan:

34 20 −1520 25 −12−15 −12 14

x1

x2

x3

=

4.0−20.5

23.4

8

Page 9: Metodo gauss seidel

La solucion por mınimos cuadrados es:

x = (2.0252, −1.0132, 2.9728) .

El error, Ax− b, es:

−0.06280.0196−0.0039

0.0275

. 3

Ejemplo 0.4. Resolver por mınimos cuadrados:

2 1 3−1 −2 0−2 2 −6

5 4 6

x1

x2

x3

=

39−3

0

.

Las ecuaciones normales dan:

34 20 4820 25 1548 15 81

x1

x2

x3

=

3−21

27

Al tratar de resolver este sistema de ecuaciones por el metodo de Cholesky;no se puede obtener la factorizacion de Cholesky, luego ATA no es definidapositiva, es decir, las columnas de A son linealmente dependientes. Si seaplica el metodo de Gauss, se obtiene que ATA es singular y se concluye quelas columnas de A son linealmente dependientes. 3

Ejemplo 0.5. Resolver por mınimos cuadrados:

2 1−1 −2−2 2

5 4

[x1

x2

]=

30−6

6

.

Las ecuaciones normales dan:[

34 2020 25

] [x1

x2

]=

[4815

]

La solucion por mınimos cuadrados es:

x = (2, −1) .

9

Page 10: Metodo gauss seidel

El error, Ax− b, es:

0000

.

En este caso, el sistema inicial tenıa solucion exacta y la solucion por mınimoscuadrados coincide con ella. 3

La implementacion eficiente de la solucion por mınimos cuadrados, vıa ecua-ciones normales, debe tener en cuenta algunos detalles. No es necesarioconstruir toda la matriz simetrica ATA (n2 elementos). Basta con almacenaren un arreglo de tamano n(n + 1)/2 la parte triangular superior de ATA.

Este almacenamiento puede ser por filas, es decir, primero los n elementos dela primera fila, enseguida los n− 1 elementos de la segunda fila a partir delelemento diagonal, despues los n − 2 de la tercera fila a partir del elementodiagonal y ası sucesivamente hasta almacenar un solo elemento de la fila n. Sise almacena la parte triangular superior de ATA por columnas, se almacenaprimero un elemento de la primera columna, enseguida dos elementos de lasegunda columna y ası sucesivamente. Cada una de las dos formas tiene susventajas y desventajas. La solucion por el metodo de Cholesky debe teneren cuenta este tipo de estructura de almacenamiento de la informacion.

Otros metodos eficientes para resolver sistemas de ecuaciones por mınimoscuadrados utilizan matrices ortogonales de Givens o de Householder.

10

Page 11: Metodo gauss seidel

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 40 44 -1]’

eps = 1.0e-8;

n = size(a0,1)

a = [a0 b]

for k = 1:n-1

[vmax , pos] = max( abs(a(k:n,k) ) )

11

Page 12: Metodo gauss seidel

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

Page 13: Metodo gauss seidel

// reoslver U x = y para obtener x

a = [9 2 3; 2 8 -1; 3 -1 5]

b = [36 24 23]’

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

//==========================================================

//==========================================================

// 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 = [0 0 0 0]’

n = size(a,1)

x = x0

maxit = 10

for k = 1:maxit

13

Page 14: Metodo gauss seidel

for i = 1:n

res = b(i) - a(i,:)*x

x(i) = x(i) + res/a(i,i)

end

end

14