Académique Documents
Professionnel Documents
Culture Documents
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.
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
Ri Rj
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:
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:
-3R2 + R3 R3
x1 - x2 + x3 = - 4
x2 - 2x3 = 8
5x3 = - 5
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
Multiplicaciones o divisiones: n3 / 3 + n2 n / 3
Sumas o restas: n3 / 3 + n2 /2 - 5n / 6
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
Ejemplo
Resuelva el sistema
x1 + 3x2 - 2x3 = 7
4x1 - x2 + 3x3 = 10
-5x1 + 2x2 + 3x3 = 7
-(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:
R2 R3
-(0.60000 / 3.40000) R2 + R3 R3
Entonces la matriz aumentada al final queda as:
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
A = LU
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:
Para k = 2,3, , n 1
k1
Ejemplo
Resolver el sistema
3x1 - x2 + 2x3 = 12
x1 + 2x2 + 3x3 = 11
2x1 - 2x2 - x3 = 2
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.
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
zn
xn = = zn
unn
zi nj=i+1 uij xj
xi = , i = n 1, n 2, ,1
uii
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:
a11 a12
a21 a22 a23
a32 a33 a34
=
an1,n2 an1,n1 an1,n
[ an,n1 an,n ]
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
Ejemplo
Resuelva el sistema
3x1 + x2 = -1
2x1 + 4x2 + x3 = 7
2x2 + 5x3 = 9
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
3z1 = -1
2z1 + 3.33334z2 = 7
2z2 + 4.40000z3 = 9
x1 + .33333x2 = -.33333
x2 + .30000x3 = 2.30000
x3 = 1.00000
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
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
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
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) :
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:
n (k)
bi j=1 aij xj
(k+1) ji
xi = , i = 1,2,3, , n
aii
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:
v2 = (v12+v22+v32++vn2)1/2
v = max(|v1|,|v2|,|v3|, ,|vn|)
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.
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
Ax = b
(D + L + U)x = b
Dx = b (L + U)x
x = D-1[b (L + U)x]
25
x(k+1) = D-1[b (L + U)x(k)]
(k+1) (k)
(k+1)
bi i1
=1 a ij xj + n=+1 aij xj
xi = , i = 1,2,3, , n
aii
Ejemplo
Resolver el sistema lineal del ejemplo anterior empleando Gauss Seidel. Considere el
mismo vector inicial y tambin idntico criterio de convergencia.
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:
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
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
Esto asegura la convergencia de ambos mtodos para cualquier estimacin inicial x(0).
29