Métodos directos para solución de sistemas ecuaciones lineales
Metodo gauss seidel
1. 0.1 M´todo de Gauss-Seidel
e
Los m´todos de Gauss y Cholesky hacen parte de los m´todos directos o
e e
finitos. Al cabo de un n´ mero finito de operaciones, en ausencia de errores
u
de redondeo, se obtiene x∗ soluci´n del sistema Ax = b.
o
El m´todo de Gauss-Seidel hace parte de los m´todos llamados indirectos o
e e
iterativos. En ellos se comienza con x = (x1 , x0 , ..., x0 ), una aproximaci´n
0 0
2 n o
inicial de la soluci´n. A partir de x0 se construye una nueva aproximaci´n de
o o
la soluci´n, x1 = (x1 , x1 , ..., x1 ). A partir de x1 se construye x2 (aqu´ el su-
o 1 2 n ı
per´ındice indica la iteraci´n y no indica una potencia). As´ sucesivamente se
o ı
construye una sucesi´n de vectores {xk }, con el objetivo, no siempre garan-
o
tizado, de que
lim xk = x∗ .
k→∞
Generalmente los m´todos indirectos son una buena opci´n cuando la matriz
e o
es muy grande y dispersa o rala (sparse), es decir, cuando el n´ mero de
u
2
elementos no nulos es peque˜ o comparado con n , n´ mero total de elementos
n u
de A. En estos casos se debe utilizar una estructura de datos adecuada que
permita almacenar unicamente los elementos no nulos.
´
En cada iteraci´n del m´todo de Gauss-Seidel, hay n subiteraciones. En la
o e
primera subiteraci´n se modifica unicamente x1 . Las dem´s coordenadas x2 ,
o ´ a
x3 , ..., xn no se modifican. El c´lculo de x1 se hace de tal manera que se
a
satisfaga la primera ecuaci´n.
o
b1 − (a12 x0 + a13 x0 + · · · + a1n x0 )
2 3 n
x1 =
1 ,
a11
x1
i = x0 , i = 2, ..., n.
i
En la segunda subiteraci´n se modifica unicamente x2 . Las dem´s coorde-
o ´ a
nadas x1 , x3 , ..., xn no se modifican. El c´lculo de x2 se hace de tal manera
a
que se satisfaga la segunda ecuaci´n.
o
b2 − (a21 x1 + a23 x1 + · · · + a2n x1 )
1 3 n
x2
2 = ,
a22
x2
i = x1 , i = 1, 3, ..., n.
i
As´ sucesivamente, en la n-´sima subiteraci´n se modifica unicamente xn .
ı e o ´
Las dem´s coordenadas x1 , x2 , ..., xn−1 no se modifican. El c´lculo de xn se
a a
1
2. hace de tal manera que se satisfaga la n-´sima ecuaci´n.
e o
n−1 n−1 n−1
bn − (an1 x1 + an3 x3 + · · · + ann xn )
xn =
n ,
ann
xn
i
n−1
= xi , i = 1, 2, ..., n − 1.
Ejemplo 0.1. Resolver
10 2 −1 0 x1 26
1 x2
20 −2 3 −15
=
−2 1 30 0 x3 53
1 2 3 20 x4 47
partiendo de x0 = (1, 2, 3, 4).
26 − (2 × 2 + (−1) × 3 + 0 × 4)
x1 =
1 = 2.5,
10
x1 = (2.5, 2, 3, 4).
−15 − (1 × 2.5 + (−2) × 3 + 3 × 4)
x2
2 = = −1.175,
20
x2 = (2.5, −1.175, 3, 4).
53 − (−2 × 2.5 + 1 × (−1.175) + 0 × 4)
x3
3 = = 1.9725,
30
x3 = (2.5, −1.175, 1.9725, 4).
47 − (1 × 2.5 + 2 × (−1.175) + 3 × 1.9725)
x4
4 = = 2.0466,
20
x4 = (2.5, −1.175, 1.9725, 2.0466).
Una vez que se ha hecho una iteraci´n completa (n subiteraciones), se utiliza
o
el ultimo x obtenido como aproximaci´n inicial y se vuelve a empezar; se
´ o
calcula x1 de tal manera que se satisfaga la primera ecuaci´n, luego se calcula
o
x2 ... A continuaci´n est´n las iteraciones siguientes para el ejemplo anterior.
o a
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
2
3. 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´ricamente, el m´todo de Gauss-Seidel puede ser un proceso infinito. En
o e
la pr´ctica el proceso se acaba cuando de xk a xk+n los cambios son muy
a
peque˜ os. Esto quiere decir que el x actual es casi la soluci´n x∗ .
n o
Como el m´todo no siempre converge, entonces otra detenci´n del proceso,
e o
no deseada pero posible, est´ determinada cuando el n´ mero de iteraciones
a u
realizadas es igual a un n´ mero m´ximo de iteraciones previsto.
u a
El siguiente ejemplo no es convergente, ni siquiera empezando de una aprox-
imaci´n inicial muy cercana a la soluci´n. La soluci´n exacta es x = (1, 1, 1).
o o o
Ejemplo 0.2. Resolver
−1 2 10 x1 11
11 −1 2 x2 = 12
1 5 2 x3 8
partiendo de x0 = (1.0001, 1.0001, 1.0001).
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
4. 83.5031 −2.5189 9.9541
83.5031 926.4428 9.9541
83.5031 926.4428 −2353.8586
Algunos criterios garantizan la convergencia del m´todo de Gauss-Seidel.
e
Por ser condiciones suficientes para la convergencia son criterios demasiado
fuertes, es decir, la matriz A puede no cumplir estos requisitos y sin embargo
el m´todo puede ser convergente. En la pr´ctica, con frecuencia, es muy
e a
dispendioso poder aplicar estos criterios.
Una matriz cuadrada es de diagonal estrictamente dominante por filas
si en cada fila el valor absoluto del elemento diagonal es mayor que la suma
de los valores absolutos de los otros elementos de la fila,
n
|aii | > |aij | , ∀i.
j=1,j=i
Teorema 0.1. Si A es de diagonal estrictamente dominante por filas, en-
tonces el m´todo de Gauss-Seidel converge para cualquier x 0 inicial.
e
Teorema 0.2. Si A es definida positiva, entonces el m´todo de Gauss-Seidel
e
0
converge para cualquier x inicial.
Te´ricamente el m´todo de Gauss-Seidel se deber´ detener cuando xk −
o e ıa
x∗ < ε. Sin embargo la condici´n anterior necesita conocer x∗ , que es pre-
o
cisamente lo que se est´ buscando. Entonces, de manera pr´ctica el m´todo
a a e
de GS se detiene cuando xk − xk+n < ε.
Dejando de lado los super´ındices, las f´rmulas del m´todo de Gauss-Seidel se
o e
pueden reescribir para facilitar el algoritmo y para mostrar que xk − x∗ y
xk − xk+n est´n relacionadas.
a
n
bi − aij xj
j=1,j=i
xi ← ,
aii
n
bi − aij xj + aii xi
j=1
xi ← ,
aii
4
5. bi − Ai· x
xi ← x i + .
aii
Sean
ri = bi − Ai· x,
ri
δi = ·
aii
El valor ri es simplemente el error, residuo o resto que se comete en la i-´sima
e
ecuaci´n al utilizar el x actual. Si ri = 0, entonces la ecuaci´n i-´sima se
o o e
satisface perfectamente. El valor δi es la modificaci´n que sufre xi en una
o
iteraci´n.
o
Sean r = (r1 , r2 , ..., rn ), δ = (δ1 , δ2 , ..., δn ). Entonces xk+n = xk + δ. Adem´s
a
k
x es soluci´n si y solamente si r = 0, o sea, si y solamente δ = 0. Lo
o
anterior justifica que el m´todo de GS se detenga cuando δ ≤ ε. La norma
e
δ puede ser la norma euclidiana o max |δi | o |δi |.
Si en el criterio de parada del algoritmo se desea enfatizar sobre los errores o
residuos, entonces se puede comparar δ con ε/ (a11 , ..., ann ) ; por ejemplo,
ε
δ ≤ ·
max |aii |
El esquema del algoritmo para resolver un sistema de ecuaciones por el
m´todo de Gauss-Seidel es:
e
datos: A, b, x0 , ε, maxit
x = x0
para k = 1, ...,maxit
nrmD← 0
para i = 1, ..., n
δi = (bi − prodEsc(Ai· , x))/aii
xi ← x i + δ i
nrmd←nrmD+δi
fin-para i
si nrmD ≤ ε ent x∗ ≈ x, salir
fin-para k
5
6. 0.2 Soluci´n por m´
o ınimos 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´s filas que columnas, m ≥ n, y
a
que adem´s el rango de A es n. Es muy probable que este sistema no tenga
a
soluci´n, es decir, tal vez no existe x que cumpla exactamente las m igual-
o
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 m´s peque˜ o posible. Se desea minimizar esa cantidad,
a n
2
min Ax − b 2 . (1)
El vector x que minimice Ax−b 2 se llama soluci´n por m´
2 o ınimos cuadrados.
Como se ver´ m´s adelante, tal x existe y es unico (suponiendo que las
a a ´
columnas de A son linealmente independientes).
Con el animo de hacer m´s clara la deducci´n, supongamos que A es una
´ a o
matriz 4 × 3. Sea f (x) = Ax − b 2 ,
2
f (x) =(a11 x1 + a12 x2 + a13 x3 − b1 )2 + (a21 x1 + a22 x2 + a23 x3 − b2 )2 +
(a31 x1 + a32 x2 + a33 x3 − b3 )2 + (a41 x1 + a42 x2 + a43 x3 − 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
=2(a11 x1 + a12 x2 + a13 x3 − b1 )a11
∂x1
+ 2(a21 x1 + a22 x2 + a23 x3 − b2 )a21
6
7. + 2(a31 x1 + a32 x2 + a33 x3 − b3 )a31
+ 2(a41 x1 + a42 x2 + a43 x3 − b4 )a41 .
Escribiendo de manera matricial,
∂f
=2(A1· x − b1 )a11 + 2(A2· x − b2 )a21 + 2(A3· x − b3 )a31
∂x1
+ 2(A4· x − b4 )a41 .
Si B es una matriz y u un vector columna, entonces (Bu)i = Bi· u.
∂f
= 2 ((Ax)1 − b1 )a11 + ((Ax)2 − b2 )a21 + ((Ax)3 − b3 )a31
∂x1
+((Ax)4 − b4 a41 ,
4
= 2 (Ax − b)i ai1 ,
i=1
4
= 2 (A·1 )i (Ax − b)i ,
i=1
4
= 2 (AT 1· )i (Ax − b)i ,
i=1
= 2AT 1· (Ax − b),
= 2 AT (Ax − b) 1
De manera semejante
∂f
= 2 AT (Ax − b) 2
,
∂x2
∂f
= 2 AT (Ax − b) 3
∂x3
Igualando a cero las tres derivadas parciales y quitando el 2 se tiene
AT (Ax − b) 1
= 0,
T
A (Ax − b) 2
= 0,
AT (Ax − b) 3
= 0
7
8. Es decir,
AT (Ax − b) = 0,
AT A x = A T b . (2)
Las ecuaciones (2) se llaman ecuaciones normales para la soluci´n (o seu-
o
dosoluci´n) de un sistema de ecuaciones por m´
o ınimos cuadrados.
La matriz AT A es sim´trica de tama˜ o n × n. En general, si A es una matriz
e n
m × n de rango r, entonces A A tambi´n es de rango r (ver [Str86]). Como
T
e
se supuso que el rango de A es n, entonces AT A es invertible. M´s a´ n, AT A
a u
es definida positiva.
Por ser AT A invertible, hay una unica soluci´n de (2), o sea, hay un solo
´ o
vector x que hace que las derivadas parciales sean nulas. En general, las
derivadas parciales nulas son simplemente una condici´n necesaria para obtener
o
el m´
ınimo de una funci´n (tambi´n lo es para m´ximos o para puntos de silla),
o e a
pero en este caso, como AT A es definida positiva, f es convexa, y entonces
anular las derivadas parciales se convierte en condici´n necesaria y suficiente
o
para el m´ınimo.
En resumen, si las columnas de A son linealmente independientes, entonces
la soluci´n por m´
o ınimos cuadrados existe y es unica. Para obtener la soluci´n
´ o
por m´ ınimos cuadrados se resuelven las ecuaciones normales.
Como AT A es definida positiva, (2) se puede resolver por el m´todo de
e
Cholesky. Si m ≥ n y al hacer la factorizaci´n de Cholesky resulta que
o
AT A no es definida positiva, entonces las columnas de A son linealmente
dependientes.
Si el sistema Ax = b tiene soluci´n exacta, ´sta coincide con la soluci´n por
o e o
m´ınimos cuadrados.
Ejemplo 0.3. Resolver por m´
ınimos cuadrados:
2 1 0 3.1
−1 −2 x
3 1 8.9
x2 =
.
−2 2 1 −3.1
x3
5 4 −2 0.1
Las ecuaciones normales dan:
34 20 −15 x1 4.0
20 25 −12 x2 = −20.5
−15 −12 14 x3 23.4
8
9. La soluci´n por m´
o ınimos 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 m´
ınimos cuadrados:
2 1 3 3
−1 −2 x
0 1 9
x2 =
.
−2 2 −6 −3
x3
5 4 6 0
Las ecuaciones normales dan:
34 20 48 x1 3
20 25 15 x2 = −21
48 15 81 x3 27
Al tratar de resolver este sistema de ecuaciones por el m´todo de Cholesky;
e
no se puede obtener la factorizaci´n de Cholesky, luego AT A no es definida
o
positiva, es decir, las columnas de A son linealmente dependientes. Si se
aplica el m´todo de Gauss, se obtiene que AT A es singular y se concluye que
e
las columnas de A son linealmente dependientes. 3
Ejemplo 0.5. Resolver por m´
ınimos cuadrados:
2 1 3
−1 −2 x1 0
= .
−2 2 x2 −6
5 4 6
Las ecuaciones normales dan:
34 20 x1 48
=
20 25 x2 15
La soluci´n por m´
o ınimos cuadrados es:
x = (2, −1) .
9
10. El error, Ax − b, es:
0
0
.
0
0
En este caso, el sistema inicial ten´ soluci´n exacta y la soluci´n por m´
ıa o o ınimos
cuadrados coincide con ella. 3
La implementaci´n eficiente de la soluci´n por m´
o o ınimos cuadrados, v´ ecua-
ıa
ciones normales, debe tener en cuenta algunos detalles. No es necesario
construir toda la matriz sim´trica AT A (n2 elementos). Basta con almacenar
e
en un arreglo de tama˜ o n(n + 1)/2 la parte triangular superior de AT A.
n
Este almacenamiento puede ser por filas, es decir, primero los n elementos de
la primera fila, enseguida los n − 1 elementos de la segunda fila a partir del
elemento diagonal, despu´s los n − 2 de la tercera fila a partir del elemento
e
diagonal y as´ sucesivamente hasta almacenar un solo elemento de la fila 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 as´ sucesivamente. Cada una de las dos formas tiene sus
ı
ventajas y desventajas. La soluci´n por el m´todo de Cholesky debe tener
o e
en cuenta este tipo de estructura de almacenamiento de la informaci´n.o
Otros m´todos eficientes para resolver sistemas de ecuaciones por m´
e ınimos
cuadrados utilizan matrices ortogonales de Givens o de Householder.
10
11. 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
12. if vmax <= eps
printf(’n Matriz singular o casi singular.nn’)
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.nn’)
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
13. // 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
14. for i = 1:n
res = b(i) - a(i,:)*x
x(i) = x(i) + res/a(i,i)
end
end
14