Sunteți pe pagina 1din 37

I.

Algebra Lineal

Una gran cantidad de problemas de fsica, qumica e ingeniera se reducen


a resolver ecuaciones simultneas lineales. Hay tambin aplicaciones donde
el conjunto de ecuaciones es no lineal. Ambos casos se tratan numricamen-
te y tienen repercusiones en otras areas de matemticas aplicadas como op-
timizacin y mtodos de solucin numrica de ecuaciones diferenciales. De-
jaremos para otro captulo el tratamiento de problemas no linales y tratare-
mos en este el problema lineal.
La forma estndar del problema a resolver es:

a 11 x 1 a 12 x 2 a 1n x n c1
a 21 x 1 a 22 x 2 a 2n x n c2
(1)
a n1 x 1 a n2 x 2 a nn x n cn

Estas ecuaciones deben ser linealmente independientes para que haya una
solucin.
En forma compacta el problema se escribe

Ax c

donde A a ij ; x x1, x2, , xn y c c1, c2, , cn


El apstrofe indica transpuesto conjugado y es el comando usado por
Matlab.

Eliminacin Gaussiana.
El proceso de sumar o restar filas multiplicadas o divididas por escalares
tal de obtener ceros
por debajo de la diagonal principal lleva el nombre de eliminacin de Gauss.
Supongamos que la matriz aumentada (ltima columna es el vector c) es:

1 1 1 1 2
1 1 1 1 0
2 1 1 2 9
3 1 2 1 7

para obtener ceros en la primera columna, procedemos as:

F1 F 1 /a 11 1 1 1 -1 2
F2 F2 F1 0 -2 -2 2 -2
F3 F 3 2F 1 0 -1 -3 4 5
F4 F 4 3F 1 0 -2 -1 2 1

En forma similar procedemos a eliminar los coeficientes -1 y -2 de la segun-


da columna y a normalizar la segunda ecuacin tal de obtener 1 en la diago-
nal.

F1 F1 1 1 1 -1 2

1
F2 F2/ 2 0 1 1 -1 1
F3 F3 F2 0 0 -2 3 6
F4 F 4 2F 2 0 0 1 0 3

siguiendo con el procedimiento,

F1 F1 1 1 1 -1 2
F2 F2 0 1 1 -1 1
3
F3 F3 / 2 0 0 1 2
-3
3
F4 F4 F3 0 0 0 2
6

finalmente, multiplicamos la ltima fila por 2/3 y obtenemos la matriz triangu-


lar buscada

1 1 1 -1 2
0 1 1 -1 1
3
0 0 1 2
-3
0 0 0 1 4

escribiendo en forma convencional, el problema reducido es:

x1 x2 x3 x4 2
x2 x3 x4 1
x 3 32 x 4 3
x4 4

Aplicando el proceso de sustitucin regresiva (usamos x 4 para obtener x 3 ,


luego usamos x 3 y x 4 para obtener x 2 y asi sucesivamente) obtenemos el
resultado
x1 1
x2 2
x3 3
x4 4
.
Uno de los problemas que puede darse, es que algn elemento en la diago-
nal principal sea cero. La fila con la que uno est trabajando y que ideal-
mente se puede normalizar, se llama fila pivote y el elemento a ii se deno-
mina elemento pivote.
Afortunadamente podemos cambiar el orden de las filas y asi evitar un cero
en la diagonal. En el proceso de eliminacin Gaussiana, si uno encuentra un
cero en la diagonal debe intercambiar esa fila con una inferior que no tenga
un cero en esa columna. Adems es muy importante dejar como fila pivote
la que posea el elemento pivote ms grande.
Esto hace ms exacta (menos errnea) la solucin. El procedimiento es ge-
neralmente implementado en todos los programas de eliminacin Gaussiana
y lleva el nombre de pivoteo parcial. Cuando se intercambian columnas y fi-
las tenemos lo que se llama pivoteo total. El pivoteo total desgraciadamente
complica el programa y la exactitud adicional ganada no justifica su imple-
mentacion. El lector debe recordar que intercambiar filas solo produce un
cambio de signo en el clculo del determinante. El nmero de cambios de
filas se puede contabilizar sin dificultad.
Cuando cambiamos columnas en cambio, hay que incorporar al final una

2
funcin que reordene las incgnitas en el orden original.

Gauss-Jordan
Aplicando el procedimiento de eliminacin Gausiana tal que se eliminen tam-
bin los elementos por arriba de la diagonal principal, se produce una matriz
diagonal (Identidad si se normaliza), que facilita el despeje de las incgnitas.

Matrices Elementales
Las operaciones comunes realizadas en las filas de una matriz para transfor-
marla en una triangular o diagonal son:
a) Intercambio de filas
b) Multiplicacin de una fila por un escalar
c) Sustitucin de una fila por la suma de esta con alguna otra fila
Estas operaciones se pueden realizar multiplicando por la izquierda la matriz en
cuestin por ciertas matrices elementales que realizan en la matriz original el cam-
bio deseado.
Algunos ejemplos:

1 0 0 b 11 b 12 b 13 b 11 b 12 b 13
0 m 0 b 21 b 22 b 23 mb 21 mb 22 mb 23 mF 2
0 0 1 b 31 b 32 b 33 b 31 b 32 b 33

multiplicacin por un escalar.

1 0 0 b 11 b 12 b 13 b 11 b 12 b 13
m 1 0 b 21 b 22 b 23 mb 11 b 21 mb 12 b 22 mb 13 b 23
0 0 1 b 31 b 32 b 33 b 31 b 32 b 33

mF 1 F2

1 0 0 b 11 b 12 b 13 b 11 b 12 b 13
0 0 1 b 21 b 22 b 23 b 31 b 32 b 33 P 23 B
0 1 0 b 31 b 32 b 33 b 21 b 22 b 23

permutacin de filas.

Resumiendo, podemos decir que las operaciones elementales con renglones son:

a) Multiplicar el renglon i por un nmero c diferente de cero. Ri cR i


b) Sumar un mltiplo del rengln i al rengln j. Rj R j cR i
c) Permutar (intercambiar) los renglones i y j. Ri Rj

Hemos hablado de pivoteo parcial y hemos trabajado con las filas de la matriz.
Cuando las matrices elementales se multiplican por la derecha, las operaciones
elementales se realizan con las columnas.
Es interesante recordar adems que, cualquier matriz elemental se puede generar
a partir de la matriz Identidad I n y una sola operacin elemental. Adems los in-
versos de las matrices elementales resultan ser muy similares en forma a la matriz

3
elemental.
Si el conjunto de matrices elementales que transforman una matriz A en la matriz
Identidad las denominamos

E EmEm 1. . . . . . . . . . . E1

y el problema matricial aumentado es

E A|b I|x

entonces EA I y Eb x, resulta que la inversa de A es E,

1
E A
adems

det EA det I

det E . det A 1

det A 1
det E

Ejercicio:
Determinar los valores del determinante de las distintas matrices elementales: per-
mutadora, multiplicadora por factor m, y matriz elemental del tipo de sustitucin.

Inverso de una matriz


Imaginemos que formamos una matriz aumentada formada por la matriz original
y la matriz Identidad.

a 11 a 12 a 13 a 14 1 0 0 0
a 21 a 22 a 23 a 24 0 1 0 0
| (2)
a 31 a 32 a 33 a 34 0 0 1 0
a 41 a 42 a 43 a 44 0 0 0 1

A continuacin, imaginemos que aplicamos el proceso de eliminacin de Gauss-


Jordan a esta matriz aumentada. La matriz aumentada resultante es

4
1 0 0 0 b 11 b 12 b 13 b 14
0 1 0 0 b 21 b 22 b 23 b 24
| (3)
0 0 1 0 b 31 b 32 b 33 b 34
0 0 0 1 b 41 b 42 b 43 b 44

o sea hemos realizado ciertas operaciones que han generado la matriz identidad
al lado izquierdo y al mismo tiempo la matriz del lado derecho que originalmente
era la matriz Identidad, se ha transformado en una nueva matriz b ij . Esta matriz
(del lado derecho) es la matriz inversa de a ij , como se constata a continuacin
Si b ij a ij 1 , multiplicando ec. (2) por b ij , obtenemos ec. (3)

b ij . a ij | I I | b ij (4)

Es importante entender que el proceso para determinar el inverso de una matriz,


requiere de ms trabajo que el obtener la solucin del sistema simultneo de
ecuaciones.
Ec. (2) puede considerarse como cuatro problemas convencionales de ecuacio-
nes simultneas.
Una sola eliminacin Gaussiana en la matriz A sera suficiente, para luego realizar
sustituciones regresivas y obtener (una a la vez) las columnas de la matriz inversa.
Escribamos esta ecuacin de la siguiente manera:

a 11 a 12 a 13 a 14 b 11 1
a 21 a 22 a 23 a 24 b 21 0
(5a)
a 31 a 32 a 33 a 34 b 31 0
a 41 a 42 a 43 a 44 b 41 0

(5b)...(5c)

a 11 a 12 a 13 a 14 b 14 0
a 21 a 22 a 23 a 24 b 24 0
(5d)
a 31 a 32 a 33 a 34 b 34 0
a 41 a 42 a 43 a 44 b 44 1

Ecuacion (5a) entrega como resultado la primera columna de la matriz inversa.


El esquema se repite usando como trmino no homogneo (a la derecha del )
las columnas de la matriz Identidad. Cuando todas las columnas de b ij se han
obtenido, observamos que estas ecuaciones (5a)...(5d) representan

a ij b ij I (6)

Descomposicin LU
Se conoce por este nombre (del ingls L lower (inferior) U upper (supe-
rior)) al proceso por el cual transformamos la matriz original en el producto
de una matriz triangular inferior por una triangular superior. Existen varios
algoritmos que no son sino ligeras variantes del esquema general. Estudia-
remos a continuacin los tres ms populares. Mtodo de Crout, mtodo

5
de Doolitle y el mtodo de Cholesky que se aplica a matrices simtricas.
Matrices triangulares con ceros por arriba (o por abajo) de la diagonal
principal juegan un rol importante en algebra lineal, ya que aparecen con
frecuencia y adems como ya hemos visto, simplifican enormemente el
proceso de solucin de sistemas simultneos de ecuaciones.

Consideremos el siguiente problema: Ax b LTx b (7)

L es una matriz triangular inferior, y T (usaremos T en lugar de U) es una


matriz triangular superior con unos en la diagonal principal.
Observamos que en ec. (7) Tx es un vector de las mismas dimensiones
que el vector b.
Por lo tanto, las ecuaciones que aparecen a continuacin reemplazan a
la ec. (7) y son ms simples de resolver.

Lc b (8a)

Tx c (8b)

Si L y T se conocen, el problema original se transforma en dos problemas


sencillos que se resuelven con facilidad ya que ambos problemas matricia-
les contienen matrices triangulares.
Primero se resuelve ec. (8a) y con el valor de [c] calculado se resuelve ec.
(8b).

Mtodo de Crout
Empecemos escribiendo las matrices aumentadas correspondientes a las
ecs. (7) y (8):

a 11 a 12 a 13 b1 L 11 0 0 1 T 12 T 13 c1
a 21 a 22 a 23 | b 2 L 21 L 22 0 0 1 T 23 | c 2 (9)
a 31 a 32 a 33 b3 L 31 L 32 L 33 0 0 1 c3

Muliplicando ls matrices de la derecha e igualando cada trmino al trmino


de la izquierda correspondiente, obtenemos

L 11 a 11 T 12 a 12 /L 11
L 21 a 21 ; L 22 a 22 L 21 T 12 ;
L 31 a 31 L 32 a 32 L 31 T 12
(10)
T 13 a 13 /L 11 c1 b 1 /L 11
T 23 a 23 L 21 T 13 /L 22 ; c2 b 2 L 21 c 1 /L 22
L 33 a 33 L 31 T 13 L 32 T 23 c3 b 3 L 31 c 1 L 32 c 2 /L 33

Es importante notar que el orden del clculo de estos trminos es de izquier-


da a derecha y de arriba hacia abajo. Es la nica forma de tener a la derecha
del signo , los trminos previamente calculados.
Las incgnitas se obtienen de la ec. (8b). Sustitucin regresiva nos da

x3 c3
x2 c2 T 23 x 3 (11)

6
x1 c1 T 13 x 3 T 12 x 2

Para el caso general de una matriz n x n, las matrices L, T, c estan dadas por
j 1
L ij a ij L T
k 1 ik kj
, i j, j j 2, 3. . . . . . . . , n

1 i 1
T ij L ii
a ij L T
k 1 ik kj
, i j, j 2, 3, . . . . . , n
(12)
1 i 1
ci L ii
bi L c ,
k 1 ik k
i 2, 3, . . . . . . , n

T ij a ij /a 11 , i 1

L ij a i1, j 1

c1 b 1 /L 11

adems: xn cn;
n
xj cj T x,
r j 1 jr r
j n 1, n 2, . . . . . , 1

esta ltima ecuacin muestra la sustitucin regresiva.

Mtodo de Doolittle
Una variante del mtodo de Crout es el siguiente

a 11 a 12 a 13 b1 1 0 0 T 11 T 12 T 13 c1
a 21 a 22 a 23 | b 2 L 21 1 0 0 T 22 T 23 | c 2 (13)
a 31 a 32 a 33 b3 L 31 L 32 1 0 0 T 33 c3

Se deja como ejercicio el buscar el conjunto de ecuaciones correspondien-


tes a las ecs. (12). La implementacin en Matlab de la descomposicion LU
es usando el mtodo de Doolittle. Adems para lograr ms exactitud, se
puede multiplicar la ecuacin original por una matriz elemental de permuta-
cin tal de tener los ms grandes elementos pivotes (diagonales). O sea

PAx Pb
LUx Pb

La funcin lu se invoca as

[l,u,p] lu(A)

como LU PA, A se puede recuperar haciendo A P 1 LU

Emplee el comando help y estudie triu, trril .

Mtodo de Cholesky
Cuando la matriz es simtrica ( A A ), la descomposicin LU se simplifi-

7
ca ya que

A LU A UL

esto indica L U y U L

por lo tanto, el problema a resolver es

a 11 a 12 a 13 b1 u 11 0 0 u 11 u 12 u 13 c1
a 21 a 22 a 23 | b 2 u 12 u 22 0 0 u 22 u 23 | c 2 (14)
a 31 a 32 a 33 b3 u 13 u 23 u 33 0 0 u 33 c3

Ec. (14) es equivalente a la ec. (9), y seguimos igual procedimiento para determi-
nar los elementos u ij . Igualando trminos correspondientes, obtene-
mos

u 11 a 11 ; u 22 a 22 u 212 ; c1 b 1 /u 11
u 12 a 12 /u 11 ; u 23 a 23 u 12 u 13 /u 22 ; c2 b 2 c 1 u 12 /u 22 (15)
u 13 a 13 /u 11 u 33 a 33 u 213 u 223 c3 b 3 c 1 u 13 c 2 u 23 /u 33

la solucin [x] se obtiene por sustitucin regresiva de

u 11 u 12 u 13 x1 c1
0 u 22 u 23 x2 c2 (16)
0 0 u 33 x3 c3

Para un sistema n x n el mtodo de Cholesky se puede implementar por


simple generalizacin de ec. (15).

u 11 a 11 , c 1 b 1 /u 11
u 1j a 1j /u 11 , i 2, 3, . . . . . . . , n
i 1 2
u ii a ii u , i 2, 3, . . . . . , n
k 1 ki
i 1
u ij a ij u u /u ii , j
k 1 ki kj
2, 3, . . . . , n (17)
i 1
ci bi u c /u ii ,
k 1 ki k
i 2, 3, . . . . , n
xn c n /u nn
n
xi ci u x /u ii , i
k i 1 ik k
n 1, . . . . . , 1
u ij 0 para i j

Notar que de acuerdo a ecs. (14) y (16) i j


El mtodo de Cholesky es aplicable solamente a matrices simtricas y que
a la vez sean positivas definidas Esto es si se desea preservar el clculo
con nmeros reales. Se dice que una matriz es positiva definida cuando

8
a 11 a 12 a 1n x1
a 21 a 22 a 2n x2
x Ax x1, x2, . . . . . . . , xn 0 (18)

a n1 a n2 a nn a nn

para todo vector x 0


Ejemplo: sea
2 1 0
A 1 2 1
0 1 2

2 1 0 x1 2x 1 x2
x Ax x1, x2, x3 1 2 1 x2 x1, x2, x3 x1 2x 2 x3
0 1 2 x3 x2 2x 3

2x 21 2x 1 x 2 2x 22 2x 2 x 3 2x 23

arreglando trminos

x Ax x 21 x 21 2x 1 x 2 x 22 x 22 2x 2 x 3 x 23 x 23
x 21 x 1 x 2 2 x 2 x 3 2 x 23 0
a no ser que x 1 , x 2 , x 3 0

Esta definicin de matriz positiva definida es engorrosa de aplicar a matrices


de rdenes superiores a tres. Por fortuna existen criterios ms fciles de usar
y que permiten determinar si una matriz es positiva definida o no.
Para que una matriz A sea positiva definida:

1) A no debe ser singular


2) a ii 0, i 1, 2, . . . . , n
3) mx 1 k, j n |a kj | mx 1 i n |a ii |
4) a ij 2 a ii a jj para cada i j

Una regla que reemplaza a estos cuatro criterios es: Una matriz A es positi-
va definida si y solo si sus primeras submatrices principales tienen determi-
nante positivo. Empleando la misma matriz del ejemplo anterior tenemos

det A 1 det 2 2 0

2 1
det A 2 det 3 0
1 2

2 1 0
det A 3 det 1 2 1 24 1 1 2 4 0
0 1 2

9
Emplee el comando help y estudie la funcin chol

Comentarios finales.
Los sistemas con matrices triangulares son muy fciles de resolver. Esa es la razn
por la que el mtodo LU es tan popular. Veamos el siguiente ejemplo.
Sea U una matriz triangular superior, queremos determinar x en el siguiente
problema.

Ux b
un algoritmo para obtener x (empezamos por la ltima fila) es:
x zeros n, 1
for k n: 1:1
j k 1 : n;
xk bk U k, j x j /U k, k ;
end
El algoritmo para resolver un sistema triangular con matriz triangular inferior L, es
similar (empezamos en la primera fila).
Sistemas Tridiagonales
Como su nombre lo indica, matrices tridiagonales poseen solamente tres
diagonales,la diagonal principal, la diagonal superior y la diagonal inferior.
Hay tantos ceros en estas matrices que resulta ineficiente almacenarlos,
siendo que sabemos de antemano que son ceros. Imaginemos una matriz
100x100 con solo tres diagonales (3n 2 elementos) y el resto de la ma-
triz con ceros (n 2 3n 2 elementos), o sea 10,000-298 9,702 ceros.
Porcentualmente, estaramos diciendo que el 97 % de la matriz son ceros.
Basta reconocer que la matriz es tridiagonal para no necesitar guardar esos
ceros y usar espacio de memoria en el computador.
Aplicando el mtodo de Crout a

d1 t1 0 0 x1 b1
l1 d2 t2 0 x2 b2
(19a)
0 l2 d3 t3 x3 b3
0 0 l3 d4 x4 b4

Llamando a esta matriz tridiagonal [Tri] el problema es determinar la des-


composicin

Tri x b L Ux b (19b)
Como ya hemos analizado este problema, parecera una simple aplicacin
ms de la descomposicin LU. Sin embargo en el presente caso no cono-
cemos L ni tampoco U y queremos llegar a frmulas particulares para resol-
ver este problema de una forma eficiente. Las matrices aumentadas corres-

10
pondientes a las ecuaciones anteriores son:
Tri|b L U|B (19c)
Obviamente de (19b) se concluye que
1
Ux L b B (19d)
Esta ltima ecuacin muestra que solo necesitamos resolver una sola ecua-
cin para determinar x por sustitucin regresiva. Pero para eso debemos
determinar en forma analtica las matrices L, U y el vector B.

empezamos con las matrices aumentadas del problema (ec. 19c):

d1 t1 0 0 b1 D1 0 0 0 1 T1 0 0 B1
l1 d2 t2 0 b2 L2 D2 0 0 0 1 T2 0 B2
| |
0 l2 d3 t3 b3 0 L3 D3 0 0 0 1 T3 B3
0 0 l3 d4 b4 0 0 L4 D4 0 0 0 1 B4

(20)

multiplicando las matrices de la derecha e igualando con los trminos corres-


pondientes de la izquierda, obtenemos

D1 d1, T1 t 1 /D 1 , T2 t 2 /D 2 , T3 t 3 /D 3 ,
L2 l2, D2 d2 T1L2, D3 d3 L3T2, D4 d4 T3L4,
L3 l3, L4 l4,
(21)
B1 b 1 /D 1 , B 2 b2 B 1 L 2 /D 2 , B 3 b3 B 2 L 3 /D 3 ,
B4 b 4 B 3 L 4 /D 4

Observamos que la matriz triangular inferior es idntica a la matriz original.


Generalizando:

D1 d1,
Li li, i 2, . . . . . . . . . , n
T i t i /D i , i 1, . . . . . . . . . , n 1 (22)
Di di Ti 1Li, i 2, . . . . . . . . , n
B 1 b 1 /D 1 ,
Bi b i B i 1 L i /D i , i 2, . . . . . . . . , n

El orden en el que calculan estos trminos no es arbitrario. Notar que a la


derecha del signo se deben tener los valores de los elementos ya calcula-
dos.
Finalmente, aplicamos sustitucin regresiva a

1 T1 0 0 x1 B1
0 1 T2 0 x2 B2
0 0 1 T3 x3 B3
0 0 0 1 x4 B4

11
y obtenemos

xn Bn
xi Bi Tixi 1, i n 1, n 2, . . . . . . . . . . , 1 (23)

Estudie la funcin diag

Mtodos Iterativos
Los mtodos de solucin de ecuaciones simultneas basados en la aplica-
cin de operaciones elementales (eliminacin) se vuelven costosos desde
el punto de vista de la memoria usada en el computador y adems se vuel-
ven inexactos ya que al crecer el orden de la matriz, se incrementa el nme-
ro de operaciones y el error de redondeo se propaga, haciendo el proceso
ineficiente y aproximado. En la solucin de ecuaciones diferenciales parcia-
les es comn encontrar matrices de orden superior a cien y en varias aplica-
ciones se encuentran ecuaciones de orden mil o mayor. En estos casos re-
sulta ms efectivo y exacto emplear un mtodo iterativo cuya exactitud se
puede precisar con anticipacin.

Para empezar, elijamos un ejemplo sencillo que ayude a entender la tcni-


ca denominada iteracin.
Un problema de rango tres es

a 11 a 12 a 13 x1 b1
a 21 a 22 a 23 x2 b2 (24)
a 31 a 32 a 33 x3 b3

despejando x 1 de la primera ecuacin, x 2 de la segunda y x 3 de la terce-


ra, obtenemos

a 12 a 13 b1
x1 0 a 11 a 11 x1 a 11
a 21 a 23 b2
x2 a 22 0 a 22 x2 a 22 (25)
a 31 a 32 b3
x3 a 33 a 33 0 x3 a 33

esta ecuacin se puede escribir en forma compacta como

x Bx c (26)

Observando ec. (26) vemos que tenemos el vector x (incgnita) a ambos


lados de la ecuacin. El proceso llamado iteracin sucesiva, consiste en
estimar un valor del vector x a la derecha de la ecuacin y calcular ec.
(26) para obtener un estimado ms exacto.
Este resultado se puede usar nuevamente a la derecha de la ecuacin para
obtener un resultado mejorado, y as sucesivamente.
Si usamos k 1, 2, 3,....como el ndice de iteracin, la ec.(26) se escribe
ms claramente as

12
k 1 k
x Bx c, k 0, 1, 2, . . . . . . .
(27)
x 0
x 10 , x 20 , . . . . . . x n0 es el vector inicial

El proceso se detiene cuando el error entre dos iteraciones sucesivas es me-


nor que un cierto valor prefijado. Por ejemplo 10 4 , 10 6 .
La ec. (27) recibe el nombre de iteracin de Jacobi o mtodo de desplaza-
mientos simultneos. Los nuevos valores se reemplazan todos (simultnea-
mente) al lado derecho de la ecuacin en la iteracin siguiente.
En forma explcita, la ec. (27) es
1 n
x ki 1
a ii bi j 1 a ij x kj , 1 i n (28)
j i

Iteracin de Gauss-Seidel (desplazamientos sucesivos)


Este mtodo es superior al de Jacobi ya que converge al resultado en un
menor nmero de iteraciones. Los valores de la (k 1)-sima iteracin se
reemplazan para calcular los faltantes de la misma iteracin, es decir ape-
nas se tiene un valor calculado (no estimado) se lo emplea para calcular
los otros elementos del vector x. La ec.(25) se transforma en

1
x k1 1
a 11 b1 a 12 x k2 a 13 x k3
k 1 1
x x k2 1
a 22 b2 a 21 x k1 1
a 23 x k3 (29)
x k3 1 1
a 33 b3 a 31 x k1 1
a 32 x k2 1

como podemos ver el valor de x k1 1 calculado en la primera ecuacin, se


lo emplea en la segunda ecuacin. En la tercera ecuacin se emplean los
valores ya calculados en las dos ecuaciones anteriores. Por este razn a
este mtodo se lo conoce tanbin con el nombre de mtodo de las sus-
tituciones sucesivas.
Para un sistema de n-ecuaciones:

1 i 1 n
x ki 1
a ii bi a xk 1
j 1 ij j
a xk
j i 1 ij j
, para 1 i n (30)

esta ecuacin tambin se puede escribir

1 i 1 n
x ki 1
a ii bi l xk 1
j 1 ij j
u xk
j i 1 ij j
, para 1 i n (31)

donde l ij y u ij son las partes triangular inferior y triangular superior de


a ij respectivamente. Una ligera variante de ec. (31) es la que se ha imple-
mentado en el programa G_Seidel.m. Se simplifican las ecuaciones si se
normaliza cada ecuacin, dividiendo cada una por el trmino en la diago-
nal.

Convergencia
Los mtodos de Jacobi y Gauss-Seidel convergen si
n
|a ii | j 1 |a ij |; 1 i n
j i

13
y (32)
n
|a ii | i 1 |a ij |; 1 j n
j i

en palabras, estas expresiones dicen que la convergencia se asegura si el


trmino diagonal es mayor en valor absoluto que la suma de los valores
absolutos de los elementos en esa fila y en esa columna. Aunque estas
condiciones aseguran convergencia (son suficientes) no son estrictamen-
te necesarias. Cabe recordar que para tener una matriz diagonal domi-
nante, se pueden reordenar las filas (pivoteo parcial) y por lo menos
satisfacer la primera de estas relaciones.

Aceleracin de Covergencia
La velocidad con que estos procesos iterativos llegan a la solucin, depen-
de esencialmente del tipo de matriz, de su tamao y de lo acertada que sea
la seleccin de los valores iniciales. En sistemas de dimensiones mayores
que cien resulta ventajoso emplear el proceso de sobrerelajacin que con-
siste en exagerar la correccin de las incgnitas, en cada paso (sobrerelajar).
En cada iteracin obtenemos un nuevo valor del vector x que se relaciona
con su valor previo, de acuerdo a

k 1 k k
x x r (33)

el trmino r k representa el residuo (error) . Esperamos que cuando k ,


|r k | 0.
Si hacemos el error ms grande de lo que realmente es, la correccin ser
tambin mayor y asi se llegara al resultado en menor nmero de iteraciones.
O sea
xk1 x k wr k (34)

Aplicando este esquema al mtodo de Jacobi y de Gauss-Seidel, obtenemos


n
x ki 1
x ki w bi a xk
j 1 ij j
1 i n (35)

i 1 n
x ki 1
x ki w bi l xk 1
j 1 ij j
x ki u xk
j i 1 ij j
1 i n (36)

Ec. (36) es la iteracin de Gauss-Seidel y por simplificar la programacin


se ha normalizado cada ecuacin original por los trminos a ii . Las matrices
l ij y u ij son las partes triangular inferior y superior de la matriz a ij /a ii .
El vector [b] ha sido igualmente normalizado.
El valor del parmetro w es generalmente 1 (sobrerelajar), pero puede ser
1 en cuyo caso se habla de subrelajar. Si w 1, las ecs. (35) y (36) equi-
valen a las ecs.(28) y (31) respectivamente.

Mejorando un Inverso Aproximado


El inverso de una matriz no singular A puede mejorarse, si este inverso no es
exacto.
Supongamos que hemos obtenido un inverso aproximado de A

14
1
D0 A

Esta aproximacin puede mejorarse usando el mtodo de aproximacioes su-


cesivas. Una medida del error puede ser la diferencia

F0 I AD 0

Si F 0 0, enronces claramente D 0 A 1 , y si el mdulo de los elemen-


tos de la matriz F 0 son pequeos, entonces las matrices A 1 y D 0 son
practicamente iguales.
Construimos las aproximaciones sucesivas por medio de la frmula

Dk Dk 1 Dk 1Fk 1

(k 1, 2, 3,.......)
El error correspondiente es

Fk I AD k

Estimemos la rapidz de convergencia de las aproximaciones sucesivas. Te-


nemos

F1 I AD 1 I A D0 D0F0 I AD 0 I F0

I I F0 I F0 I I F 20 F 20

en forma similar

F2 F 21 F 40

y en general

Fk F 20 k

Veremos en la siguiente seccin, como a partir de un inverso aproximado


muy particular, Pan y Reif han desarrollado un mtodo iterativo para deter-
minar el inverso de una matriz no singular, arbitraria.
El mtodo de Pan-Reif
Un nuevo mtodo para la inversin de matrices fue descubierto en 1985 por
Victor Pan del Departamento de Computacin de la universidad de Nueva
York y John Reif del Laboratorio de Computacin Aitken, perteneciente a

15
la Universidad de Harvard. Por ser un mtodo iterativo de increible sencillz,
merece ser estudiado.
Las ecuaciones que sirven de base al mtodo se dan a continuacin.
Llamemos B a una aproximacin del inverso de A. B A 1
Una matriz error es
EB I BA
1
A A 1B 1 B BA 1 B I E B 1B
Anlogamente a
1 x 1 1 x x 2 x 3 . . . . . . . . . . , para x 1
tenemos
A 1 I E E 2 E 3 . . . . . . . . . . B, para q 1
si
E0 e ij Primera matriz de error

y si los elementos de e ij satisfacen

q
|e ij | n

donde n es el orden de la matriz y 0 q 1, entonces el proceso iterati-


vo definitivamente converge. Pan y Reif han demostrado que una condicion
suficiente para que el proceso iterativo converja es E k 1.
En una iteracin dada
Ek I Bk 1A
Bk I E k E 2k E 3k . . . . . . . . . B k 1

con matriz de error pequea

Bk I Ek Bk 1
que es la conocida iteracin de Newton llamada tambin refinamiento de
la solucin.La contribucin de Pan y Reif fu el descubrimiento de una
simple forma de iniciar el proceso iterativo de Newton con una B 0 como
aproximacin a la matriz A 1 .

Algoritmo de Pan-Reif:
1. Forme A H (tiene elementos A j, i
2. Evalue las normas t 1 A 1 y t2 A y calcule t 1/ t 1 t 2
3. Haga B 0 tA H
4. Haga E k I B k 1 A k 1, 2, . . . . . . . .
5. Iteracin de Newton: B k I Ek Bk 1 k 1, 2, . . . . . . .
6. Repita iterativamente los pasos 4 y 5 hasta que los elementos de la ma-
triz de error E k satisfagan algn criterio de tolerancia, por ejemplo
E k 1 0. 0001.
Cuando esto suceda la matriz B sera una buena aproximacin al inverso
de A.
Nota: En Matlab A AH
El siguiente listado muestra una implementacin del algoritmo en Matlab.

function [b, iter] pan_reif(a)


[n,m] size(a);

16
n2 n*n;
n4 n2*n2;
t1 norm(a,1);
t2 norm(a,inf);
y eye(size(a));
t 1/(t1*t2);
E 2*y; % inicializa a valor grande
i 0;
while norm(E,1) 1/n4;
% aqui empieza la iteracin de Newton
i i 1;
E y-b*a;
b (y E)*b;
end
iter i;
Una prueba del algoritmo puede hacerse asi:

clear
a rand(20,20) % matriz de nmeros aleatorios
[b, iter] pan_reif(a)
% iter es el nmero de iteraciones, b el inverso
% de a
% Se puede constatar la exactitud de b
% calculando:b*a
% debe resultar la matriz identidad
Problemas mal condicionados
Necesitamos en esta seccin, hablar de normas de matrices. Primero repasare-
mos las normas de vectores para luego introducir algunas normas de matrices.
La norma
n
x 1 |x |
i 1 i
(37a)

es una norma definida en R n .


La norma l 2 se denomina norma euclideana del vector x, y esta definida asi:

n 1/2
x 2 x2
i 1 i
(37b)

La norma l es

x max |x i | 1 i n (37c)

adems se puede demostrar que

x x 2 n x (38)

Una norma matricial . es una funcin de valor real definida sobre el


conjunto de todas las matrices n x n y que satisface para todas las matrices
A y B y todos los nmeros reales lo siguiente:

i) A 0.

17
ii) A 0, si y slo si A es [0].
iii) A | | A .
iv) A B A B .
v) AB A B

Si . es una norma vectorial en R n , entonces

A max Ax (39)
x 1

es una norma matricial.


A esta se la llama norma natural o inducida asociada con una norma vecto-
rial.
Las ms comunmente usadas son:
n
A 1 max |a |
i 1 ij
(40)
1 j n
o sea

A 1 max col 1 A 1, col 2 A 1, . . . . . . . . , col n A 1

n
A max Ax max |a |
j 1 ij
(41)
x 1 1 i n

o sea
A max fila 1 A 1, fila 2 A 1, . . . . . . . . . , fila n A 1

1/2
A 2 max Ax 2 AA (42)
x 2 1

que equivale a

A 2 max valor caracteristico de A T A

donde M max| | es el radio espectral de M y es un valor carac-


terstico de M.
Una norma muy usada es la norma de Frobenius (que no es una norma natu-
ral) y se define asi:
n n 1/2
A F i 1
|a | 2
j 1 ij
(43)

Para cualquier matriz A de n x n


1
A 2 A F n2 A 2 (44)

Uno de los problemas fundamentales en la solucin de un sistema simult-


neo de ecuaciones es poder determinar cuan exacto es el resultado. Sa-
bemos por ejemplo que una matriz cuyo determinante es cero, no es inver-
tible y por lo tanto un sistema simultneo de ecuaciones no tiene solucin si
esto ocurre. Es natural pensar que si el determinante se aproxima a cero, el
resultado va a ser inexacto.
Con el propsito de saber si el problema est bien condicionado, o sea su
solucin es confiable, empleamos el nmero de condicin: cond(A) que se
define

18
1
Cond A A A (45)

este nmero de condicin siempre satisface

Cond A 1 (46)

y tiende a crecer cuando el problema est mal condicionado.

Origen de Cond(A)
En un sistema de ecuaciones simultaneas Ax b, con A no singular y b 0
es siempre importante conocer la sensibilidad de x respecto a pequeos cam-
bios en b o en A. Analicemos el problema por partes, primero consideremos
A exacta pero b con un error b. La solucin exacta a este problema modifi-
cado ser

1
Ax x b b o sea A x b y x A b

Aplicando Ax A x b A x

1
similarmente x A b

de aqu obtenemos

x 1 b
A A
x b

O sea, las variaciones relativas de la norma del vector solucin, son meno-
res que el nmero de condicion multiplicado por las variaciones relativas de
la norma del vector independiente.
Cuando A tiene un error A pero b es exacta, siguiendo un procedimiento
similar obtenemos

x 1 A
A A
x x A

La definicin dada en ec. (45) es plenamente justificada.


La ec. (45), plantea el siguiente dilema: si la matriz es pobremente condicio-
nada, A 1 como tambin su norma, van a ser inexactas; entonces, cmo
podremos confiar en el clculo hecho en ec. (45) ?
Afortunadamente, existen tcnicas numricas que permiten estimar el nme-
ro de condicin sin tener que calcular la matriz inversa. Ese es un procedi-
miento costoso desde el punto de vista numrico. En Matlab simplemente
se calcula : cond(A).
El empleo de autovalores permite calcular formalmente el nmero de condi-
cin sin tener que invertir la matriz en ec. (45) como se muestra a continua-
cin.
1
Teorema: Para cualquier matriz A, A 2 AA 2 , donde A 2 es
la norma espectral de A.

19
Demostracion: A A es simtrica y no negativa. Sea x i i 1, 2, . .
. . , n un conjunto ortonormal de vectores caractersticos reales de A A,
o sea
A Ax i i
ix , 0 1 2 ......... n ,
con
xi xj 0, i j
y
xi xi 1, 1 i n

i
Cualquier otro vector x en el espacio cubierto por x i 1, 2, . . . . . , n
puede
exprezarse
n
x cxi
i 1 i
,

por lo tanto

2
Ax 2 Ax, Ax x A Ax
x 2 x, x xx

i i 2
i
cix i icix i i |c i |

cix i
cix i
j
|c j | 2
i i

si x x n , tendramos c 1 c 2 . . . . . . . . . c n 1 0 y cn 1, y el valor
del ltimo trmino sera n . Por lo tanto

2
2 Ax 2
A 2 n AA 47
x 2 max

Corolario: Si A A , o sea la matriz es simtrica


2
A 2 AA A2 2
A

A 2 A (48)

Nmero de Condicin: refirindonos a la ec. (43) y a Ax x, vemos


que
1
A 1x x x

en este problema el mximo valor de corresponde al mnimo valor de ,


por lo tanto

20
1
A 2 mx | |; un valor caracterstico de A A 2

1
1
A 2
min | |; un valor caracterstico de A A 2

y finalmente
1
max 2
Cond(A) min
, siendo solucin de A Ax x (49)

En una matriz mal condicionada, tanto su inverso como su determinante


resultan inexactos.
Algunos sntomas que indican esta condicin son:

i) det A det A 1 1
ii) A 1 1 A
iii) AA 1 I
iv) A 1 A 1 1 I en grado mayor que en iii)

Una matriz que muestra en forma clara su mal condicionamiento, es la ma-


triz de Hilbert, definida asi:

A a ij 1
i j 1

es un buen ejercicio, calcular A 1 y los determinantes para comprobar i)..


..iv), para valores de n de 5 a 15.

Ejercicios sobre errorres, errores residuales, nmeros


de condicin.

Empecemos con un ejercicio numrico, para obtener la descomposicin LU de la


siguiente
matriz:

10 7 0
A 3 2 6 (1)
5 1 5

Podemos observar que esta matriz no necesita pivoteo, en la primera columna el


trmino
a 11 10 es el mayor. Luego observamos la segunda columna, filas dos y tres.
Tambien en
este caso el trmino a 22 es el mayor. Simplemente por razones de orden decimos que
la

21
matriz de permutacin en este primer paso es

1 0 0 1 0 0
P1 0 1 0 , M1 0. 3 1 0
0 0 1 0. 5 0 1

M 1 es la matriz que realiza la eliminacin de los trminos por debajo del a 11. O sea

1 0 0 1 0 0 10 7 0 10 7 0
M1P1A 0. 3 1 0 0 1 0 3 2 6 0 0. 1 6
0. 5 0 1 0 0 1 5 1 5 0 2. 5 5

El siguiente paso es premultiplicar por una matriz de permutacin P 2 ya que se ve


que el tr-
mino # 22 no es el mayor.

1 0 0 10 7 0 10 7 0
P2M1P1A 0 0 1 0 0. 1 6 0 2. 5 5
0 1 0 0 2. 5 5 0 0. 1 6

Para eliminar el trmino -0.1, premultiplicamos esta ltima matriz por M 2 :

1 0 0 10 7 0 10 7 0
M2P2M1P1A 0 1 0 0 2. 5 5 0 2. 5 5
0 0. 04 1 0 0. 1 6 0 0 6. 2
y obtenemos

10 7 0
U 0 2. 5 5 Mn 1Pn 1. . . . . . . M2P2M1P1A
0 0 6. 2
Se puede demostrar que
L1L2. . . . Ln 1U Pn 1. . . . P2P1A
lo que equivale a
LU PA
En Matlab: [L, U, P] lu(A)

22
Por qu Pivoteo es necesario?

Los elementos diagonales de U se llaman pivotes. Como siempre hay que dividir por
el pivo-
te, el procedimiento ilustrado no funciona si alguno de los u ii es cero. Intuicin nos
dice que
sera mala idea completar el clculo si alguno de los u ii 0.

Ejemplo: En la matriz A anterior cambiemos un poquito a 22

10 7 0 x 7
A 3 2. 099 6 y 3. 901
5 1 5 z 6

la solucin exacta es [0 ; -1 ; 1]
Ahora supongamos que tenemos un computador que trabaja solo con cinco dgitos
signfica-
tivos, siguiendo el procedimiento de eliminacin Gaussiana, despus de
premultiplicar por
M 1 P 1 obtenemos

0 7 0 x 7
1 er Paso: 0 0. 001 6 y 6. 001
0 2. 5 5 z 2. 5

Notar que # 22 es bien pequeo!

2 do Paso: Aadimos 2. 5 10 3 2 da Fila a la 3 ra Fila:


5 2. 5 10 3 6 z 2. 5 2. 5 10 3 6. 001

1. 50025 10 4 en nuestra mquina debe redondearse a:


1. 5002 10 4

z 1. 5004 10 4 0. 99993
1. 5005 10 4
como el resultado excto es 1, este no parece tan mal resultado en una mquina con
cinco
dgitos.
Veamos que pasa con y:

23
0. 001y 6 0. 99993 6. 001

y 1. 5 10 3 1. 5
1. 0 10 3
y finalmente x de la primera fila:
10x 7 1. 5 7

x 0. 35
Solucin exacta: x [0 ; -1 ; 1]
Nuestra solucin x [-0.35; -1.5; 0.99993]

Que pas aqu? La matriz no es singular, tampoco hay errores de redondeo por miles
de ope-
raciones aritmticas. La dificultad radica en haber elegido un elemento muy pequeo
en el se-
gundo paso de la elimnacin. Como resultado el multiplicador es 2.5 10 3 y la
ecuacin final
tiene coeficientes del orden de 10 3 ms grandes que el problema original.
Para entender este punto, se recomienda repetir el ejercicio, empleando pivoteo
parcial, usando
el mismo computador de 4 decimales.
En general: Si los multiplicadores son 1 entonces la solucin del
computador es aceptable.

Efectos de redondeo

Redondeo siempre produce x x (solucin exacta)


Riguroasamente x A 1b
Hay dos medidas de discrepancia:
1 e x x error
2 r b Ax residual
Sabemos por teora de matrices que si 1) es cero, 2) tambin es cero. Pero el hecho de
que
uno de ellos sea muy pequeo no implica que el otro sea pequeo.
Ejemplo:

0. 780 0. 563 x1 0. 217


0. 913 0. 659 x2 0. 254

si empleamos elimanacin Gaussiana con pivote 0.913, en un computador de 3


decimales:
0.780/0.913 0.854

24
0. 913 0. 659 x1 0. 254
0 0. 0001 x2 0. 001

por sustitucin regresiva:

0. 443
x
1. 000

Para medir la exactitud (sin saber cual es la solucin exacta) calculamos el residual:
0. 217 0. 780 0. 443 0. 563 1. 00
r b Ax
0. 254 0. 913 0. 443 0. 659 1. 00

0. 000460
r
0. 000541

Los residuales son menores que 10 3 , lo que parece lgico en un computador de 3


decimales.
Sin embargo es fcil ver que la solucin exacta es:

1. 000
x
1. 000

o sea, nuestra solucin tiene los signos equivocados, el error es mayor que la
solucin!
Cmo pueden rsultar los residuales tan pequeos?
Si resolvemos el problema en un computador de 6 decimales obtenemos:

0. 913000 0. 659000 x1 0. 254000


0 0. 000001 x2 0. 000001

0.000001 0.254 0.659x 2


x2 0.000001
1. 00000; x 1 0.913
1. 00000

La solucin es la exacta! Esto demuestra que para los clculos con precisin, se debe
emplear
lo que en otros idiomas se llama doble precisin. Afortunadamente Matlab emplea
doble pre-
cisin en todos sus clculos (16 dgitos).

Empleo del Nmero de Condicin

Ya hemos visto que si definimos

25
Ax
M max para todo x 0
x
Ax
m min para todo x 0
x
el nmero de condicin de una matriz se define

cond A M
m
Cond(A) depende de la norma que se emplee, pero lo importante es el orden de su
magnitud.
Consideremos
Ax b
y un segundo sistema, alterando un poco el lado derecho:
Ax x b b
Se puede pensar que b es un error en los datos, puede ser resultado de error
experimental o
falta de decimales en el vector b. x es el error resultante. Debido a que
A x b
las definiciones de M y de m, permiten escribir
b M x
y
b m x
si m 0,
x b
cond A
x b
b x
La cantidad b es elerror relativo del lado derecho y la cantidad x
es el error
relativo
causado por este cambio.
No es difcil ver que

A 1 1
m
y una definicin equivalente del nmero de condicin es
1
cond A A A
Algunas propiedades del nmero de condicin son:
cond A 1
Si P es una matriz de permutacin
cond P 1

26
en particular
cond I 1
Si A es multiplicado por un escalar, entonces M y m son multiplicados por el mismo
escalar
y
cond cA cond A
Si D es una matriz diagonal
max|d ii |
cond D
min|d ii |
Estas dos ltimas propiedades muetran el por que el nmero de condicin es una
mejor
medida de singularidad de una matriz, que el determinante. Como ejemplo,
supongamos
que una matriz diagonal de 100 100 con elementos igual a 0.1 en la diagonal.
100 100
det A 0. 1 10
lo que se considera un nmero muy pequeo. Sin embargo cond(A) 1.

Ejemplo usando la norma l 1

4. 1 2. 8
A ,
9. 7 6. 6

4. 1 1
b , x .
9. 7 0

Claramente Ax b y b 13. 8, x 1.
Si el lado derecho se cambia a

4. 11
b ,
9. 7

la solucin es

0. 34
x .
0. 97

Sea b b b y x x x, entonces:
b 0. 01
x 1. 63

27
Hemos hecho una pequea perturbacin en b, que completamente cambia x. Los
cambios relativos son:
b
0. 0007246
b

x
1. 63
x
Debido a que cond(A) es el factor de magnificacin mximo,

cond A 1. 63 2249. 4
0. 0007246
Port otro lado,

4. 1 2. 8
13. 8
9. 7 6. 6
1

1
4. 1 2. 8
163
9. 7 6. 6
1

y se comprueba que
cond A 13. 8 163 2249. 4

Ejemplos tomados de: Numerical Computing with Matlab de Cleve B.Moler (Siam)
Programas
Los siguientes programas muestran las implementaciones usando el lenguaje
Matlab:

* Simple_Gauss.m
* Parpiv_Gauss.m
* Gauss_Jordan.m
* My_Crout.m
* My_Chol.m
* My_tridiag1.m
* Jacobi.m
* Gauss_Seidel.m
* pan_reif.m

Estos programas estn disponibles para su uso y estudio. Se recomienda es-


tudiarlos y tomar nota de las distintas tcnicas de programacin en lo que se
refiere a lazos, control de error, comandos de Matlab para desplegar resul-
tados con formato, etc.

Referencias
1. Anlisis Numrico y Visualizacin Grfica con Matlab de Shoichiro
Nakamura Ed. Pentice Hall.
2. Anlisis Numrico de Richard L. Burden y J. Douglas Faires, 6ta ed.

28
Thomson Ed.
3. Mtodos Numricos Aplicados a la Ingeniera de Antonio Nieves y
Federico C. Domnguez. Ed. Cecsa.
4. Mtodos Numricos para Ingenieros 3ra ed. de Steven C. Chapra
y Raymond P. Canale. Ed. Mc Graw Hill.
5. The Inversion of Large Matrices (The Pan and Reif algorithm provides a
solution) by Thomas E. Phipps Jr. Articulo publicado por BYTE
Magazine Abril 1986.
6. Computational Mathematics por B. P. Demidovich y I. A. Maron.
MIR Publishers.Moscow, 1981.

PROGRAMAS

Crout.m
clear
echo off
a [1 3 5;2 -2 8;-1 4 10];% un ejemplo
b [1 2 3];
n length(b);
y a\b
% Algoritmo de Crout
alfa eye(n,n);
beta zeros(n,n);
for j 1:n
for i 1:j
sum1 0;
for k 1:i-1
sum1 alfa(i,k).*beta(k,j) sum1;
end
beta(i,j) a(i,j)-sum1;
end

for i j 1:n
sum2 0;
for k 1:j-1
sum2 alfa(i,k).*beta(k,j) sum2;
end
alfa(i,j) (a(i,j)-sum2)./beta(j,j);
end
end
alfa,beta
c(1) b(1)./alfa(1,1);
for i 2:n
sum 0;
for r 1:i-1
sum sum alfa(i,r).*c(r);
end
c(i) (b(i)-sum)./alfa(j,j);
end
x(n) c(n)./beta(n,n);
for j n-1:-1:1
sum 0

29
for k j 1:n
sum sum beta(j,k).*x(k);
end
x(j) (c(j)-sum)./beta(j,j);
end
a,alfa,beta
disp(Y ES SOLUCION A\B)
for i 1:n
fprintf(y %12.8f x %12.8f\n,y(i),x(i))
end
My_Crout.m

%Algoritmo de Crout
function [x, l, t] my_Crout(a,b)
n length(b);
% Inicializamos l, t
l zeros(n,n);
t eye(n,n);
for j 1:n
t(1,j) a(1,j)/a(1,1);
end
for i 1:n
l(i,1) a(i,1);
end
for i 1:n
for j 1:i
sum1 0;
for k 1:j-1
sum1 l(i,k).*t(k,j) sum1;
end
l(i,j) a(i,j)-sum1;
end

for j i 1:n
sum2 0;
for k 1:i-1
sum2 l(i,k).*t(k,j) sum2;
end
t(i,j) (a(i,j)-sum2)./l(i,i);
end
end
c(1) b(1)./l(1,1);
for i 2:n
sum 0;
for k 1:i-1
sum sum l(i,k).*c(k);
end
c(i) (b(i)-sum)./l(i,i);
end
x(n) c(n);
% Sustititucion regresiva

30
for j n-1:-1:1
sum 0;
for k j 1:n
sum sum t(j,k).*x(k);
end
x(j) (c(j)-sum);
end

My_Doolittle.m

% Algoritmo de Doolittle
function [x, alfa, beta] my_Doolittle(a,b)
n length(b);
alfa eye(n,n);
beta zeros(n,n);
for j 1:n
for i 1:j
sum1 0;
for k 1:i-1
sum1 alfa(i,k).*beta(k,j) sum1;
end
beta(i,j) a(i,j)-sum1;
end
for i j 1:n
sum2 0;
for k 1:j-1
sum2 alfa(i,k).*beta(k,j) sum2;
end
alfa(i,j) (a(i,j)-sum2)./beta(j,j);
end
end
c(1) b(1)./alfa(1,1);
for i 2:n
sum 0;
for r 1:i-1
sum sum alfa(i,r).*c(r);
end
c(i) (b(i)-sum)./alfa(j,j);
end
x(n) c(n)./beta(n,n);
for j n-1:-1:1
sum 0;
for k j 1:n
sum sum beta(j,k).*x(k);
end
x(j) (c(j)-sum)./beta(j,j);
end

My_Chol.m
% Cholesky procedure
function[x,u] my_chol(a,b)

31
n length(b);
u(1,1) sqrt(a(1,1));
for j 2:n
u(1,j) a(1,j)./u(1,1);
end
c(1) b(1)./u(1,1);
for i 2:n
sum1 0;
for k 1:i-1
sum1 sum1 u(k,i).^2;
% k debe ser i ya que el termino diagonal no
% se ha calculado aun
end
if a(i,i) sum1
disp(Matriz nos es positiva definida)
end
u(i,i) sqrt(a(i,i)-sum1); % termino diagonal
for j i 1:n % solo la parte triangular superior
sum2 0;
for k 1:i-1

sum2 u(k,i).*u(k,j);
end
u(i,j) (a(i,j)-sum2)./u(i,i);
% termino arriba de la diagonal

end
end

for i 2:n % substitucion ascendente


sum 0;
for k 1:i-1
sum sum u(k,i).*c(k);
end
c(i) (b(i)-sum)./u(i,i);
end
x(n) c(n)./u(n,n);
for i n-1:-1:1 % substitucion regresiva
sum 0;
for k i 1:n
sum sum u(i,k).*x(k);
end
x(i) (c(i)-sum)./u(i,i);
end

Inv_Crout.m

% Programa de inversion de matriz


clear
echo off
a [1 2 3;5 -4 10;-1 7 2];

32
%la matriz eye(3) ocupa el lugar de b en la
% matriz aumentada
% [a|eye(3)]
%luego se usa la decomposicion LUtres veces
% usando cada columna
% de eye(3) en lugar de b
B eye(3,3);
bb zeros(3,3)
for i 1:3
b B(:,i);
[x,L,U] my_crout(a,b);
for k 1:3
bb(k,i) x(k);
end
end
bb
bb*a
Elim_Gauss.m

function [x,ade] Elim_Gauss(a,b)


[m,n] size(a);
ade 1;
i 1;
while i n-1
ade ade*a(i,i);
if ade 0
disp(HAY UN CERO EN LA DIAGONAL PRINCIPAL !),
break,end
k i 1;
while k n
j i 1;
while j n
a(j,i) 0;
a(k,j) a(k,j)-a(k,i)*a(i,j)/a(i,i);
j j 1;
end
b(k) b(k)-a(k,i)*b(i)/a(i,i);
k k 1;
end
i i 1;
end
ade ade*a(n,n);
if ade 0
disp(Hay un cero en la diagonal principal),
break,end
x(n) b(n)/a(n,n);
i n-1;
while i 1
x(i) b(i);
j 1;
while j n

33
x(i) x(i)-a(i,j)*x(j);
j j 1;
end
x(i) x(i)/a(i,i);
i i-1;
end

Gauss_Jordan.m

function [x] Gauss_Jordan(a,b)


n length(b);
% Creamos matriz aumentada
for i 1:n
a(i,n 1) b(i);
end
[nrow,ncol] size(a);
% Buscamos pivot mayor
for k 1:nrow
pivot a(k,k);
il k;
for l k 1:nrow
if abs(a(l,k)) abs(pivot)
% No hacemos nada
elseif abs(a(l,k)) abs(pivot)
pivot a(l,k);
il l;
end
end
% pivot cero significa matriz singular
if pivot 0
disp(Matriz Singular)
else
% intercambio de filas para obtener el
% pivot mayor
for ll 1:ncol
temp a(k,ll);
a(k,ll) a(il,ll);
a(il,ll) temp;
end
end
% Normalizar la fila pivot
for j 1:ncol
c(k,j) a(k,j)/pivot;
end
% Ahora la eliminacion Gauss_Jordan
for i 1:nrow
if i k
% No hacemos nada
else
for j 1:ncol
c(i,j) a(i,j)-a(i,k)*c(k,j);

34
end
end
end
% Ahora ponemos el resultado c() en a()
a c;
for j 1:nrow
x(j) a(j,ncol);
end
end
%disp(*********** Matriz [a|x] aumentada *************)
%a,x

G_Seidel.m

clear
echo off
n 3;
L zeros(3,3);
U zeros(3,3);
c [10 3 1;2 8 3;4 1 9]
d [1 2 3];
% Normalizamos
for i 1:3
for j 1:3
a(i,j) c(i,j)./c(i,i);
end
b(i) d(i)./c(i,i);
end
for i 1:3
for j i 1:3

U(i,j) a(i,j);
end
end
for j 1:3
for i j 1:3

L(i,j) a(i,j);
end
end
a,L,U
w input(Entre el valor de w :);
disp(Los valores iniciales son: )
y 10.*[1 1 1 1 1 1]
x y;
% Empezamos la iteracion
fprintf( y(1) y(2) y(3) y(4) y(5) y(6) #iter\n)
fprintf(-\n)
for k 1:100
for i 1:3
sum1 0;

35
for j 1:i-1
sum1 L(i,j).*y(j) sum1;
end
sum2 0;
for j i 1:3
sum2 U(i,j).*x(j) sum2;
end
y(i) x(i) w.*(b(i)-sum1-x(i)-sum2);

end
error abs(y-x);
x y;
if error 10^-5
break
end
fprintf( %8.5f %8.5f %8.5f %3.0f\n,y(1),...
y(2),y(3),k)
end

Tri_diad.m

function f tri_diag(a,b,c,d,n)
for i 2:n
r a(i)/b(i-1);
b(i) b(i)-r*c(i-1);
d(i) d(i)-r*d(i-1);
end
d(n) d(n)/b(n);
for i n-1:-1:1
d(i) (d(i)-c(i)*d(i 1))/b(i);
end
f d;
Jacobi.m
% Iteracion de Jacobi
clear
echo off
n 6;
a zeros(6,6);
for i 1:6
a(i,i) 2;
end
for i 1:5
a(i,i 1) 1;
a(i 1,i) 1;
end
a
b [3.1 5.1 5.1 5.1 5.1 2.9];
% Normalizamos
for i 1:6
for j 1:6
a(i,j) a(i,j)./2;

36
end
b(i) b(i)./2;
end
w input(Entre el valor de w :);
disp(Los valores iniciales son: )
y 10.*[1 1 1 1 1 1]
x y;
% Empezamos la iteracion de Jacobi
fprintf( y(1) y(2) y(3) y(4) y(5) y(6) #iter\n)
fprintf(-\n)
for k 1:100
for i 1:6
sum1 0;
for j 1:n
sum1 a(i,j).*x(j) sum1;
end
y(i) x(i) w.*(b(i)-sum1);
end
error abs(y-x);
x y;
if error 10^-5
break
end
fprintf( %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f...
%3.0f\n,y(1),y(2),y(3),y(4),y(5),y(6),k)
end

37

S-ar putea să vă placă și