Está en la página 1de 4

Practica de Matlab.

Autovalores y autovectores

Algebra Lineal. Curso 2010-11

En esta pr
actica vamos a ver algunas funciones que nos permiten calcular los autovalores y autovectores
de una matriz. Adem as, expondremos un metodo numerico para calcularlos y lo programaremos en
r
Matlab .

1. Algunos comandos u
tiles
La orden

>> poly(a)

aplicada a una matriz a devuelve el polinomio caracterstico. Y hemos visto que la orden roots permite
calcular sus races (los autovalores). Pero Matlabr dispone de ordenes mas directas. Escribiendo

>> eig(a)

encontramos los autovalores de a, y con una orden del tipo

>> [x,d]=eig(a)

los autovectores y autovalores. En general, la orden anterior devuelve una matriz x y una matriz diagonal
d, con la condici
on de que x*d=a*x. Pero esta matriz x no tiene por que ser inversible, es decir, realiza
esta computacion aunque a no sea diagonalizable. Esto se debe al caracter numerico de los calculos
que hace Matlabr y a la alta sensibilidad de la condicion de diagonalizacion de una matriz por peque
nos
cambios en los coeficientes.
Ejercicio 1
Escribe una matriz A aleatoria, del tama no que quieras. Calcula una matriz P y una matriz
diagonal D tales que A = P DP 1 , y compruebalo.

Matlabr ofrece la posibilidad de realizar calculos exactos de manera simbolica. Para ellos, podemos
definir la matriz empleando la orden

>> b=sym([2 1 0 4 7; 0 2 4 1 -3; 0 0 1 8 -2; 0 0 0 1 5;0 0 0 0 3])

b =

[2 1 0 4 7]
[ ]
[0 2 4 1 -3]
[ ]
[0 0 1 8 -2]
[ ]
[0 0 0 1 5]
[ ]
[0 0 0 0 3]

1
Observemos que la matriz est
a expresada de manera diferente a la habitual. Ahora, la orden

>> [x,d]=eig(b)

x =

[105/2 1 4]
[ ]
[71/2 0 -4]
[ ]
[ 9 0 1]
[ ]
[ 5/2 0 0]
[ ]
[ 1 0 0]

d =

[3 0 0 0 0]
[ ]
[0 2 0 0 0]
[ ]
[0 0 2 0 0]
[ ]
[0 0 0 1 0]
[ ]
[0 0 0 0 1]

proporciona una lista m


axima de autovectores independientes.

2. M
etodo de las potencias
Describimos en esta secci
on un metodo numerico para calcular el autovalor de modulo maximo de una
matriz. Supongamos que A es una matriz diagonalizable de tama no n, con autovalores verificando

|1 | > |2 | |3 | |n | ,

es decir, con un unico autovalor de modulo maximo, y con multiplicidad algebraica 1. Esta situacion es
generica si se toma una matriz arbitraria de tipo numerico.
Sea x0 un vector casi arbitrario, y xk = Ak x0 . En las condiciones del enunciado, puede demostrarse
que la direcci on de xk se aproxima a la de un autovector correspondiente al autovalor 1 , a condicion de
que, si {v1 , v2 , . . . , vn } es una base de autovectores, vi asociado a i , y escribimos x0 = 1 v1 + 2 v2 +
+ n vn , se tenga que 1 6= 0. Asimismo, xk+1 1 xk . Esto es la base del metodo de las potencias
que pasaremos a implementar.
Este vector xk puede tender a cero o a infinito, con lo que hay que normalizarlo para que esto no
ocurra. Para ello hay varias posibilidades: una de ellas es reducir al valor 1 la componente de x0 de mayor
valor absoluto, dividiendo por ella. Nos pueden ser u tiles los comandos abs y max de Matlabr. Otra es
dividir por la norma de x0 . La orden norm es entonces necesaria.
Ejercicio 2
Busca en la ayuda de Matlabr informacion sobre los comandos abs, max, y norm aplicados a
vectores o a matrices. Escribe un programa en Matlabr que tome un vector y lo divida por una
componente cuyo m odulo sea maximo.

2
Vamos a programar el metodo de las potencias siguiendo el siguiente esquema, que corresponde a la
primera de las tecnicas de normalizaci
on que hemos comentado:

Dados A, x0 , numiter
Desde k = 1 hasta numiter

xk = Axk1
Definimos k como una componente de xk de modulo maximo.
xk = xk /k % Normalizamos el vector xk .
Fin del bucle.
Devuelve xnumiter , numiter .

Es un esquema muy simple, donde numiter es el n


umero de iteraciones que efectuamos, que es fijo en
r
este programa. En c
odigo de Matlab tenemos lo siguiente:

function [x,l]=potencia(a,v)
% Metodo de las potencias aplicado a una matriz a, a partir de un vector v
% Devuelve un autovector x y el autovalor l de modulo maximo
numiter=100;
x=v(:); %Esta orden hace de v un vector columna, y lo llama x
for k=1:numiter
x=a*x;
[m,p]=max(abs(x));
l=x(p);
x=1/l*x;
end
return

Como hemos dicho, una forma alternativa de programar es dividir en cada paso el vector por su
norma. Es decir, a partir del vector yk , de norma 1, calculamos xk+1 = Ayk . Para valores de k grandes
se tiene que xk+1 1 yk , y como yk tiene norma 1, 1 resulta ser aproximadamente el producto escalar
r
de xk+1 y yk . En c
odigo de Matlab :

function [y,l]=potencia2(a,v)
% Metodo de las potencias
% En cada paso se divide el vector que se obtiene por su norma
% El numero de iteraciones es fijo
numiter=100;
x=v(:);
y=x/norm(x);
for k=1:numiter
x=a*y;
y=x/norm(x);
end
l=x.*y;

Fijar el n
umero de iteraciones no es habitualmente una buena estrategia. Es mas eficaz poner un lmite
a dicho numero, y fijar una precisi
on. Cuando se considere que esta precision se ha alcanzado, detenemos
el proceso. Una posibilidad es ir calculando los valores del autovalor en cada paso, y detenernos cuando
este valor apenas se modifique. Modificamos el codigo de Matlabr:

3
function [y,l]=potencia3(a,v)
% Metodo de las potencias
% En cada paso se divide el vector que se obtiene por su norma
% numiter es el numero m\{a}ximo de iteraciones
% eps es la precision fijada
%
% Si la diferencia entre dos valores consecutivos calculados de l
% es menor que eps, el programa se detiene
numiter=100;
eps=1e-10;
x=v(:);
y=x/norm(x);
l=0;
for k=1:numiter
x=a*y;
y=x/norm(x);
lc=x.*y;
if abs(l-lc)<eps
return
end
l=lc;
end
return

3. Ejercicios
1. La orden compan construye, a partir de un polinomio, una matriz cuyo polinomio caracterstico es
el dado.
a) Usa dicha orden para construir una matriz cuyo polinomio caracterstico sea x5 32x4 +23x3
10x + 9.
b) Calcula la raz de m
odulo mas grande de dicho polinomio, empleando alguno de las rutinas
expuestas en esta practica.
c) Verifica el resultado obtenido con la orden roots.
2. Elabora un programa que, a partir de un polinomio, calcule su raz de modulo mas grande.
3. El metodo de las potencias, aplicado a la inversa de una matriz A, permite calcular el autovalor de
modulo mnimo, pues es un autovalor de A si y solo si 1 lo es de A1 . Modifica alguno de los
programas de esta practica para que pueda calcularse el autovalor de modulo mnimo de A.
4. Por ultimo, observa que es un autovalor de A si y solo si lo es de A I. Esto permite
calcular el autovalor m
as alejado a . Modifica el programa para que realice esta operacion.

También podría gustarte