You are on page 1of 14

Métodos Numéricos para Matrices

Las operaciones con matrices aparecen en distintos problemas de la física. Aunque el ejemplo
más conocido es el estudio de pequeñas oscilaciones en sistemas de muchos cuerpos, también se
utilizan en resolución de circuitos eléctricos y son fundamentales en mecánica cuántica.
Supongamos que queremos estudiar el espcro de vibraciones de una molécula con n grados de
libertad. La primer aproximación consiste en investigar las oscilaciones armónicas del sistema, ex-
pandiendo la energía potencial hasta el segundo orden en las coordenadas generalizadas alrededor
de las posiciones de equilibrio:

1X
U (q1 , q2 , . . . , qn ) ≈ Ajk qj qk
2 j,k

donde qi son las coordenadas generalizadas y Ajk son parámetros del potencial que usualmente
pueden obtenerse a partir de un cálculo de química cuántica. La energía cinética puede escribirse
en términos de las velocidades generalizadas q̇

1X
T (q̇1 , q̇2 , . . . , q̇n ) ≈ Mjk q̇j q̇k .
2 j,k

Aplicando la ec. de Lagrange:


∂L d ∂L
− =0
∂qj dt ∂ q̇j
con L = T − U tenemos:
n
X
(Ajk qj + Mjk q̈j ) = 0
j=1

con k = 1, 2, . . . , n. Realizando el reemplazo qj = xj eiωt obtenemos el siguiente sistema de


ecuaciones homogéneo
n
(Ajk − Mjk ω 2 )xj = 0
X

j=1

que tiene solución no trivial si


det[A − Mω 2 ] = 0.

Este es un ejemplo sencillo en el cual es necesario calcular el determinante de una matriz, y poder
resolver un sistema de ecuaciones lineales.
En general, podemos dividir los métodos numéricos para matrices en dos grandes áreas:

• Resolución de sistemas lineales.

1
• Diagonalización de matrices.

El cálculo de la matriz inversa A−1 de una matriz de n × n puede reducirse a la resolución de n


sistemas de ecuaciones lineales. Por otra parte, el cálculo del determinante de una matriz puede
realizarse a través de la descomposición en determinantes menores a lo largo de la columna j
n
X
det[A] = (−1)i+j Aij det[Rij ]
i=1

donde Rij es la matriz de orden (n−1)×(n−1) que se obtiene removiendo la fila i y la columna j
de la matriz A. Este es un ejemplo de algoritmo recursivo, en el cual, para calcular el determinante
de orden n es necesario conocer el determinante de orden n − 1. Este es un ejercicio interesante
de programación, aunque, como veremos, no es la mejor forma de calcular el determinante.
En el cálculo numérico con matrices, es de fundamental importancia reconocer el costo com-
putacional de cada operación a realizar. Usualmente, dada una matriz de tamaño n × n, el costo de
estas operaciones se mide en términos de la dimensión n de la matriz. La mayoría de los métodos
que veremos son de orden n3 . Entonces, por ejemplo, la diferencia en el número de operaciones
entre utilizar una matriz de 10 × 10 y una de 12 × 12 es de: 123 − 103 = 1728 − 1000 = 728
operaciones. Es decir que un aumento pequeño en el tamaño de la matriz implica un incremento
de alrededor del 70% en el número típico de operaciones!!!!

I. SISTEMAS DE ECUACIONES LINEALES

Definiremos el sistema de ecuaciones lineales de la siguiente manera:

Ai1 x1 + Ai2 x2 + Ai3 x3 + . . . + Ain xn = bi

para i = 1, 2, . . . , n. Definiendo el vector de incógnitas x = (x1 , x2 , . . . , xn ) como una matriz de


n × 1, el sistema se puede escribir como

Ax = b.

Por ejemplo,     
 1 2 3   x1   3 
    

   x2
−3 1 5   
 = 
 .
−2 
    
2 4 −1 x3 1
Antes de continuar, es conveniente definir las matrices triangulares superiores U tales que U ij = 0
para i > j y las matrices triangulares inferiores L con Lij = 0 para i < j.

2
A. El método de Gauss

Sabemos que existen diversas operaciones elementales que se pueden realizar en estos sistemas
de ecuaciones:

• Se pueden intercambiar el orden de dos ecuaciones

• Se puede reemplazar una ecuación por una combinación lineal de esta ecuación y otra.

• Se pueden intercambiar las incógnitas.

Estas operaciones no alteran la solución. Cada una de estas operaciones implica realizar determi-
nados cambios en la matriz Ay en b. Por otra parte, es claro que la resolución de un sistema de
ecuaciones en los cuales A es una matriz triangular superior o inferior es muy sencilla. En efecto,
si tenemos     
 1 2 3   x1   3 
    
 0 7 14   x  =  7 
  2   
    
0 0 −7 x3 −7
entonces x3 = 1, y sustituyendo

1
x2 = (7 − 14 × 1) = −1
7

y
x3 = 3 − 2 × (−1) − 3 × 1 = 2,

es decir x = (2, −1, 1).


El método de Gauss consiste en realizar np operaciones elementales sobre la matriz A de modo
tal que se pueda obtener una forma triangular superior o inferior de dicha matriz, procediendo a
resolver este último problema mediante sustituciones. El método de Gauss-Jordan para obtener
la inversa de una matriz va aún más allá y requiere que después de realizadas las operaciones
elementales, la matriz original A quede transformada en la identidad.
Cuál sería el algoritmo para realizar el método de Gauss? Para fijar ideas, pensaremos en una
matriz de 3 × 3:  
 A11 A12 A13 
 
A
 21 A22 A23 

 
A31 A32 A33

3
Primero, multiplicamos la primer fila y el término independiente b1 por −Ai1 /A11
   
A11 A12 A13  A21 A12 A21 /A11 A13 A21 /A11 
A21 /A11 × 


  
A
 21 A22 A23

 → A
 21 A22 A23 

   
A31 A32 A33 A31 A32 A33

y la sumamos a todas las filas con i > 1,


 
(1) (1)
 1 A12 A13 
A(1) (1) (1) 
 
=
 0 A22 A23  .
 
(1) (1)
0 A32 A33

De esta manera, eliminamos los coeficientes de A de la primer columna, excepto claro el A 11 .


(1)
De la misma manera, ahora multiplicamos la segunda fila y el término independiente b 2 por
(1) (1)
−Ai2 /A22 y la sumamos a todas las filas con i > 2.
En el ejemplo anterior
     
 1 2 3 3  f1 × 3 + f 2 1 2 3 3  f1 × (−2) + f3  1 2 3 3 


     
A |b = 
 −3 1 5 −2 
 →  0 7 14 7


 →  0 7 14 7 
 
     
2 4 −1 1 f2 2 4 −1 1 f 0 0 −7 −7

es decir que  
1 2 3 3 



A(1) b(1)
 
=
 0 7 14 7  .

 
0 0 −7 −7

En el caso general, si después de np operaciones elementales, obtenemos A(np ) ≡ U, entonces las


soluciones son  
n
1  (np ) X
xi = bi − Uij xj  .
Uii j=i+1

Pivoting

El ejemplo anterior es bastante sencillo. Sin embargo, podría ocurrir que en algun paso, el
elemento diagonal que se utiliza como denominador Aii sea cero (a este elemento se lo llama
pivote). Más aún, podría ocurrir que el pivote no sea cero, y así y todo el método de Gauss sea
inestable frente a errores de redondeo. En todos los casos en los cuales el pivote es un número
pequeño, puede haber problemas.

4
Ejemplo: Un ejemplo claro son las matrices de Hilbert, definidas como
1
Hij =
i+j −1
Estas matrices contienen números fraccionarios que no pueden representarse exactamente en la
aritmética binaria. Por ejemplo, para la matriz de Hilbert de 6 × 6, el sistema

H6×6 x = b

con bT = (6, 5, 4, 3, 2, 1) tiene como solución

x = (174, −5880, 45360, −131040, 157500, −66528)

y sin embargo, una rutina numérica obtiene un error de 1×10 −4 para dicha solución. Es importante
observar que estos sistemas contienen una combinación letal desde el punto de vista numérico:
numeros fraccionarios no representables en binario, y números extremadamente grandes.
En estos casos, es conveniente elegir el pivote como el máximo valor entre los elementos de
una columna. En el ejemplo, elegiríamos−3 como el pivote. Esto significa intercambiar la primer
y segunda filas (esto es, las ecuaciones) de la matriz A.

B. Descomposición LU

Vimos antes que el método de Gauss se basaba en una serie de operaciones elementales. Cada
una de estas operaciones puede pensarse como el producto de ciertas matrices R y la matriz A.
Por ejemplo, la matriz  
 0 0 1
 
R13 = 
 0 1 0

 
1 0 0
intercambia las filas 1 y 3 de A. En efecto
    
 0 0 1  1 2 3   2 4 −1 
    
R13 A = 
 0 1 0   −3 1 5
  =  −3 1 5  .
  
    
1 0 0 2 4 −1 1 2 3

Entonces, la matriz triangular superior A(np ) que se obtiene al final de este procedimiento, puede
verse como
UA(np ) = R(1) R(2) R(3) . . . R(np ) A = RA

5
es decir que A = R−1 U. Es posible probar que R es una matriz triangula inferior y que la inversa
de una matriz triangular inferior es otra matriz triangular inferior.
Por otra parte, puede darse el caso en que uno tenga que resolver una serie de sistemas de
ecuaciones, en los cuales sólo cambia el vector b; como por ejemplo cuando uno calcula la inversa
de una matriz. Entonces es útil tener una descomposición de la matriz A que nos permita resolver
el problema eficientemente. Esta es la denominada descomposición LU en la cual la matriz Ase
escribe como un producto de una matriz triangular inferior y una superior. Si tenemos

Ax = b

y A = LU entonces
Ax = LUx = b.

Llamando
Ux = y

tendremos que resolver el sistema


Ly = b.

Para obtener los coeficientes de la descomposición, se utiliza el siguiente algoritmo:

1. Se eligen Lii = 1, para i = 1, 2, . . . , n.

2. Para cada j,
i−1
X
Uij = Aij − Lik Ukj
k=1
 
j−1
1  X
Lij = Aij − Lik Ukj 
Ujj k=1

Por ejemplo, si  
 4 2 3
 
A=
 −3 1 4 

 
2 4 5
entonces L11 = 1, L22 = 1, L33 = 1 y para j = 1

U11 = 4
1 3
L21 = (−3) = −
4 4
1 1
L31 = (2) =
4 2

6
para j = 2

U12 = 2
3 5
U22 = 1 − L21 U12 = 1 − (− ) × 2 =
4 2
2 2 1 6

L32 = (4 − L31 U12 ) = 4− ×2 =
5 5 2 5
etc. Tenemos que   
 1 0 0  4 2 3 
  
A= 3 5 25 
 −4 1 0   0 2 4 

  
1 6
2 5
1 0 0 −4
Observemos también que
det[A] = det[L] det[U]

y el algoritmo siempre deja det[L] = 1,con lo cual el determinante de Aes simplemente el pro-
ducto de los elementos de la diagonal de U.
Puede ser posible todavía que algún elemento de la diagonal de U sea nulo, con lo cual es
necesario hacer pivoting.
Ejemplo: Calcular la descomposición LU de la matriz
 
 1 2 6 
 
B=
 4 8 −1 

 
−2 3 5

(Hint: intercambiar las filas 2 y 3).


Si la matriz no tiene descomposición LU, entonces es una matriz singular.
Con la descomposición LU de la matriz, es posible entonces calcular los valores de y y la
solución x a nuestro problema, dado que en ambos casos las matrices son triangulares
b1
y1 =
L11
 
i−1
1  X
yi = bi − Lij yj 
Lii j=1

y
yn
x1 =
Unn
 
n
1  X
xi = yi − Uij xj  .
Uii j=i+1

7
Cualquiera de ambos métodos es de orden n3 , aunque el método de la descomposición LU es un
factor 3 más rápido.

C. Búsqueda de ceros en una funcion de varias variables

Supongamos que buscamos los ceros de una función de varias variables

f (x) = 0

donde f = (f1 , f2 , . . . , fn ) y x = (x1 , x2 , . . . , xn ). Si la solución de la ecuación es x0 , podemos


expandir en desarrollo de Taylor alrededor de ese punto

f (x0 ) ≈ f (x) + ∆x · ∇f (x) + . . .

que es lo mismo que


f (x0 ) ≈ f (x) + A(x)∆x = 0

donde ∆x = x − x0 y
∂fi
Aij (x) =
∂xj
de tal manera que obtenemos el método de Newton para búsqueda de ceros en el caso multidimen-
sional
x0 ≈ x − A−1 (x)f (x)

y donde se hace necesario calcular la inversa de la matriz de derivadas A.

II. DIAGONALIZACIÓN DE MATRICES

El problema de diagonalización de matrices aparece en numerosos problemas de la física. Dada


una matriz A de n × n, el problema de autovalores consiste en encontrar λ y x tales que

Ax = λx,

donde x es el autovector correspondiente al autovalor λ. Los valores de λ se obtienen resolviendo


la ecuación secular
det[A − λ1] = 0

donde 1 es la matriz identidad. Para una matriz de n × n, existen en general n autovalores.

8
Uno de los casos más importantes en física corresponde al problema de autovalores de una
matriz hermítica. La matriz A es hermítica si

A = A†

donde A† es la matriz traspuesta conjugada de A. El problema de autovalores de una matriz


hermítica tiene las siguientes propiedades

1. Los autovalores de una matriz hermítica son reales.

2. Los autovectores forman una base ortonormal.

3. Una matriz hermítica puede transformarse en una matriz diagonal a través de transforma-
ciones de similaridad con matrices unitarias.

Más aún, el problema de autovalores de una matriz de n × n hermítica compleja puede trans-
formarse en un problema de autovalores para una matriz simétrica real de 2n × 2n. En efecto,
si
A = B + iC

entonces B es una matriz real simétrica y C es una matriz real antisimétrica. El problema de
autovalores es:
(B + iC) (y + iz) = λ (y + iz)

que puede escribirse como     


 B −C   y  y
   = λ .
C B z z
Éste es un problema de autovalores para una matriz real simétrica.

A. Matrices Tridiagonales

El caso más sencillo de diagonalización corresponde a matrices tridiagonales de la forma


 
a b 0
 1 1
... 0 
 

 b1 a 2 b2 . . . 0 

 
0 b2 a3 . . . 0
 
 
.. .. .. . .
 
. . . . bn−1
 
 
 
 
0 0 0 bn−1 an

9
Estas matrices tienen propiedades que hacen que el cálculo de autovalores y autovectores sea más
sencillo. En primer lugar, el determinante de la matriz tridiagonal det[A−λ1] es equivalente a la
ecuación polinomial pn (λ) = 0, que puede obtenerse mediante la recursión

p0 (λ) = 1
p1 (λ) = a1 − λ
pi (λ) = (ai − λ)pi−1 (λ) − b2i−1 pi−2 (λ)

En principio, se podría usar una rutina de búsqueda de ceros para obtener las raíces de p n (λ). Sin
embargo, este polinomio tiene las siguientes propiedades

1. Todas las raíces de pn (λ) = 0 se encuentran en el intervalo [− kAk , kAk] donde kAk está
definido como  
Xn 
kAk = max  |Aij | .
j=1

2. El número de raices de pn (λ) = 0 con λ > λ0 esta dado por el número de acuerdos de los
signos de pj (λ0 ) y pj−1 (λ0 ) para j = 1, 2, . . . , n. Si por ejemplo, pj (λ0 ) = 0, se le asigna el
signo del polinomio precedente pj−1 (λ0 ).

Es evidente que utilizando estas dos propiedades, es posible diseñar un algoritmo numérico que
encuentre los autovalores utilizando el método de bisección. Una vez obtenidos los autovalores,
el problema de obtener los autovectores se reduce a resolver un sistema de ecuaciones para cada
autovalor obtenido.

B. El método QR

En este método, la matriz A a diagonalizar se descompone en un producto de una matriz uni-


taria Q y una matriz triangular superior R,

A = QR.

Si construimos la matriz
A0 = RQ,

como QQ† = 1, entonces R = Q† A y

A0 = Q† AQ,

10
es decir, A0 es una transformación unitaria de A. Esta transformación preserva los autovalores. Se
puede probar que luego de una serie de estas transformaciones, la matriz original A se transforma
en una matriz triangular superior cuya contiene los autovalores de A. Entonces, comenzando con
A(0) = A, y definiendo
A(k) = Qk Rk

tendremos
A(k+1) = Q†k A(k) Qk .

En el caso general, estas transformaciones dan un algoritmo de orden n 3 . Sin embargo, en el caso
de matrices tridiagonales, el algoritmo es de orden n. Más aún, es posible construir la transforma-
ción a partir de matrices de rotación P(p, q):
 
1
..
 
.
 
 
 
 
c ... s
 
 
.. ..
 
. 1 .
 
P(p, q) = 



 
−s . . . s
 
 
..
 
.
 
 
 
 
1

tales que c2 + s2 = 1, Ppp (p, q) = Ppp (p, q) = c y Ppq (p, q) = −s, Pqp (p, q) = s. En efecto, se
pueden elegir c y s de modo tal que al aplicar la transformación

A0 = PT (p, q)AP(p, q)

se obtenga que A0pq = 0. Para ello, el ángulo de rotación es tal que

c2 − s 2 aqq − app
cot 2φ = = .
2sc 2apq

Se puede probar que la rotación en angulos menores que π/4 es la más estable.
Volviendo a la transformación Q, se la puede construir como una serie de rotaciones que elim-
inen los elementos de las sub y supra diagonales:

Q†k = Pk (1, 2)Pk (2, 3) . . . Pk (n − 1, n).

11
C. Transformación a una matriz tridiagonal

Hemos visto que resulta más o menos sencillo obtener los autovalores y autovectores de una
matriz tridiagonal. En esta sección describiremos el método de Householder para transformar una
matriz real y simétrica a la forma tridiagonal. Para ello definimos la matriz de Householder como

P = 1 − 2wwT

donde w es un vector real con |w|2 = 1. La matriz P es ortogonal, pues


  
P2 = 1 − 2wwT 1 − 2wwT = 1 − 4wwT + 4(wwT )2 = 1.

Supongamos entonces que escribimos


uuT
P=1−2
|u|2
y elijamos u = x + |x| e1 donde x es el primer vector columna de la matriz A a transformar, y
e1 = (1, 0, 0, . . . , 0). Notemos que

|u|2 = 2 |x|2 + 2 |x| e1 x = 2 |x|2 + 2 |x| x1

Entonces
uuT
!
Px = 1−2 2 x
|u|
u (x + |x| e1 )T x
= x−2
|x + |x| e1 |2
 
u |x|2 + |x| x1
= x−2
2 |x|2 + 2 |x| x1
= x − u = − |x| e1

Esto nos muestra que la aplicación de P así definido transforma la columna x en una columna con
ceros en todos los elementos excepto el primero. Entonces, si elegimos como primer vector x a
los últimos n − 1 elementos de la primer columna de la matriz A, x = (A21 , A31 , . . . , An1 ) :
    
 1 0 0 0   A11 A12 . . . A1n   A11 A12 . . . A1n 
. ..
  A21 . .
    

 0  
  k
 . 

P1 A = 
 .
  =  .
 
P1n−1   ..  ..
  

 0 

 


    
0 A11 0

12
donde k = − |(A21 , A31 , . . . , An1 )| . La transformación ortogonal completa será
 
 A11 k . . . 0 
 .. 
 k
 . 
A(2)

= P1 AP1 =  .
 .
 ..


 
 
0
En el siguiente paso, construimos:
 
1 0 0 0
 
0 1 0 0


P2 =  
P2n−1
 
0 0 
 
 
0 0
donde x ahora contiene los n − 2 elementos de la segunda columna de A (2) . El procedimiento
entonces garantiza que al final de n − 2 transformaciones, la matriz A (n−2) será tridiagonal.
Una forma más sencilla de aplicar este procedimiento es definir
Au
p=2
|u|2
entonces
uuT
!
AP = A 1 − 2 2 = A − puT
|u|
y
A0 = PAP = A − quT − uqT

donde
uT p
q=p− u.
|u|2
a. Ejemplo La transformación de Householder para
 
 4 2 2 1
 

 2 −3 1 1 

A= 




 2 1 3 1 

 
1 1 1 2
es  
 4 −3 0 0 
 

−3 2 3.162277 0 
A0 =
 
 
 

 0 3.162277 −1.4 0.2 

 
0 0 0.2 1.4

13
b. Ejemplo Dada  
 2 −1 −1 
 
A=  −1
 2 −1 
 
−1 −1 2
mostrar que p3 (λ) = −(−4 + λ)(−1 + λ)2 . Probar calculando el determinante de A − λ1 y con
la recursión anterior.

14

You might also like