Vous êtes sur la page 1sur 29

3.

Solucin de sistemas de ecuaciones lineales

El sistema de n ecuaciones con n incgnitas

a11 x1 + a12 x2 + a13 x3 + + a1n xn = b1


a21 x1 + a22 x2 + a23 x3 + + a2n xn = b2
a31 x1 + a32 x2 + a33 x3 + + a3n xn = b3
:
:
an1 x1 + an2 x2 + an3 x3 + + ann xn = bn

se puede escribir en forma matricial como Ax = b , donde A es la matriz de


coeficientes,

a11 a12 a13 a1n


a21 a22 a23 a2n
a31 a32 a33 a3n
=

[an1 an2 an3 ann ]

x es el vector de incgnitas y b el vector de trminos del lado derecho

x1 b1
x2 b2
x3 b
= = 3


[xn ] [bn ]

Existen dos tipos de mtodos para resolver el problema Ax = b; los exactos y los
iterativos. Los primeros son llamados exactos porque, en ausencia de errores de
redondeo, obtienen la solucin analtica o exacta y estn basados en la eliminacin de
Gauss o en la factorizacin LU. Los mtodos del segundo tipo encuentran una solucin
aproximada mediante procesos iterativos.
Para sistemas con matrices de coeficientes densas y relativamente pequeas, se
prefieren los mtodos exactos. En el caso de sistemas con matrices de coeficientes de
orden grande y poco densas, son recomendados los mtodos iterativos. Una matriz
densa es aquella que contiene pocos elementos iguales a cero, y por lo contrario, la
mayora de los elementos en una matriz poco densa o dispersa son ceros.

3.1 Eliminacin de Gauss

1
Es un proceso que convierte a la matriz de coeficientes A de n x n en una matriz
triangular superior mediante la aplicacin sistemtica de transformaciones elementales
de rengln. Una vez obtenida la matriz triangular superior se aplica un procedimiento
conocido como sustitucin hacia atrs para obtener el vector solucin x.
Las transformaciones elementales de rengln son:
1.- La fila i de una matriz puede ser multiplicada por un constante 0

Ri Ri

2.- A la fila i de un matriz le puede ser sumada otra fila j de la misma matriz
multiplicada por una constante

Rj + Rj Ri

3.- Las filas i y j de una matriz pueden ser intercambiadas

Ri Rj

La eliminacin de Gauss consta de n - 1 pasos de eliminacin y cada uno de ellos


consiste en:
1.- Seleccionar un pivote: en el i-simo paso de eliminacin se escoge como pivote al i-
simo elemento de la diagonal principal de A, estrategia conocida como pivoteo
natural.
2.- Colocar ceros debajo del pivote en la misma columna.

Ejemplo
Resolver el sistema

x1 - x2 + x3 = - 4
5x1 - 4x2 + 3x3 = -12
2x1 + x2 + x3 = 11

con eliminacin de Gauss y sustitucin hacia atrs. Use una estrategia de pivoteo
natural.
En primer lugar, se forma una matriz agregando una columna a la matriz de
coeficientes. La columna aadida es el vector de trminos del lado derecho y la matriz
as formada se conoce como matriz aumentada del sistema:

1.00000 1.00000 1.00000 4.00000


[5.00000 4.00000 3.00000 12.00000]
2.00000 1.00000 1.00000 11.00000

Primer paso de eliminacin:


El pivote es el primer elemento de la diagonal principal de la matriz de coeficientes, a11
= 1.00000. Ahora se trata de colocar ceros debajo del pivote en la primera columna; las
transformaciones de rengln requeridas para tal efecto son:
2
-5R1 + R2 R2
-2R1 + R3 R3

La fila del pivote es multiplicada por el negativo de una cantidad, conocida como
multiplicador; el elemento que se quiere convertir en cero dividido entre el pivote.
Aplicando estas transformaciones a la matriz aumentada, el resultado es:

1.00000 1.00000 1.00000 4.00000


[0.00000 1.00000 2.00000 8.00000 ]
0.00000 3.00000 1.00000 19.00000

Segundo paso de eliminacin:


El pivote es ahora a22 = 1.00000 y el multiplicador es 3.00000 / 1.00000 = 3.00000. Por
lo tanto la transformacin elemental requerida es:

-3R2 + R3 R3

y la matriz aumentada se convierte en:

1.00000 1.00000 1.00000 4.00000


[0.00000 1.00000 2.00000 8.00000 ]
0.00000 0.00000 5.00000 5.00000

Con estos dos pasos termina la eliminacin de Gauss y la parte correspondiente a la


matriz de coeficientes es una matriz triangular superior. La ltima matriz aumentada
define un sistema cuya solucin es equivalente a la del sistema original:

x1 - x2 + x3 = - 4
x2 - 2x3 = 8
5x3 = - 5

Esta solucin x se puede encontrar fcilmente:

x3 = -5.00000 / 5.00000 = -1.00000


x2 = (8.00000 + 2.00000x3) / 1.00000 = (8.00000+2.00000*(-1.00000)) / 1.00000 =
6.00000
x1 = (-4.00000 + 1.00000x2 -1.00000x3) / 1.00000
x1 = (-4.0000 + 1.00000*(6.00000) - 1.00000*(-1.0000)) / 1.00000 = 3.00000

Este proceso es la sustitucin hacia atrs, conocido as porque se obtienen los valores
de las incgnitas comenzando con la ltima xn y terminando con la primera x1. Las
siguientes frmulas describen la sustitucin hacia atrs y en ellas la letra a denota a los
elementos de la matriz aumentada despus de la eliminacin de Gauss:

an,n+1
xn =
an,n

3
ai,n+1 nj=i+1 ai,j xj
xi = para i = n 1, n 2, ,1
ai,i

El ltimo ejercicio muestra que para poder calcular los multiplicadores en cada paso de
eliminacin, el pivote necesariamente debe ser distinto de cero. Por lo tanto, si en el i-
simo paso de eliminacin aii es cero, se debe intercambiar la fila i con alguna otra
colocada debajo de ella de tal forma que se lleve a la posicin del pivote un nmero
distinto de cero. Si no es posible colocar un pivote diferente de cero, entonces el
sistema lineal no tiene solucin nica. Otra posible situacin en la cual no existe
solucin nica es aquella en la cual despus del ltimo paso de eliminacin el elemento
ann es igual a cero.
Con eliminacin de Gauss tambin es factible calcular el determinante de la matriz de
coeficientes del sistema lineal:
n
ncf
det(A) = (1) aii
i=1

aqu ncf es el nmero de cambios de filas efectuados en la eliminacin y aii representa


los elementos de la diagonal principal de la matriz triangular superior resultado de la
eliminacin. Por lo tanto, el determinante de la matriz de coeficientes del ltimo
ejemplo es:

det(A) = (-1)0 [(1.00000)(1.00000)(5.00000)] = 5.00000

Es posible contar el nmero de operaciones necesarias para resolver un sistema lineal


con eliminacin de Gauss y sustitucin hacia atrs:

Multiplicaciones o divisiones: n3 / 3 + n2 n / 3

Sumas o restas: n3 / 3 + n2 /2 - 5n / 6

En anlisis numrico se emplea la notacin O(n3) la cual indica que el nmero de


operaciones es de orden n3 . La conclusin final es: la eliminacin gaussiana con
sustitucin hacia atrs es un proceso muy costoso en trminos de operaciones
aritmticas ya que el nmero de operaciones aritmticas es proporcional a n3.
A continuacin, un pseudocdigo de un procedimiento que resuelve el sistema Ax = b
con eliminacin gaussiana y sustitucin hacia atrs. Pivoteo natural es empleado.

procedure eliminacion_Gauss(n, A, x, solucion_unica)


integer n, i, p, k, j
real array (Aij)1:n x 1:n+1, (xi)1:n
boolean solucion_unica
real cero, auxiliar, multiplicador, suma
//

4
// Este procedimiento resuelve un sistema lineal de ecuaciones con eliminacin
// gaussiana y sustitucin hacia atrs. Se emplea una estrategia de pivoteo natural.
// Descripcin de parmetros:
// n Nmero de ecuaciones y de incgnitas.
// A Matriz aumentada del sistema, de n filas y n+1 columnas.
// x Si en solucion_unica se devuelve el valor true, entonces x
// es la solucin nica. De n elementos.
// solucion_unica Bandera que indica la existencia de una solucin nica:
// solucion_unica = true el sistema tiene solucin nica
// solucion_unica = false la matriz de coeficientes es singular
// y no hay solucin nica.
//
cero 1X10-12 // si |valor| < cero, se considera a valor como si fuera 0
// Eliminacin de Gauss con pivoteo natural
for i = 1 to n 1 do
solucion_unica false
for p = i to n do // seleccin del pivote
if |Api| cero then
solucion_unica true
exit
end if
end for
if not solucion_unica then
return
end if
if p i then // intercambio de las filas p e i, en caso necesario
for k = 1 to n+1 do
auxiliar Apk
Apk Aik
Aik auxiliar
end for
end if
for j = i +1 to n do // colocacin de ceros debajo del pivote
multiplicador Aji / Aii
for k = i to n + 1 do
Ajk Ajk multiplicador*Aik
end for
end for
end for
if |Ann| < cero then
solucion_unica false
return
end if
// sustitucin hacia atrs
xn An,n+1 / Ann
for i = n -1 to 1 step -1 do
suma 0.0
5
for j = i + 1 to n do
suma suma + Aij*xj
end for
xi (Ai,n+1 suma) / Aii
end for
return
end procedure eliminacin_Gauss

3.2 Pivoteo mximo de columna

Si los clculo involucrados en la eliminacin gaussiana se efectuaran en una


computadora o en una calculadora con longitud de palabra infinita, los resultados
obtenidos seran exactos. Pero como lo anterior no es posible y las computadoras solo
pueden representar y operar un nmero finito de dgitos, necesariamente los resultados
sern aproximados debido a los inevitables errores de redondeo.
Una forma de minimizar los errores de redondeo en la eliminacin de Gauss es emplear
alguna tcnica de pivoteo. De todas las estrategias de pivoteo la ms simple, y
frecuentemente muy efectiva, es el pivoteo parcial o pivoteo mximo de columna: en
cada paso de eliminacin siempre se escoge como pivote al elemento de mayor valor
absoluto entre los colocados en y abajo de la diagonal principal:

Pivoteo mximo de columna

En el i-simo paso de eliminacin, se determina un valor p i tal que:

|api| = mx |aki| para i = 1, 2,...., n -1 pasos de eliminacin


ikn

Ejemplo
Resuelva el sistema

x1 + 3x2 - 2x3 = 7
4x1 - x2 + 3x3 = 10
-5x1 + 2x2 + 3x3 = 7

empleando eliminacin de Gauss con pivoteo mximo de columna.


La matriz aumentada del sistema es:

1.00000 3.00000 2.00000 7.00000


[ 4.00000 1.00000 3.00000 10.00000]
5.00000 2.00000 3.00000 7.00000

Primer paso de eliminacin:


El este pivote se escoge como el elemento con el mayor valor absoluto entre los
elementos de la primera columna desde la fila 1 hasta la 3, por lo tanto el pivote es a31 =
-5.00000. Como el pivote est en la fila 3, es necesario intercambiar la fila 1 con la 3
para colocar en el primer rengln al -5.00000.
6
R1 R3
5.00000 2.00000 3.00000 7.00000
[ 4.00000 1.00000 3.00000 10.00000]
1.00000 3.00000 2.00000 7.00000

Los multiplicadores son ahora 4.00000 / (-5.00000) y 1.00000 / (-5.00000) y las


transformaciones elementales que colocan ceros debajo de a11 son:

-(4.00000 / (-5.00000))R1 + R2 R2
-(1.00000 / (-5.00000))R1 + R3 R3
La matriz aumentada queda al final de este primer paso de eliminacin de esta manera:

5.00000 2.00000 3.00000 7.00000


[ 0.00000 0.60000 5.40000 15.60000]
0.00000 3.40000 1.40000 8.40000

Segundo paso de eliminacin:


Aqu los posibles pivotes son a22 = 0.60000 y a23 = 3.40000. Como |a23| > |a22|, entonces
el pivote es a23 = 3.40000 y por lo tanto se requiere intercambiar las filas 2 y 3:

R2 R3

5.00000 2.00000 3.00000 7.00000


[ 0.00000 3.40000 1.40000 8.40000 ]
0.00000 0.60000 5.40000 15.60000

El multiplicador es 0.60000 / 3.40000 y la transformacin que coloca un cero debajo


del pivote es:

-(0.60000 / 3.40000) R2 + R3 R3
Entonces la matriz aumentada al final queda as:

5.00000 2.00000 3.00000 7.00000


[ 0.00000 3.40000 1.40000 8.40000 ]
0.00000 0.00000 5.64706 14.11765

La sustitucin hacia atrs genera el vector solucin x = [1.50000, 3.50000, 2.50000]T .

Pseudocdigo de un procedimiento que resuelve un sistema lineal, con eliminacin de


Gauss y pivoteo mximo de columna:

procedure eliminacion_Gauss_pm(n, A, x, solucion_unica)


integer n, i, p, k, j
real array (Aij)1:n x 1:n+1, (xi)1:n

7
boolean solucion_unica
real cero, auxiliar, multiplicador, suma
//
// Este procedimiento resuelve un sistema lineal de ecuaciones con eliminacin
// gaussiana y sustitucin hacia atrs. Se emplea una estrategia de pivoteo mximo
// de columna.
// Descripcin de parmetros:
// n Nmero de ecuaciones y de incgnitas.
// A Matriz aumentada del sistema, de n filas y n+1 columnas.
// x Si en solucion_unica se devuelve el valor true, entonces x
// es la solucin nica. De n elementos.
// solucion_unica Bandera que indica la existencia de una solucin nica:
// solucion_unica = true el sistema tiene solucin nica
// solucion_unica = false la matriz de coeficientes es singular
// y no hay solucin nica.
//
cero 1X10-12 // si |valor| < cero, se considera a valor como si fuera 0
// Eliminacin de Gauss con pivoteo mximo de columna
solucion_unica false
for i = 1 to n 1 do
pi
for j = i + 1 to n do // seleccin del pivote
if |Aji| > |Api| then
pj
end if
end for
if |Api| < cero then
return
end if
if p i then // intercambio de las filas p e i, en caso necesario
for k = 1 to n+1 do
auxiliar Apk
Apk Aik
Aik auxiliar
end for
end if
for j = i +1 to n do // colocacin de ceros debajo del pivote
multiplicador Aji / Aii
for k = i to n + 1 do
Ajk Ajk multiplicador*Aik
end for
end for
end for
if |Ann| < cero then
return
end if
solucion_unica true
8
// sustitucin hacia atrs
xn An,n+1 / Ann
for i = n -1 to 1 step -1 do
suma 0.0
for j = i + 1 to n do
suma suma + Aij*xj
end for
xi (Ai,n+1 suma) / Aii
end for
return
end procedure eliminacin_Gauss_pm

3.3 Descomposicin LU

Dada una matriz A de n x n , es posible encontrar las matrices L y U tales que:


A = LU. Las matrices L y U son tambin de n x n. L es triangular inferior y U es
triangular superior.
Para mostrar los detalles de la descomposicin LU, considere una matriz A de 4 x 4:

a11 a12 a13 a14 l11 0 0 0 1 u12 u13 u14


a21 a22 a23 a24 l21 l22 0 0 0 1 u23 u24
[a a32 a33 a34 ] = [l31 ] [ ]
31 l32 l33 0 0 0 1 u34
a41 a42 a43 a44 l41 l42 l43 l44 0 0 0 1

A = LU

Para poder realizar la descomposicin es necesario asignar valores arbitrarios a una de


las diagonales, ya sea la de L o la de U. Si los elementos de la diagonal principal de U
se hacen iguales a uno, se trata de la descomposicin de Crout, como es el caso
mostrado arriba. Si los elementos de la diagonal principal de L se toman iguales a uno,
entonces es la descomposicin de Doolittle.
Multiplicando los renglones de L por la primera columna de U:

l11 (1) = a11


l21 (1) = a21
l31 (1) = a31
l41 (1) = a41
Multiplicando el primer rengln de L por las columnas de U:

l11 (1) = a11


l11 u12 = a12 y por lo tanto u12 = a12 / l11
l11 u13 = a13 y por lo tanto u13 = a13 / l11
l11 u14 = a14 y por lo tanto u14 = a14 / l11
Multiplicando los renglones de L por la segunda columna de U:

9
l11 u12 = a12
l21 u12 + l22 (1) = a22 y por lo tanto l22 = a22 - l21 u12
l31 u12 + l32 (1) = a32 y por lo tanto l32 = a32 - l31 u12
l41 u12 + l42 (1) = a42 y por lo tanto l42 = a42 - l41 u12
Multiplicando el segundo rengln de L por las columnas de U:

l21 (1) = a21


l21 u12 + l22 (1) = a22
l21 u13 + l22 u23 = a23 y por lo tanto u23 = (a23 - l21 u13 ) / l22
l21 u14 + l22 u24 = a24 y por lo tanto u24 = (a24 - l21 u14) / l22
Multiplicando los renglones de L por la tercera columna de U:

l11 u13 = a13


l21 u13 + l22 u23 = a23
l31 u13 + l32 u23 + l33 (1) = a33 y por lo tanto l33 = a33 - l31 u13 - l32 u23
l41 u13 + l42 u23 + l43 (1) = a43 y por lo tanto l43 = a43 - l41 u13 - l42 u23

Multiplicando el tercer rengln de L por las columnas de U:


l31 (1) = a31
l31 u12 + l32 (1) = a32
l31 u13 + l32 u23 + l33 (1) = a33
l31 u14 + l32 u24 + l33 u34 = a34 y por lo tanto u34 = (a34 - l31 u14 - l32 u24 ) / l33

Multiplicando los renglones de L por la cuarta columna de U:

l11 u14 = a14


l21 u14 + l22 u24 = a24
l31 u14 + l32 u24 + l33 u34 = a34
l41 u14 + l42 u24 + l43 u34 + l44 (1) = a44 y por lo tanto l44 = a44 - l41 u14 - l42 u24 - l43 u34
Entonces, este procedimiento basado en las propiedades del producto de matrices,
permite encontrar a los elementos desconocidos de L y U. Las siguientes ecuaciones
representan a dicho procedimiento:

li1 = ai1 para i = 1,2, , n


a1j
u1j = l para j = 2,3, , n
11

Para k = 2,3, , n 1
k1

lik = aik lij ujk , i = k, k + 1, , n


j=1
aki k1
j=1 lkj uji
uki = , i = k + 1, k + 2, . , n
[ lkk
10
n1

lnn = ann lnj ujn


j=1

Una vez obtenida la descomposicin LU de la matriz de coeficientes A, es posible


resolver el sistema Ax = b; dado que A = LU, el sistema original se puede escribir
como (LU)x = L(Ux) = b y si se define z como z = Ux, entonces ahora queda el
sistema Lz = b, el cual se puede resolver ahora mediante sustitucin hacia adelante.
Conocido z, entonces se resuelve Ux = z con sustitucin hacia atrs, encontrndose as
al vector x.

Ejemplo
Resolver el sistema

3x1 - x2 + 2x3 = 12
x1 + 2x2 + 3x3 = 11
2x1 - 2x2 - x3 = 2

con descomposicin LU.

l11 = a11 = 3.00000


l21 = a21 = 1.00000 u12 = a12 / l11 = -1.00000 / 3.00000 = -0.33333
l31 = a31 = 2.00000 u13 = a13 / l11 = 2.00000 / 3.00000 = 0.66667

3 1 2 3.00000 0 0 1 0.33333 0.66667


[1 2 3 ] = [1.00000 l22 0 ] [0 1 u23 ]
2 2 1 2.00000 l32 l33 0 0 1

l22 = a22 - l21 u12 = 2.00000 -1.00000*(-0.33333) = 2.33333


l32 = a32 - l31 u12 = -2.00000 - 2.00000*(-0.33333) = -1.33333
u23 = (a23 - l21 u13) / l22 = (3.00000 -1.00000*0.66667) / 2.33333 = 1.00000

3 1 2 3.00000 0 0 1 0.33333 0.66667


[1 2 3 ] = [1.00000 2.33333 0 ] [0 1 1.00000]
2 2 1 2.00000 1.33333 l33 0 0 1

l33 = a33 - l31 u13 - l32 u23 = -1.00000 - 2.00000*0.66667 - (-1.33333)*(1.00000)


l33 = -1.00000

Entonces, la descomposicin LU es:

3 1 2 3.00000 0 0 1 0.33333 0.66667


[1 2 3 ] = [1.00000 2.33333 0 ] [0 1 1.00000]
2 2 1 2.00000 1.33333 1.00000 0 0 1

Lz = b es el sistema:

11
3.00000z1 = 12.00000
1.00000z1 + 2.33333z2 = 11.00000
2.00000z1 - 1.33333z1 -1.00000z3 = 2.00000

el cual se resuelve con sustitucin hacia adelante. Este algoritmo es llamado as porque
la primera incgnita que se determina es z1 y la ltima zn.

z1 = 12.00000 / 3.00000 = 4.00000


z2 = (11.00000 - z1) / 2.33333 = (11.00000 - 4.00000) / 2.33333 = 3.00000
z3 = (2.00000 - 2z1 + 1.33333z2) / (-1.00000)
z3 = (2.00000 - 2.00000*4.00000 + 1.33333*3.00000) / (-1.00000) = 2.000000

Por ltimo, es necesario resolver el sistema Ux = z mediante sustitucin hacia atrs:

1.00000x1 - 0.33333x2 + 0.66667x3 = 4.00000


1.00000x2 + 1.00000x3 = 3.00000
1.00000x3 = 2.00000

x3 = 2.00000 / 1.00000 = 2.00000


x2 = (3.00000 - x3) / 1.00000 = (3.00000 - 2.00000) / 1.00000 = 1.00000
x1 =( 4.00000 + 0.33333x2 - 0.66667x3) / 1.00000
x1 = (4.00000 + 0.33333*1.00000 - 0.66667*2.00000) / 1.00000 = 3.00000

Entonces la solucin del sistema es x = [3.00000, 1.00000, 2.00000]T.

La sustitucin hacia adelante que permite resolver a Lz = b se puede resumir con las
frmulas:

b1
z1 =
l11

bi i1
j=1 lij zj
zi = , i = 2,3, , n
lii

El proceso de sustitucin hacia atrs empleado en la solucin de Ux = z se describe


mediante:

zn
xn = = zn
unn

zi nj=i+1 uij xj
xi = , i = n 1, n 2, ,1
uii

Si se conoce la descomposicin LU de A, la solucin de Ax = b implica solamente


resolver Lz = b y Ux = z. El trabajo computacional asociado con cualquiera de estas

12
soluciones es de O(n2/2) multiplicaciones o divisiones. Esta es la razn por la que se
prefiere la descomposicin LU para resolver varios sistemas lineales con la misma
matriz de coeficientes. La descomposicin LU junto con la solucin de Lz = b y de Ux
= z requieren un total de O(n3/3) multiplicaciones o divisiones.
En el algoritmo de la reduccin de Crout, los elementos de la diagonal principal de L
deben ser distintos de cero. Si en algn momento, se detecta que lii = 0 entonces es
obligado un intercambio de filas. Ms especficamente; si lii = 0, se debe intercambiar
la fila i con alguna de las filas colocadas debajo de ella, cuidando que el intercambio
solo afecte a los elementos de la parte triangular inferior. El mismo intercambio de
filas deber realizarse tambin en A y en b. Si no es posible encontrar un lii.0 ,
entonces la matriz A es singular y el sistema Ax = b no tiene solucin nica.
Despus de los cambios de renglones, al terminar la descomposicin LU la igualdad A
= LU sigue siendo vlida, L sigue siendo triangular inferior y U triangular superior
pero A ahora es la matriz original afectada por los cambios de filas. Es factible
implementar un pivoteo mximo de columna en la descomposicin de Crout. En este
caso, se busca colocar en la posicin lii al elemento de mayor valor absoluto entre los
colocados en y debajo de la diagonal principal de L. El intercambio de filas deber
afectar solamente a la parte triangular inferior de L y tambin deber ser aplicado a la
matriz A y al vector b.
A continuacin, el pseudocdigo de un procedimiento que realiza la descomposicin
LU:

procedure LU(n, A, L, U, info_cambiosf, exito)


integer n, i, j, k, p
real array (Aij)1:n x 1:n, (Lij)1:n x 1:n, (Uij)1:n x 1:n
integer array (info_cambiosfi)1:n
boolean exito, distinto_cero
//
// Factorizacin A = LU mediante reduccin de Crout.
// Descripcin de parmetros:
// n Orden de las matrices cuadradas A, L y U.
// A Matriz por factorizar. Como resultado de la factorizacin, en el
// regreso, A puede tener algunas filas intercambiadas.
// L Matriz triangular inferior.
// U Matriz triangular superior.
// info_cambiosf Vector que contiene informacin sobre los cambios de filas
// efectuados durante la factorizacin.
// exito Bandera cuyo valor indica el tipo de situacin detectada durante el
// proceso:
// exito = true factorizacin exitosa, A = LU
// exito = false no fue posible la factorizacin o A es singular.
//
real cero, auxiliar, suma
cero 1X10-12 // si |valor| < cero, se considera a valor como si fuera 0
for i = 1 to n do
info_cambiosfi i // cuando info_cambiosi = i, no se ha intercambiado la fila i
end for
13
for i = 1 to n do
Uii 1.0 // se asigna 1 a todos los elementos de la diagonal principal de U
end for
exito false
distinto_cero false
for i = 1 to n do // bsqueda de un L11 diferente de cero
if |Ai1| cero then
distinto_cero true
break
end if
end for
if not distinto_cero
return
end if
if i 1 then
for j = 1 to n do
auxiliar A1j // intercambio de las filas 1 e i
A1j Aij
Aij auxiliar
end for
auxiliar info_cambiosf1
info_cambiosf1 info_cambiosfi
info_cambiosfi auxiliar
end if
for i = 1 to n do // clculo de la primera columna de L
Li1 Ai1
end for
for j = 2 to n do // clculo de los elementos restantes de la primera fila de U
U1j A1j / L11
end for
for k = 2 to n 1 do
for p = k to n do // bsqueda de un Lii distinto de cero
distinto_cero false
suma 0.0
for j = 1 to k -1 do
suma suma + Lpj*Ujk
end for
auxiliar Apk suma
if |auxiliar| cero then
distinto_cero true
break
end if
end for
if not distinto_cero
return
end if
if p k then
14
for j = 1 to n do // intercambio de las filas k y p en A
auxiliar Akj
Akj Apj
Apj auxiliar
end for
for j = 1 to k -1 do // intercambio de las filas k y p en L
auxiliar Lkj
Lkj Lpj
Lpj auxiliar
end for
auxiliar info_cambiosfk // intercambio de los elementos con ndices
info_cambiosfk info_cambiosfp // k y p en info_cambiosf
info_cambiodfp auxiliar
end for
end if
for i = k to n do
suma 0.0
for j = 1 to k 1 do // clculo de la columna k de L
suma suma +Lij*Ujk
end for
Lik Aik suma
for i = k + 1 to n do // clculo de los elementos restantes de la fila k de U
suma 0.0
for j = 1 to k -1 do
suma suma + Lkj*Uji
end for
Uki (Aki suma) / Lkk
end for
end for
suma 0.0
for j = 1 to n 1 do // clculo del ltimo elemento de la diagonal principal de L
suma suma + Lnj*Ujn
end for
Lnn Ann suma
if |Lnn| < cero then
return
end if
exito true
return
end procedure LU

Ahora, el pseudocdigo de un procedimiento, en el cual dada la factorizacin A = LU,


resuelve el sistema Ax = (LU)x = b.

procedure solve_lu(n, L, U, info_cambiosf, b, x, solucion_unica)


integer n, i, j, auxiliar
real array (Lij)1:n x 1:n, (Uij)1:n x 1:n, (bi)1:n, (xi)1:n, (zi)1:n
15
boolean solucion_unica
//
// Dada la factorizacin A = LU, este procedimiento determina el vector solucin x de
// Ax = b.
// Descripcin de parmetros:
// n Orden de las matrices cuadradas L y U. Tambin es el
// nmero de incgnitas.
// L Matriz triangular inferior.
// U Matriz triangular superior.
// info_cambiosf Vector que contiene informacin sobre los cambios de filas
// efectuados en la factorizacin A = LU.
// b Vector de trminos del lado derecho del sistema lineal.
// x Vector solucin.
// solucion_unica Bandera cuyo valor indica la existencia de la solucin nica:
// solucion_unica = true x es la solucin nica
// solucion_unica = false el sistema no tiene solucin nica.
//
real cero, suma
cero 1X10-12 // si |valor| < cero, se considera a valor como si fuera cero
//
// Solucin de Lz = b
//
solucion_unica false
if |L11| < cero then
return
end if
z1 binfo_cambiosf(1) / L11 // sustitucin hacia adelante
for i = 2 to n do
if |Aii| < cero then
return
end if
suma 0.0
for j = 1 to i -1 do
suma suma + Lij*zj
end for
zi (binfo_cambiosf(i) suma) / Lii
end for
//
// Solucin de Ux = z
//
if |Unn| < cero then
return
end if
xn zn / Unn // sustitucin hacia atrs
for i = n 1 to 1 step -1 do
if |Uii| < cero then
return
16
end if
suma 0.0
for j = i + 1 to n do
suma suma + Uij*xj
end for
xi (zi suma) / Uii
end for
solucion_unica true
return
end procedure solve_lu

La matriz inversa, A-1, de una matriz A de n filas y n columnas se puede calcular


mediante la solucin de n sistemas lineales, ya que la i-sima columna de la matriz
inversa es la solucin del sistema Ax = ei , en el cual el vector columna ei es la i-sima
columna de la matriz identidad I. Como los n sistemas lineales comparten la misma
matriz de coeficientes A, es conveniente descomponer A como el producto LU y
emplear a L y U en la solucin de todos los sistemas.

3.4 Solucin de sistemas tridiagonales

Un caso especial y muy importante ocurre cuando en el sistema lineal Ax = b, la matriz


de coeficientes A es triadiagonal. Una matriz cuadrada es tridiagonal si sus elementos
distintos de cero se concentran en tres diagonales: la principal y las colocadas arriba
(superdiagonal) y abajo de ella (subdiagonal):

a11 a12
a21 a22 a23
a32 a33 a34
=

an1,n2 an1,n1 an1,n
[ an,n1 an,n ]

Los algoritmos de factorizacin se simplifican considerablemente cuando son


aplicados a una matriz tridiagonal. En la descomposicin LU de una matriz de este
tipo, se tienen (3n - 2) elementos diferentes de cero en A y si

l11 1 u12
l21 l22 1 u23
l32 l33 1 u34
= =

un1,n
[ ln,n1 ln,n ] [ 1 ]

17
entonces se tendrn 2n - 1 valores desconocidos en L y n - 1 en U, lo que da un total de
3n - 2 incgnitas. Ntese que la diagonal principal de U se considera formada de n
unos (reduccin de Crout).
Aplicando las propiedades de la multiplicacin matricial, es posible plantear las
siguientes ecuaciones

l11 = a11
u12 = a12 / l11
li,i-1 = ai,i-1 para i = 2,3,...,n

li,i = ai,i - li,i-1 ui-1,i para i = 2,3,...,n

ui,i+1 = ai,i+1 / lii para i = 2,3,...,n -1

De la tercera ecuacin se pueden encontrar los elementos de la subdiagonal de L, de la


cuarta se calculan los elementos restantes de la diagonal de L y con la quinta se
completa la superdiagonal de U.
El procedimiento para resolver el sistema Ax = b con A triadiagonal consiste en
encontrar la descomposicin LU de A con las frmulas arriba descritas , aplicar
entonces sustitucin hacia adelante para resolver Lz = b y por ltimo emplear
sustitucin hacia atrs para resolver Ux = z.
El sistema tridiagonal Ax = b tiene solucin nica si se cumplen las condiciones
indicadas en el terorema:

Supngase que A = {aij} es tridiagonal con ai,i-1 ai,i+1 0


para cada i = 2,3,...,n-1. Si |a11| > |a12|, |aii| > |ai,i-1|
+ |ai,i+1| para cada i = 2,3,...,n-1, y |ann| > |an,n-1|,
entonces el sistema Ax = b tiene solucin nica, A es no
singular y los elementos de la diagonal principal de L en
A = LU, calculados con reduccin de Crout, son todos
distintos de cero.

Ejemplo
Resuelva el sistema

3x1 + x2 = -1
2x1 + 4x2 + x3 = 7
2x2 + 5x3 = 9

mediante descomposicin LU especfica para un sistema tridiagonal.

l11 = a11 = 3
u12 = a12 / l11 = 1 / 3 = .33333
l21 = a21 = 2 l32 = a32 = 2
l22 = a22 - l21 u12 = 4 - 2*.33333 = 3.33334
u23 = a23 / l22 = 1 / 3.33334 = 0.30000
18
l33 = a33 - l32 u23 = 5 - 2*.30000 = 4.40000

El sistema Lz = b queda entonces

3z1 = -1
2z1 + 3.33334z2 = 7
2z2 + 4.40000z3 = 9

cuya solucin es z =[ -.33333, 2.30000, 1.00000]T. Para calcular la solucin x se


resuelve ahora el sistema Ux = z:

x1 + .33333x2 = -.33333
x2 + .30000x3 = 2.30000
x3 = 1.00000

Por lo tanto la solucin del sistema es x = [-0.99999, 2.00000, 1.00000]T.


La descomposicin LU para matrices triadiagonales junto con las sustituciones hacia
adelante y hacia atrs requieren solamente de (5n - 4) multiplicaciones o divisiones y
(3n - 3) adiciones o sustracciones.
Con el objeto de almacenar en memoria solamente las tres diagonales y el vector de
trminos del lado derecho, se recomienda ahora escribir el sistema lineal en trminos
de vectores:

b1 x1 + c1 x2 = d1
a2 x1 + b2 x2 + c2 x3 = d2
a3 x2 + b3 x3 + c3 x4 = d3
. . . = .
. . . = .
an-1 xn-2 + bn-1 xn-1 + cn-1 xn = dn-1
an xn-1 + bn xn = dn

La factorizacin LU queda entonces de la siguiente forma:

r1 1 w1
v2 r2 1 w2
v3 r3 1 w3
= =

wn1
[ vn rn ] [ 1 ]

La reduccin de Crout con las sustituciones hacia adelante y hacia atrs, en trminos de
los vectores a, b, c, d, r, v y w, queda como:

r1 = b1
w1 = c1 / r1

19
Para i = 2, 3,..., n 1

vi = ai

ri = bi vi wi-1

wi = ci / ri

vn = an
rn = bn - vn wn-1

z1 = d1 / r1
zi = (di - vi zi-1) / ri para i = 2, 3,..., n

x n = zn
xi = zi - wi xi+1 para i = n - 1, n -2,...,1

El procedimiento mostrado a continuacin resuelve un sistema tridiagonal expresado


en trminos de los vectores a, b, c y d. El algoritmo supone satisfechas las condiciones
que garantizan la solucin nica del sistema.

procedure tridiagonal(n, a, b, c, d, x)
integer n, i
real array (ai)1:n, (bi)1:n, (ci)1:n, (di)1:n, (xi)1:n, (vi)1:n, (ri)1:n, (wi)1:n, (zi)1:n
//
// Este procedimiento resuelve un sistema de ecuaciones tridiagonales mediante
// factorizacin LU.
// Descripcin de parmetros:
// n Nmero de ecuaciones y de incgnitas.
// a Vector que almacena a la subdiagonal del sistema, de n elementos. El
// primer elemento de este vector, a1, es igual a cero.
// b Vector que almacena a la diagonal del sistema, de n elementos.
// c Vector que almacena a la superdiagonal del sistema, de n elementos.
// El ltimo elemento de este vector, cn, es igual a cero.
// d Vector que almacena los trminos del lado derecho del sistema.
// x Vector solucin, de n elementos.
//
r1 b1
w1 c1 / r1
for i = 2 to n -1 do
vi ai
ri bi - vi*wi-1 // i-sima fila de L
wi ci / ri // (i+1)-sima columna de U
end for

20
vn an // n-sima fila de L
rn bn vn*wn-1
//
// solucin de Lz = b
//
z1 d1 / r1
for i = 2 to n do
zi (di vi*zi-1) / ri
end for
//
// solucin de Ux = z
//
xn zn
for i = n 1 to 1 step -1 do
xi zi wi*xi+1
end for
return
end procedure tridiagonal

3.5 Mtodos iterativos: Jacobi y Gauss Seidel

Dado el sistema lineal

a11 x1 + a12 x2 + a13 x3 + + a1n xn = b1


a21 x1 + a22 x2 + a23 x3 + + a2n xn = b2
a31 x1 + a32 x2 + a33 x3 + + a3n xn = b3
:
:
an1 x1 + an2 x2 + an3 x3 + + ann xn = bn

es factible despejar a x1 de la primera ecuacin, a x2 de la segunda ecuacin, a x3 de la


tercera y as sucesivamente:

x1 = ( b1 - a12x2 - a13x3 - .............. - a1nxn ) / a11

x2 = ( b2 - a21x1 - a23x3 - .............. - a2nxn ) / a22

x3 = ( b3 - a31x1 - a32x2 - .............. - a3nxn ) / a33


....
....
....
....

xn = ( bn - an1x1 - an2x2 - .............. - an,n-1xn-1 ) / ann

21
Entonces se parte de una estimacin inicial de la solucin, x(0), la cual se sustituye en
las ltimas ecuaciones para producir un nueva estimacin, x(1) :

x1(1) = ( b1 - a12x2(0) - a13x3(0) - .............. - a1nxn(0) ) / a11

x2(1) = ( b2 - a21x1(0) - a23x3(0) - .............. - a2nxn(0) ) / a22

x3(1) = ( b3 - a31x1(0) - a32x2(0) - .............. a3nxn(0) ) / a33


....
....
....
....

xn(1) = ( bn - an1x1(0) an2x2(0) - .............. an,n-1xn-1(0) ) / ann

El vector x(1) se sustituye en esas mismas ecuaciones para obtener ahora a x(2). Este
procedimiento se repite entonces para calcular las estimaciones x(3), x(4), x(5), .... . Lo
anterior se puede generalizar mediante las ecuaciones:

x1(k+1) = ( b1 - a12x2(k) - a13x3(k) - .............. - a1nxn(k) ) / a11

x2(k+1) = ( b2 - a21x1(k) - a23x3(k) - .............. - a2nxn(k) ) / a22

x3(k+1) = ( b3 - a31x1(k) - a32x2(k) - .............. a3nxn(k) ) / a33


....
....
....
....

xn(k+1) = ( bn - an1x1(k) an2x2(k) - .............. an,n-1xn-1(k) ) / ann

las cuales se pueden escribir en una forma ms compacta:

n (k)
bi j=1 aij xj
(k+1) ji
xi = , i = 1,2,3, , n
aii

Estas ecuaciones definen al mtodo de Jacobi o de los desplazamientos simultneos.


El proceso termina cuando se cumple alguno de estos criterios de convergencia:

1.- x(k+1) x(k) <

2.- x(k+1) x(k) / x(k+1) <

22
La tolerancia es fijada antes de iniciar los clculos. En ambos criterios, v, define la
norma de un vector v. La norma de un vector se calcula con cualquiera de estas dos
definiciones:

Las normas v2 y v del vector v = [v1,v2,v3, ...,vn]T estn


definidas por

v2 = (v12+v22+v32++vn2)1/2

v = max(|v1|,|v2|,|v3|, ,|vn|)

A v2 se le conoce como norma euclidiana del vector v.


La distancia entre dos vectores u y v es la norma de la diferencia u - v.

Ejemplo
Encuentre una solucin aproximada del sistema

10x1 - x2 =9
-x1 +10x2 - 2x3 = 7
-2x2 +10x3 = 6

con el mtodo de Jacobi. Inicie con x(0) = [0, 0, 0]T y tome a x(k+1) x(k)2 < 1X10-4
como criterio de convergencia.

Al aplicar el mtodo de Jacobi se generan las ecuaciones:

x1(k+1) = (9.00000 + 1.00000x2(k) ) / 10.00000


x2(k+1) = (7.00000 + 1.00000x1(k) + 2.00000x3(k) ) / 10.00000
x3(k+1) = (6.00000 + 2.00000x2(k) ) / 10.00000
que aplicadas a la estimacin inicial x(0) permiten calcular la nueva iteracin x(1)
x1(1) = (9.00000 + 1.00000x(0)) / 10.00000
x1(1) = (9.00000 + 1.00000*0.00000) / 10.00000 = 0.900000(1)
x2(1) = (7.00000 + 1.00000x1(0) + 2.00000x3(0)) / 10.00000
x2(1) = (7.00000 + 1.00000*0.00000)+ 2.00000*0.00000) / 10.00000 = 0.70000
x3(1) = (6.00000 + 2.00000x2(0)) / 10.00000
x3(1) = (6.00000 + 2.00000*0.00000) / 10.00000 = 0.60000
Con x(1) = [0.90000, 0.70000, 0.60000]T se checa la convergencia del mtodo:

x(1) x(0) 2 =((0.90000 - 0.00000)2 + (0.70000 - 0.00000)2 + (0.60000 - 0.00000)2)


x(1) x(0) 2 = 1.28841
Como la distancia entre las dos ltimas iteraciones, x(1) x(0)2, no es menor que
1X10-4 ser necesario calcular al menos una iteracin ms.

23
x1(2) = (9.00000 + 1.00000x(1) ) / 10.00000
x1(2) = (9.00000 + 1.00000*0.70000) / 10.00000 = 0.970000
x2(2) = (7.00000 + 1.00000x1(1) + 2.00000x3(1))/ 10.00000
x2(2) = (7.00000 + 1.00000*0.90000 + 2.00000*0.60000) / 10.00000 = 0.91000
x3(2) = (6.00000 + 2.00000x2(1)) / 10.00000
x3(2) = (6.00000 + 2.00000*0.70000) / 10.00000 = 0.74000
x(2) x(1) 2 = ((0.97000 - 0.90000)2 + (0.91000 - 0.70000)2 + (0.74000 - 0.60000)2 )
x(2) x(1) 2 = 0.26192

Iteracin k x1(k) x2(k) x3(k) x(k) x(k-1)2


0 0.00000 0.00000 0.00000
1 0.90000 0.70000 0.60000 1.28841
2 0.97000 0.91000 0.74000 0.26192
3 0.99100 0.94500 0.78200 0.05857
4 0.99450 0.95550 0.78900 0.01310
5 0.99555 0.95725 0.79110 0.00293
6 0.99573 0.95778 0.79145 0.00065
7 0.99578 0.95786 0.79156 0.00015
8 0.99579 0.95789 0.79157 0.00003

El siguiente es el pseudocdigo de un procedimiento que resuelve al sistema Ax = b


con el mtodo de Jacobi:

procedure Jacobi(n, A, b, xinicial, eps, maxiter, x, convergencia)


integer n, iter, i, j
real array (Aij)1:n x 1:n, (bi)1:n, (xinixial)1:n, (x)1:n
real eps, suma, norma2
integer maxiter
boolean convergencia
//
// Este procedimiento encuentra una solucin aproximada x del sistema lineal
// Ax = b con el mtodo iterativo de Jacobi.
// Descripcin de parmetros:
// n Nmero de ecuaciones y de incgnitas.
// A Matriz de coeficientes del sistema.
// b Vector de trminos del lado derecho del sistema.
// xinicial Vector de estimaciones iniciales.
// eps Mximo error permisible. Cuando la norma euclidiana de la
// diferencia entre las dos ltimas aproximaciones es menor que eps,
// se considera haber llegado a solucin.
// maxiter Nmero mximo de iteraciones.
// x ltima iteracin calculada. Si en convergencia se devuelve
// true, entonces x tambin es el vector solucin de Ax=b.
// convergencia Bandera cuyo valor indica si hubo convergencia:
// convergencia = true se alcanz la convergencia
// convergencia = false no se alcanz la convergencia.
24
//
convergencia true
for iter = 1 to maxiter do
for i = 1 to n do // clculo de la nueva aproximacin x
suma 0.0
for j = 1 to n do
if i j then
suma suma + Aij*xinicialj
end if
end for
xi (bi suma) / Aii
end for
suma 0.0
for i = 1 to n do
suma suma + (xi xiniciali)2
end for
norma2 sqrt(suma)
if norma2 < eps then // se checa la convergencia
return
end if
for i =1 to n do // preparacin de la siguiente iteracin
xiniciali xi
end for
end for
convergencia false
return
end procedure Jacobi

Al definir las matrices:

a11 0 0 a12 a1n


a22 a21 0 0
= =[ ] =[ ]

[ ann ] an1 an2 0 0

de tal forma que A = D + L + U, entonces

Ax = b

(D + L + U)x = b

Dx = b (L + U)x

x = D-1[b (L + U)x]

al incluir la notacin de iteraciones

25
x(k+1) = D-1[b (L + U)x(k)]

se obtiene un frmula del mtodo de Jacobi en trminos matriciales.


Una forma de acelerar la convergencia del mtodo de Jacobi pudiera ser utilizar una
estrategia de desplazamientos sucesivos: una vez calculada xi(k+1) , se sustituye
inmediatamente en la expresin para calcular xi+1(k+1) . Las ecuaciones por emplear
ahora son:

x1(k+1) = ( b1 - a12x2(k) - a13x3(k) - .............. - a1nxn(k) ) / a11

x2(k+1) = ( b2 - a21x1(k+1) - a23x3(k) - .............. - a2nxn(k) ) / a22

x3(k+1) = ( b3 - a31x1(k+1) - a32x2(k+1) - .............. a3nxn(k) ) / a33


....
....
....
....

xn(k+1) = ( bn - an1x1(k+1) an2x2(k+1) - .............. an,n-1xn-1(k+1) ) / ann

las cuales se pueden representar como:

(k+1) (k)
(k+1)
bi i1
=1 a ij xj + n=+1 aij xj
xi = , i = 1,2,3, , n
aii

Esta estrategia define al mtodo de Gauss Seidel o de los desplazamientos sucesivos.

Ejemplo
Resolver el sistema lineal del ejemplo anterior empleando Gauss Seidel. Considere el
mismo vector inicial y tambin idntico criterio de convergencia.

Las ecuaciones del mtodo de Gauss Seidel son:

x1(k+1) = (9.00000 + 1.00000x2(k) ) / 10.00000


x2(k+1) = (7.00000 + 1.00000x1(k+1) + 2.00000x3(k) ) / 10.00000
x3(k+1) = (6.00000 + 2.00000x2(k+1) ) / 10.00000

Comenzando con x(0) = [0, 0, 0]T, entonces

x1(1) = (9.00000 + 1.00000x2(0)) / 10.00000


x2(1) = (7.00000 + 1.00000x1(1) + 2.00000x3(0) ) / 10.00000
x3(1) = (6.00000 + 2.00000x2(1) ) / 10.00000
x1(1) = (9.00000 + 1.00000*0.00000) / 10.00000 = 0.90000

26
x2(1) = (7.00000 + 1.00000*0.90000 + 2.00000*0.00000) / 10.00000 = 0.79000
x3(1) = (6.00000 + 2.00000*0.79000) / 10.00000 = 0.75800
Con x(1) = [0.90000, 0.79000, 0.75800]T se checa la convergencia del mtodo:
x(1) x(0)2 = ((0.90000 - 0.00000)2 + (0.79000 - 0.00000)2 + (0.75800 - 0.00000)2)
x(1) x(0)2 = 1.41727
Como = 1X10-4, se requiere al menos de una iteracin adicional:

x1(2) = (9.00000 + 1.00000x2(1)) / 10.00000


x2(2) = (7.00000 + 1.00000x1(2) + 2.00000x3(1))/ 10.00000
x3(2) = (6.00000 + 2.00000x2(2)) / 10.00000
x1(2) = (9.00000 + 1.00000*0.79000) / 10.00000 = 0.97900
x2(2) = (7.00000 + 1.00000*0.97900 + 2.00000*0.75800) / 10.00000 = 0.94950
x3(2) = (6.00000 + 2.00000*0.94950) / 10.00000 = 0.78990

x(2) x(1)2 = ((0.97900 - 0.90000)2 + (0.94950 - 0.79000)2 + (0.78990 - 0.75800)2 )


x(2) x(1)2 = 0.18083

Iteracin k x1(k) x2(k) x3(k) x(k) x(k-1)2


0 0.00000 0.00000 0.00000
1 0.90000 0.79000 0.75800 1.41727
2 0.97900 0.94950 0.78990 0.18083
3 0.99495 0.95748 0.79150 0.01790
4 0.99575 0.95787 0.79157 0.00090
5 0.99579 0.95789 0.79158 0.00004

En general, Gauss Seidel es ms rpido que Jacobi.


Ahora, un procedimiento para resolver un sistema Ax = b con el mtodo de Gauss
Seidel:

procedure Gauss_Seidel(n, A, b, xinicial, eps, maxiter, x, convergencia)


integer n, iter, i, j
real array (Aij)1:n x 1:n, (bi)1:n, (xinixial)1:n, (x)1:n
real eps, suma, norma2
integer maxiter
boolean convergencia
//
// Este procedimiento encuentra una solucin aproximada x del sistema lineal
// Ax = b con el mtodo iterativo de Gauss-Seidel.
// Descripcin de parmetros:
// n Nmero de ecuaciones y de incgnitas.
// A Matriz de coeficientes del sistema.
// b Vector de trminos del lado derecho del sistema.
// xinicial Vector de estimaciones iniciales.
// eps Mximo error permisible. Cuando la norma euclidiana de la
// diferencia entre las dos ltimas aproximaciones es menor que eps,

27
// se considera haber llegado a solucin.
// maxiter Nmero mximo de iteraciones.
// x ltima iteracin calculada. Si en convergencia se devuelve
// true, entonces x tambin es el vector solucin de Ax=b.
// convergencia Bandera cuyo valor indica si hubo convergencia:
// convergencia = true se alcanz la convergencia
// convergencia = false no se alcanz la convergencia.
//
convergencia true
for iter = 1 to maxiter do
for i = 1 to n do // clculo de la nueva aproximacin x
suma 0.0
for j = 1 to i -1 do
suma suma + Aij*xj
end for
for j = i + 1 to n do
suma suma + Aij*xinicialj
end for
xi (bi suma) / Aii
end for
suma 0.0
for i = 1 to n do
suma suma + (xi xiniciali)2
end for
norma2 sqrt(suma)
if norma2 < eps then // se checa la convergencia
return
end if
for i =1 to n do // preparacin de la siguiente iteracin
xiniciali xi
end for
end for
convergencia false
return
end procedure Gauss_Seidel

Gauss Seidel tambin puede ser expresado en trminos matriciales:

x(k+1) = D-1[b Ux(k) Lx(k+1)]

en donde las matrices D, U y L se definen igual que en la frmula matricial de Jacobi.


La condicin suficiente pero no necesaria que garantiza la convergencia tanto de Jacobi
como de Gauss Seidel para cualquier vector inicial x(0) es que la matriz de coeficientes
del sistema sea estrictamente diagonal dominante. A continuacin, la definicin de una
matriz estrictamente diagonal dominante.

28
Una matriz A de n x n es estrictamente diagonal dominante
si y slo si

n
|aii| > |aij| , i=1,2,3,,n
j=1
ji

De acuerdo con esta definicin, la matriz de coeficientes de los dos ltimos ejemplos
es estrictamente diagonal dominante ya que

|10| > |-1| + |0|

|10| > |-1| + |-2|

|10| > |0| + |-2|

Esto asegura la convergencia de ambos mtodos para cualquier estimacin inicial x(0).

29

Vous aimerez peut-être aussi