Vous êtes sur la page 1sur 34

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 numricamente y tienen repercusiones en
otras areas de matemticas aplicadas como optimizacin y mtodos de solucin numrica
de ecuaciones diferenciales. Dejaremos para la seccin V el tratamiento de problemas no
linales y trataremos en esta el problema lineal.
La forma estndar del problema a resolver es:
a 11 x 1
a 21 x 1

a 12 x 2
a 22 x 2

a 1n x n
a 2n x n

c1
c2

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

(1)

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
2

1
1
1

1 2

3 1 2
1 7
para obtener ceros en la primera columna, procedemos as:
F1
F2
F3
F4

F 1 /a 11
F2 F1
F 3 2F 1
F 4 3F 1

1
0
0
0

1
-2
-1
-2

1 -1 2
-2 2 -2
-3 4 5
-1 2 1

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


columna y a normalizar la segunda ecuacin tal de obtener 1 en la diaagonal.
F1
F2
F3
F4

F1
F2/ 2
F3 F2
F 4 2F 2

1
0
0
0

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

2
1
6
3
1

siguiendo con el procedimiento,


F1
F2
F3
F4

F1
F2
F3 / 2
F4 F3

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

2
1
-3
6

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


buscada
1
0
0
0

1
1
0
0

1
1
1
0

-1
-1
3
2

2
1
-3
4

escribiendo en forma convencional, el problema reducido es:


x1

x2 x3 x4
x2 x3 x4
x 3 32 x 4
x4

2
1
3
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 diagonal
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 denomina 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 encuenttra 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
generalmente implementado en todos los programas de eliminacin Gaussiana y lleva el
nombre de pivoteo parcial. Cuando se intercambian columnas y filas tenemos lo que se
llama pivoteo total. El pivoteo total desgraciadamente complica el programa y la
exactitud adicional ganada no justifica su imple implementacion. 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 , hay que incorporar al final una funcin que reordene
las incgnitas en el orden original.
Gauss-Jordan
Aplicando el procedimiento de eliminacin Gausiana tal que se eliminen tambin 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 transformarla 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 matrizoriginal el cambio
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

0 0 1

b 31 b 32 b 33

b 31

b 32

mF 2

b 33

multiplicacin por un escalar.


1 0 0

b 11 b 12 b 13

b 11

m 1 0

b 21 b 22 b 23

mb 11

0 0 1

b 31 b 32 b 33

b 31

mF 1

b 12
b 21 mb 12

b 13
b 22 mb 13

b 32

b 23

b 33

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

0 1 0

b 31 b 32 b 33

b 21 b 22 b 23

P 23 B

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.
b) Sumar un mltiplo del rengln i al rengln j.
c) Permutar (intercambiar) los renglones i y j.

Ri
Rj
Ri

cR i
R j cR i
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 inversos de
las matrices elementales resultan ser muy similares en forma a la matriz 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
entonces EA

y Eb

I|x

x, resulta que la inversa de A es E,

adems
det EA

det I

det E . det A

1
det E

det A

Ejercicio:
Determinar los valores del determinante de las distintas matrices elementales:
permutadora, multiplicadora por factor m, y matriz elemental deltipo 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
a 21 a 22 a 23 a 24
a 31 a 32 a 33 a 34
a 41 a 42 a 43 a 44

1 0 0 0
|

0 1 0 0

(2)

0 0 1 0
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

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

b 11 b 12 b 13 b 14
|

b 21 b 22 b 23 b 24

(3)

b 31 b 32 b 33 b 34
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 queoriginalmente 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
a ij 1 , multiplicando ec. (2) por b ij , obtenemos ec. (3)
Si b ij

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 sistemasimultneo de ecuaciones.
Ec. (2) puede considerarse como cuatro problemas convencionales de ecuaciones
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

a 21 a 22 a 23 a 24

b 21

a 31 a 32 a 33 a 34

b 31

a 41 a 42 a 43 a 44

b 41

(5a)

(5b)...(5c)

a 11 a 12 a 13 a 14

b 14

a 21 a 22 a 23 a 24

b 24

a 31 a 32 a 33 a 34

b 34

a 41 a 42 a 43 a 44

b 44

(5d)

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

(6)

Descomposicin LU
Se conoce por este nombre (del ingls L lower (inferior) U upper (superior)) 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. Estudiaremos a continuacin los tres ms
populares. Mtodo de Crout, mtodo 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

LTx

(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

Tx

(8a)

(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 matriciales 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

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

a 31 a 32 a 33

L 31 L 32 L 33

0 0

b3

(9)

c3

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


izquierda correspondiente, obtenemos

T 13

c1

a 11

L 21

a 21

L 31

a 31

T 12

a 12 /L 11

L 22

a 22

L 21 T 12

L 32

a 32

L 31 T 12

a 13 /L 11

T 23
L 33

L 11

a 23

(10)

L 21 T 13 /L 22

a 33

L 31 T 13

L 32 T 23

b 1 /L 11

c2

b2

L 21 c 1 /L 22

c3

b3

L 31 c 1

L 32 c 2 /L 33

Es importante notar que el orden del clculo de estos trminos es de izquierda 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

(11)

x2

c2x

x3

c1

T 23 x 3
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 ik T kj , i

j, j

2, 3. . . . . . . . , n

k 1

i 1

T ij

1 a
L ii ij

L ik T kj , i

j, j

2, 3, . . . . . , n

k 1

i 1

1 b
L ii i

ci

L ik c k , i

T ij

a ij /a 11 ,

a i1, j

L ij

c1
adems:

xn

2, 3, . . . . . . , n

k 1

b 1 /L 11

cn;

xj

cj

T jr x r ,

1, n

2, . . . . . , 1

(12)

r j 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

T 11 T 12 T 13

a 21 a 22 a 23 | b 2

L 21 1

T 22 T 23 | c 2

a 31 a 32 a 33

L 31 L 32 1

b1
b3

T 33

c1
(13)

c3

Se deja como ejercicio el buscar el conjunto de ecuaciones correspondientes 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 depermutacin tal de tener los
ms grandes elementos pivotes (diagonales). O sea
PAx
LUx

Pb
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

LU

UT

esto indica

A T ), la descomposicin LU se simplifica ya que

AT

UTLT

LT

por lo tanto, el problema a resolver es

a 11 a 12 a 13

u 11 0

b1

u 11 u 12 u 13

c1

a 21 a 22 a 23 | b 2

u 12 u 22 0

u 22 u 23 | c 2

a 31 a 32 a 33

u 13 u 23 u 33

b3

u 33

(14)

c3

Ec. (14) es equivalente a la ec. (9), y seguimos igual procedimiento para eterminar
los elementos u ij . Igualando trminos correspondientes, obtenemos
u 11

a 11 ;

u 22

u 212 ;

a 22

c1
u 12

a 12 /u 11 ;

u 23

a 23

u 12 u 13 /u 22 ;
c2

(15)
u 13

a 13 /u 11

u 33

b 1 /u 11

b2

a 33

u 213

c3

b3

c 1 u 12 /u 22

u 223
c 1 u 13

c 2 u 23 /u 33

(15)

la solucin [x] se obtiene por sustitucin regresiva de

u 11 u 12 u 13

x1

c1

u 22 u 23

x2

c2

x3

c3

u 33

(16)

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


generalizacin de ec. (15).
u 11
u 1j
u ii

a 11 ,
a 1j /u 11 ,
a ii

c 1 b 1 /u 11
i 2, 3, . . . . . . . , n
i 1 2
u , i 2, 3, . . . . . , n
k 1 ki

u ij
ci
xn
xi
u ij

i 1

a ij
u u /u ii , j
k 1 ki kj
i 1
bi
u c /u ii ,
i
k 1 ki k
c n /u nn
n
ci
u x /u ii , i
k i 1 ik k
0 para i j

2, 3, . . . . , n
2, 3, . . . . , n
n

(17)

1, . . . . . , 1

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

x Ax

x1, x2, . . . . . . . , xn

para todo vector x


Ejemplo: sea

a 11 a 12

a 1n

x1

a 21 a 22

a 2n

x2

a n1 a n2

a nn

a nn

1
0

2
x1, x2, x3

0
2x 21

(18)

0
2

x Ax

2
2x 22

2x 1 x 2

x1
x1, x2, x3

x2
x3
2x 2 x 3

2x 1

x2

x1

2x 2

x2

2x 3

x3

2x 23

arreglando trminos
x 21 x 21 2x 1 x 2 x 22
x 22 2x 2 x 3 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
x Ax

x 23

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
4) a ij 2 a ii a jj para cada i

n |a ii |

10

Una regla que reemplaza a estos cuatro criterios es: Una matriz A es positiva definida
si y solo si sus primeras submatrices principales tienen determinante positivo. Empleando
la misma matriz del ejemplo anterior tenemos
det A 1

det 2

det A 2

det

2
1

2
det A 3

det

2
1

24

Emplee el comando help y estudie la funcin chol


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 matriz 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

x1

b1

l1

d2 t2

x2

b2

l2

d3 t3

x3

b3

l3

x4

b4

d4

(19)

Llamandoa esta matriz tridiagonal [Tri] el problema es determinar la descomposicin

Tri x

L Ux

(19b)

Como ya hemos analizado este problema, parecera una simple aplicacin ms de la


descomposicin LU. Sin embargo en el presente caso no conocemos L ni tampoco U y
queremos llegar a frmulas particulares para resolver este problema de una forma
eficiente. Las matrices aumentadas correspondientes a las ecuaciones anteriores son:

11

Tri|b

L U|B

(19c)

Obviamente de (19b) se concluye que


Ux

(19d)

Esta ltima ecuacin muestra que solo necesitamos resolver una sola ecuacin 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

l1

d2 t2

l2

d3 t3

l3

d4

b1

D1 0

1 T1 0

b2

L2 D2 0

0 1

T2 0

b3

L3 D3 0

0 0

T3

b4

0 0

L4 D4

B1
|

B2

(20)

B3
B4

multiplicando las matrices de la derecha e igualando con los trminos


correspondientes de la izquierda, obtenemos
D1
L2

d1,
l2,

T1
D2
L3

t 1 /D 1 ,
T2
d2 T1L2, D3
l3,
L4

t 2 /D 2 ,
d3 L3T2,
l4,

T3
D4

t 3 /D 3 ,
d4 T3L4,
(21)

B1
B4

b 1 /D 1 , B 2
b2
b 4 B 3 L 4 /D 4

B 1 L 2 /D 2 , B 3

b3

B 2 L 3 /D 3 ,

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
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

(22)

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 calculados.
Finalmente, aplicamos sustitucin regresiva a
1 T1 0

x1

B1

0 1

T2 0

x2

B2

0 0

T3

x3

B3

0 0

x4

B4

12

y obtenemos

xn

xi

Bi

Tixi 1,

Bn

1, n

2, . . . . . . . . . . , 1

(23)

Estudie la funcin diag


Mtodos Iterativos
Los mtodos de solucin de ecuaciones simultneas basados en la aplicacin de
operaciones elementales (eliminacin) se vuelven costosos desde el punto de vista de la
memoria usada en el computador y adems se vuelven inexactos ya que al crecer el orden
de la matriz, se incrementa el nmero de operaciones y el error de redondeo se propaga,
haciendo el proceso ineficiente y aproximado. En la solucin de ecuaciones diferenciales
parciales es comn encontrar matrices de orden superior a mil y en varias aplicaciones se
encuentran ecuaciones de orden diez mil o mayor. En estos casos resulta 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 tcnica
denominada iteracin.
Un problema de rango tres es

a 11 a 12 a 13

x1

b1

a 21 a 22 a 23

x2

b2

a 31 a 32 a 33

x3

b3

(24)

despejando x 1 de la primera ecuacin, x 2 de la segunda y x 3 de la tercera, obtenemos

x1

a 12
a 11

x2

a 21
a 22
a 31
a 33

x3

a 13
a 11
a 23
a 22

a 32
a 33

x1

b1
a 11

x2

b2
a 22

x3

b3
a 33

(25)

esta ecuacin se puede escribir en forma compacta como

Bx

(26)

13

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

k 1

Bx

c, k

0, 1, 2, . . . . . . .
x

(27)

x 10 , x 20 , . . . . . . x n0

es el

vector inicial
El proceso se detiene cuando el error entre dos iteraciones sucesivas es menor que un
cierto valor prefijado. Por ejemplo 10 4 , 10 6 .
La ec. (27) recibe el nombre de iteracin de Jacobi o mtodo de desplazamientos
simultneos. Los nuevos valores se reemplazan todos (simultneamente) al lado derecho
de la ecuacin en la iteracin siguiente.
En forma explcita, la ec. (27) es

x ki

1
a ii

a ij x kj , 1

bi

(28)

j 1
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 apenas se tiene un valor calculado
(no estimado) se lo emplea para calcularlos otros elementos del vector x. La ec.(25) se
transforma en

k 1

x k1

1
a 11

b1

a 12 x k2

x k2

1
a 22

b2

a 21 x k1

x k3 1

1
a 33

b3

a 31 x k1 1

a 13 x k3
1

a 23 x k3

(29)

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 sustituciones sucesivas.
Para un sistema de n-ecuaciones:

14

i 1

x ki 1

1
a ii

a ij x kj 1

bi

a ij x kj , para 1

j 1

(30)

j i 1

esta ecuacin tambin se puede escribir

i 1

x ki

1
a ii

l ij x kj

bi

u ij x kj , para 1

j 1

(31)

j i 1

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 implementado en el
programa G_Seidel.m. Se simplifican las ecuaciones si se normaliza cada ecuacin,
dividiendo cada una por el trmino en la diagonal.

Implementacin de la Iteracin de Jacobi


En un problema
Ax

definamos A como la suma de una matriz diagonal , con la diagonal principal de A,


ms la matriz restante con ceros en la diagonal y con los elementos de A en su sitio
respectivo.

a 12

a 21

...

...

...
0

a n1

a n,n

a 1n

a 11

...

a 22

...

a n,n

an

1,n

0
0

o sea
A

(D diagonal, R matriz con el resto de A)


La ecuacin original la escribimos
R
Dx

Dx
Rx

b
b

despejando x
x

D 1 Rx

D 1b

Bx

(A)

Notar que la matriz D es diagonal y su inverso es simplemente el inverso de sus


trminos diagonales.
Hemos definido

15

D 1R

D 1b

z
La iteracin de Jacobi queda definida asi:
xi

Bx i

i 1,2,3.....

(B)

Reemplazando
xi

ei
xi

valor exacto

Bx

Be i

error

Be i

usando (A)
xi

lo que nos dice que la parte exacta no se altera en cada iteracin, y que el error en
cada iteracin es
ei

Be i

(C)

Ejercicio:
Escriba un programa implementando esta iteracin. Use (A) y (B)
Convergencia
Los mtodos de Jacobi y Gauss-Seidel convergen si

|a ii |

|a ij |; 1

|a ij |; 1

(32)

j 1
j i
n

|a ii |
i 1
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 estrictamente necesarias. Cabe recordar que para tener una
matriz diagonal dominante, 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, depende
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 consiste en exagerar la correccin de las
incgnitas, en cada paso (sobrerelajar).

16

En cada iteracin obtenemos un nuevo valor del vector x que se relaciona con su
valor previo, de acuerdo a

k 1

(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
x

k 1

wr

(34)

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

x ki 1

x ki

a ij x kj

w bi

(35)

j 1

i 1

x ki

x ki

l ij x kj

w bi

x ki

u ij x kj

j 1

(36)

j i 1

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) equivalen 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
D0

Esta aproximacin puede mejorarse usando el mtodo de aproximacioes sucesivas.


Una medida del error puede ser la diferencia
F0
Si F 0

0, entonces claramente D 0

AD 0

A 1 , y si el mdulo de los elementos de la

17

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

Dk 1Fk

AD k

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

Estimemos la rapidz de convergencia de las aproximaciones sucesivas. Tenemos


F1

AD 1

F0 I

A D0

D0F0

F0

AD 0 I

F 20

F0

F 20

en forma similar
F2

F 21

F 40

y en general
Fk

F 20

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


particular, Pan y Reif han desarrollado un mtodo iterativo para determinar 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 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
A 1
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
e ij
Primera matriz de error
E0

18

y si los elementos de e ij satisfacen


|e ij |

q
n

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


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
H
3. Haga B 0 tA
4. Haga E k I B k 1 A
k 1, 2, . . . . . . . .
I Ek Bk 1
k 1, 2, . . . . . . .
5. Iteracin de Newton: B k
6. Repita iterativamente los pasos 4 y 5 hasta que los elementos de la matriz 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);
n2 n*n;
n4 n2*n2;
t1 norm(a,1);
t2 norm(a,inf);
y eye(size(a));
t 1/(t1*t2);
b t*a;
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:

19

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

Nmero total de Operaciones Requeridas en los


Distintos Mtodos
Mtodo
Regla de Cramer
Gauss
Gauss-Jordan
Crout
Coeficientes Complejos
Mtodo Iterativos

Nmero de Operaciones
n 1 n 1 n! n
1
n 3 3n 2 n
3
1
n 3 3n 2 n
3
1
4n 3 9n 2 7n
6
2. 3 n 3 3n 2 n
No Aplicable

Problemas mal condicionados


Necesitamos en esta seccin, hablar de normas de matrices. Primero repasaremos las
normas de vectores para luego introducir algunas normas de matrices.
La norma
n

(37a)

|x i |

1
i 1

es una norma definida en R n .


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

x 2i

(37b)

i 1

La norma l es

max|x i | 1

i n

(37c)

n x

(38)

adems se puede demostrar que


x

20

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.
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

max Ax
x

(39)

es una norma matricial.


A esta se la llama norma natural o inducida asociada con una norma vectorial.
Las ms comunmente usadas son:

max

(40)

|a ij |
i 1

1 j n

o sea
A

max

col 1 A

1,

col 2 A

1, . . . . . . . . ,

col n A

max Ax

max

(41)

|a ij |
j 1

1 i n

o sea
A

max

fila 1 A

1,

fila 2 A

max Ax
x

1, . . . . . . . . . ,

AA

fila n A

1/2

(42)

que equivale a
A
donde

max valor caracteristico de A T A

max| | es el radio espectral de M y

es un valor caracterstico de

21

M.
Una norma muy usada es la norma de Frobenius (que no es una norma natural) y se
define asi:
n

1/2

|a ij |

(43)

i 1 j 1

Para cualquier matriz A de n x n

n2 A

(44)

Uno de los problemas fundamentales en la solucin de un sistema simultneo de


ecuaciones es poder determinar cuan exacto es el resultado. Sabemos por ejemplo que
una matriz cuyo determinante es cero, no es invertible 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

Cond A

(45)

este nmero de condicin siempre satisface

Cond A

(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 0es
siempre importante conocer la sensibilidad de x respecto a pequeos cambios 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 modificado ser
Ax
Aplicando

Ax

similarmente

b
A

b o sea A x
b

b y

x
1

de aqu obtenemos

22

x
x

b
b

O sea, las variaciones relativas de la norma del vector solucin, son menores 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
x

A
A

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


La ec. (45), plantea el siguiente dilema: si la matriz es pobremente condicionada,
1
A 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 nmero de
condicin sin tener que calcular la matriz inversa. Ese es un procedimiento costoso desde
el punto de vista numrico. En Matlab simplemente se calcula : cond(A).
El empleo de autovalores permite calcular formalmente el nmero de condicin sin
tener que invertir la matriz en ec. (45) como se muestra a continuacin.
Teorema: Para cualquier matriz A,
la norma espectral de A.

1
2

AA

, donde A

Demostracion: A A es simtrica y no negativa. Sea x i


i
conjunto ortonormal de vectores caractersticos reales de A A,
o sea
i
A Ax i
0
ix ,
1
2 .........
n ,
con
xi xj
0, i j
y
xi xi
1, 1 i n
Cualquier otro vector x en el espacio cubierto por x
exprezarse
x

n
cxi
i 1 i

es

1, 2, . . . . , n un

1, 2, . . . . . , n puede

por lo tanto

Ax
x

2
2
2

Ax, Ax
x, x

x A Ax
xx

23

cix

i
i
i

cx
i i
si x x n , tendramos c 1
trmino sera n . Por lo tanto

cx
i i

c2 . . . . . . . . . cn

i |c i |

0 y cn

|c j | 2

1, y el valor del ltimo

Ax
x

2
2

icix

2
2

AA

(47)

max

A , o sea la matriz es simtrica

Corolario: Si A
A

2
2

A2

AA

(48)

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


A 1x

x, vemos que

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


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

1
2

min | |; un valor caracterstico de A A

1
2

y finalmente

Cond A

max

1
2

(49)

min

siendo solucin de A Ax
x
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 matriz de Hilbert, definida asi:

24

es un buen ejercicio, calcular A


valores de n de 5 a 15.

a ij

1
j 1

y los determinantes para comprobar i)....iv), para

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 estudiarlos y tomar nota de las distintas tcnicas de programacin en lo que se
refiere a lazos, control de error, comandos de Matlab para desplegar resultados 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.
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);

25

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
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

26

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
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

27

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)
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

28

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];
%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);

29

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
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

30

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);
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];

31

% 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;
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

32

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;
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

33

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

34

Vous aimerez peut-être aussi