B Aplicaciones de Alg Lineal PDF
B Aplicaciones de Alg Lineal PDF
B Aplicaciones de Alg Lineal PDF
e me importa?
(aplicaciones del
algebra lineal)
con res
umenes de teora
Fernando Chamizo Lorente
Algebra
II, 1o de ingeniera inform
atica
Curso 2008-2009
r
o
L
t e Fe rn
en
a
2008/2009
o z
i
m a h
n
d
o
C
Pr
ologo
Entre las preguntas dinamiteras que se suelen disparar contra las investigaciones y resultados matematicos esta el famoso Y eso para que sirve?.
Los matematicos tampoco ayudamos mucho pues por una parte creemos en
general que las Matematicas son un arte con una justificacion primordialmente estetica, y por otro lado no solemos estar involucrados en sus aplicaciones
reales que consideramos propiedad privada de los ingenieros.
Evidentemente cualquiera con un mediano conocimiento sabe que las aplicaciones estan ah y que las Matematicas viven en objetos cotidianos convenientemente agazapadas para no asustar a las buenas gentes y nuestra era
tecnologica y su paladn el ordenador han multiplicado esa presencia. Por
ejemplo, los codigos correctores de errores en tiempo real empleados en la
reproduccion de un CD se basan en espacios vectoriales y polinomios sobre
Zp ; la criptografa mayoritariamente empleada en las comunicaciones seguras
por la red requiere propiedades de los n
umeros primos y otra cada vez mas
pujante propiedades de las curvas elpticas; en nuestro videojuego favorito lo
que llega a nuestra pantalla proviene de unas transformaciones lineales que
indican la posicion de la camara y el resto de la geometra de la escena; el
metodo por el que las fotos extradas de nuestra maquina fotografica ocupan
tan poco en el ordenador en relacion con su detalle depende del analisis de
Fourier. . . No deberamos saber mas Matematicas? Bajemos de las nubes.
No podemos sugerir a los pacientes que estudien fsica cuantica porque las
resonancias magneticas se basen en el espn, ni tampoco debemos esperar una
correlacion entre la audiencia y las solicitudes de libros de electromagnetismo
porque haya unas ecuaciones en derivadas parciales creadas por Maxwell y
otros que permitan que se vea la television. Con esto llegamos a la pregunta
clave: Y a m que me importa?. Si no eres ingeniero, fsico, informatico
o ciudadano curioso probablemente nada. Sin embargo como estudiante de
informatica al escribir programas mnimamente complejos te encontraras con
problemas que tras un proceso mas o menos arduo de traduccion son ejercicios de las Matematicas que has cursado y dominar esas asignaturas que te
pueden parecer accesorias te dara un poder extraordinario. Ademas siempre
es una inversion segura porque quiza dentro de unos a
nos haya nuevos sistemas operativos, se cambien los protocolos de comunicacion, se hable de la
Web n.0, haya formatos de audio y vdeo totalmente diferentes y tengas que
estudiar muchas cosas de nuevo relegando a la inutilidad parte de los temarios de algunas asignaturas pero, no te preocupes, el teorema de Pitagoras
lleva muchsimos siglos en los libros y sigue siendo extremadamente u
til.
Trataremos de mostrar en las paginas siguientes algunas aplicaciones del
algebra lineal, posiblemente sesgadas, incompletas o inexactas por provenir
de un matematico no aplicado en el sentido que se prefiera, esperando que
sean suficientes para justificar las lneas anteriores. Debido al p
ublico al que
esta dirigido el nivel matematico esta rebajado en perjuicio de los detalles,
se incluye bibliografa para el que quiera conocerlos.
Fernando Chamizo
Departamento de Matematicas
Universidad Autonoma de Madrid
Febrero 2008
Finalmente estos apuntes no suscitaron interes el curso 2007-2008. Nuestro proposito es retomar su redaccion en este.
Fernando Chamizo
Departamento de Matematicas
Universidad Autonoma de Madrid
Febrero 2009
Indice general
I
Aplicaciones
1. Valorando p
aginas
1.1. El modelo basico . . . . . . . .
1.2. Limitaciones teoricas y practicas
1.3. Un algoritmo iterativo . . . . .
1.4. Un modelo revisado . . . . . . .
1.5. Bibliografa . . . . . . . . . . .
2. Une los puntos
2.1. Union exacta . . . . . . . . . .
2.2. Interpolacion de Lagrange . . .
2.3. Splines c
ubicos . . . . . . . . .
2.4. Un ejemplo en mas dimensiones
2.5. Bibliografa . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
7
8
10
13
.
.
.
.
.
15
16
16
20
25
26
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
28
29
32
36
40
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
41
45
49
53
57
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
II
Res
umenes de teora
5. Temario
5.1. Ecuaciones lineales y su resolucion . . . . . . . . . . .
5.2. Algebra
matricial . . . . . . . . . . . . . . . . . . . .
5.3. Espacios vectoriales . . . . . . . . . . . . . . . . . . .
5.4. Bases y dimension . . . . . . . . . . . . . . . . . . .
5.5. Operaciones con espacios vectoriales . . . . . . . . . .
5.6. Rango y cambio de base . . . . . . . . . . . . . . . .
5.7. Determinantes y sus aplicaciones . . . . . . . . . . .
5.8. Diagonalizacion de aplicaciones lineales . . . . . . . .
5.9. Espacios vectoriales eucldeos . . . . . . . . . . . . .
5.10. Vectores y proyecciones ortogonales . . . . . . . . . .
5.11. Aplicaciones ortogonales y aplicaciones autoadjuntas
5.12. Diagonalizacion de formas cuadraticas . . . . . . . .
59
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
63
66
68
71
73
74
76
78
81
83
85
87
Parte I
Aplicaciones
n 1
Aplicacio
Valorando p
aginas
La popularizacion de la red ha estado ligada al propio desarrollo de la
empresa Google y de su producto estrella, el motor de b
usqueda conocido
bajo el mismo nombre. Hay una gran diferencia para empresas y particulares
entre que su pagina este en los primeros lugares al buscar un termino com
un
o que aparezca en la pletora de paginas que nadie mira. Probablemente el
funcionamiento preciso del motor de b
usqueda o incluso el detalle de como
ordena las paginas es un secreto celosamente guardado, pero el algoritmo
basico usado en Google Directory que asigna la importancia de cada pagina
para su ordenacion en el proceso de b
usqueda es p
ublico y constituye una idea
sencilla, desafortunadamente patentada, para cualquiera que sepa algebra
lineal. Seg
un Google este algoritmo es el corazon de su motor de b
usqueda.
1.1.
El modelo b
asico
diera una seleccion al azar de las paginas que lo contienen, sera bastante
in
util. La puntuacion de cada pagina se debe guardar en una gran base de
datos que hay que consultar en las b
usquedas y actualizar de vez en cuando.
Una pagina con muchos enlaces apuntando a ella seguramente es muy
importante pero esta idea necesita precisarse si queremos tener relaciones
cuantitativas. Por un lado no es lo mismo que haya un enlace a tu pagina
desde la de Microsoft que desde la de tu primo (si no se apellida Gates)
as que la importancia debe transmitirse por los enlaces. Por otra parte si en
una pagina importante, por ejemplo un portal muy visitado, hay enlaces a
mil paginas de usuarios, no es justo que estas hereden toda la importancia
del portal, a fin de cuentas como cada pagina es una entre mil, solo debiera
heredar la milesima parte de la importancia del portal.
Matematicamente formulamos el modelo diciendo que la importancia de
cada pagina es la suma ponderada de las importancias de las paginas que
apuntan a ella, donde ponderada significa que debemos dividir estas importancias entre el n
umero de enlaces salientes. El modelo refleja lo que ocurrira
si uno navegase siguiendo enlaces al azar (en Matematicas a esto se le llama
una cadena de Markov ), la importancia convenientemente normalizada sera
el porcentaje de visitas.
Veamos un ejemplo muy simplificado de una red con solo tres paginas que
aclare el torrente de palabras anterior. Indicaremos las paginas con puntos y
los enlaces con flechas (en Matematica Discreta de 2o se dira que esto es un
grafo dirigido).
1
x1
x2
x3
= importancia de la pagina 1
= importancia de la pagina 2
= importancia de la pagina 3
Seg
un nuestro modelo x1 = x2 /2 + x3 , la importancia de x2 cuenta la mitad
porque se reparte entre dos paginas; x2 = x1 porque desde 1 solo se puede
llegar a 2 y es la u
nica forma de hacerlo, si nos obligan a navegar siempre
que visitemos 1 tambien visitaremos 2; finalmente x3 = x2 /2 porque a 3 solo
llega media importancia de x2 , un enlace de dos.
Si pensamos un poco antes de hacer nada, solo mirando al esquema nos
daremos cuenta de que x3 es menos importante que las otras. Ahora con lapiz
4
x1 = x2 /2 + x3
x2 = x1
=
x3 = x2 /2
x1 = 2t
x2 = 2t
x3 = t
4
3
x1
x2
x3
x4
= x4 /3
= x4 /3
x = x2 = x3 = t
= 1
= x4 /3
x4 = 3t
= x1 + x2 + x3
Seg
un lo que caba esperar cada nodo satelite importa la tercera parte que
el nodo central.
Ya que sabemos el truco, ejerzamos de cientficos (o de SMSianos) empleando un poco de lenguaje sintetico. Un momento de reflexion nos permite
deducir que los sistemas que tenemos que resolver son de la forma ~x = A~x
donde A MN N (R) es la matriz que tiene como columna j el vector de
probabilidades de ir a los otros nodos: sus coordenadas son 0 o 1/no enlaces
desde j. El modelo nos sugiere que hay infinitas soluciones, entonces supongamos que nos podemos permitir xN = 1. El nuevo sistema sera ~y = B~y + ~v
donde B es el primer bloque N 1 N 1 de A y ~v son las N 1 primeras coordenadas de la u
ltima columna. El sistema de ecuaciones lineales a
resolver es por tanto (I B)~y = ~v .
Como aspirantes a informaticos deberamos ser capaces de escribir un
programa que haga el trabajo por nosotros. Afortunadamente no tendremos
que teclear y depurar lneas de codigo en C o en Java, o buscar bibliotecas,
5
5
4
0
0 1/3 1/3 0
0 0 0
1/4 0
0
0
0
0 0 0
0 1/2 0
0
0
0 0 0
0
0 1/3 0 1/2 0 0 1
A=
0
0
0
0 1/2 0 0
0
1/4 0
0 1/3 1/2 1/2 0 0
1/4 0
1/3
0
0
0 1 0
0,400000
0,100000
0,050000
1,150000
.
~x =
0,266667
0,533333
0,883333
1,000000
1.2.
Limitaciones te
oricas y pr
acticas
1.3.
Un algoritmo iterativo
4,2994
3,1519
3,7205
3,6071
~x1 = 3,1416 , ~x2 = 4,2994 , ~x3 = 3,1519 , . . . ~x15 = 3,6160
1,5811
1,5708
2,1497
1,7990
y esto se acerca mucho a un vector de importancia valido que resuelve el
sistema ~x = A~x, dividiendo entre la u
ltima coordenada obtenemos algo muy
parecido a (2, 2, 1). Es una casualidad? Procedemos de la misma forma con
la matriz de la mara
na y para no cansarnos calculando escribimos unas lneas
con un peque
no bucle partiendo por ejemplo del vector con todo unos. Ya
8
puestos con las manos al teclado podemos normalizar el resultado para que
la u
ltima coordenada sea uno y comparar con el resultado exacto.
% Matriz de probabilidades
A=[
0/4,0/2,1/3,1/3,0/2,0/2,0/1,0/1; 1/4,0/2,0/3,0/3,0/2,0/2,0/1,0/1;
0/4,1/2,0/3,0/3,0/2,0/2,0/1,0/1; 0/4,0/2,1/3,0/3,1/2,0/2,0/1,1/1;
0/4,0/2,0/3,0/3,0/2,1/2,0/1,0/1; 1/4,1/2,0/3,1/3,0/2,0/2,0/1,0/1;
1/4,0/2,0/3,1/3,1/2,1/2,0/1,0/1; 1/4,0/2,1/3,0/3,0/2,0/2,1/1,0/1;
];
niter=15; %n
umero de iteraciones
x=ones(length(A),1); %todo unos
for n=1:niter %Bucle
x=A*x;
endfor
x/x(length(A)) %divide entre la
ultima coordenada
~xpar =
y
~xpar
2 , ~ximpar = 1
0 , ~ximpar 0 .
1
2
0
0
Se pueden buscar otros ejemplos raros oscilantes con periodos mas grandes.
Parece entonces que excepto en casos patologicos la sucesion ~xn = A~xn1
converge a una solucion de ~x = A~x. La palabra magica suena a analisis y
el profesor de esa asignatura te dira que si supones que la sucesion converge
a algo, digamos ~l = lm ~xn entonces tomando lmites obtendras ~l = A~l, es
decir, que ese algo es una solucion.
Usando la teora de autovalores y autovectores que veremos en este curso,
se infiere que en cierto sentido la situacion habitual debera ser la convergencia. Experimentando un poco se observa que para redes suficientemente
interconectadas este es de hecho el caso.
Revisemos ahora nuestras estimaciones del n
umero de operaciones. Si
9
hay 8 10 paginas y cada una tiene en promedio, digamos, 10 enlaces A~x
requerira 8 1010 operaciones que es el n
umero de componentes no nulas de
un los informes Google hace entre 50 y 100)
A. Si hacemos 80 iteraciones (seg
9
1.4.
Un modelo revisado
Tenemos un modelo matematico razonable y un algoritmo pero desafortunadamente no podemos afirmar con seguridad que funciones correctamente
para el mapa de todas las webs y la eficiencia del algoritmo esta extrapolada
de lo que ocurre con algunos ejemplos demasiado simples. Podramos cerrar
los ojos y aplicarlo igualmente o utilizar alg
un truco como promediar los resultados para eliminar oscilaciones (notese que en los dos contraejemplos los
promedios dan soluciones). Google no toma ese riesgo y modifica levemente el modelo haciendolo un poco menos realista para estar en situacion de
asegurarse el exito gracias a un resultado matematico y de paso tener cierto
control sobre la eficiencia.
El resultado matematico es un teorema de O. Perron y data de 1907
(quiza entonces le dijeron y eso para que sirve?). Traducido a nuestro lenguaje implica como caso particular que si A es una matriz cuyas columnas
son vectores con coordenadas estrictamente positivas y de suma uno, entonces ~xn = A~xn1 converge para cualquier vector inicial (positivo). Ya hemos
se
nalado que la convergencia implica que la sucesion tiende a la solucion
buscada de ~x = A~x.
A primera vista el teorema parece poco aplicable porque en nuestro caso
la matriz A esta tpicamente llena de ceros y eso era fundamental para que
los calculos fueran posibles en un tiempo razonable. La solucion pasa por un
cambio del modelo suponiendo que cierto porcentaje peque
no de veces nos
cansamos y en vez de seguir la lnea de enlaces saltamos a una pagina al
azar (que puede ser incluso la propia de partida). Esto no suena mal aunque
en rigor es poco realista que saltemos a paginas desconocidas. Tomemos por
10
0,1/4
0 1 0 0
0,1/4
0,1/4
e = 0,9+0,1/4 0,1/4
A= 1000
A
.
0 0 0 1
0 0 1 0
0,1/4
0,1/4
0,1/4
0,1/4
0,1/4 0,9+0,1/4
0,9+0,1/4 0,1/4
El metodo iterativo ~xn = A~xn1 ahora converge sin problemas a una solucion
ex que es el objetivo del nuevo modelo. Como A y A
e son parecidas
de ~x = A~
es de esperar que las soluciones de ambos modelos se parezcan.
Escribamoslo en general. Si U es una matriz N N con uij = 1 lo que
hemos hecho es aplicar la formula
e = cA + 1 c U
A
N
por otra parte el nuevo modelo se parecera mas al original cuanto mas cercano este c a uno. Como solucion de compromiso los creadores de Google
tomaron c = 0,85. Si alg
un da decidieran tomar por ejemplo c = 0,92 para hacer el modelo mas realista, argumentos con autovalores y autovectores
sugieren que el n
umero de iteraciones debera duplicarse para conseguir la
misma precision.
Respecto al vector inicial, sin informacion adicional lo mas razonable es
tomar un m
ultiplo de ~u. Probablemente en la practica se emplea el resultado
de la anterior actualizacion porque lo mas posible es que las importancias de
la mayora de las paginas no sufran cambios repentinos.
Modificando los aleda
nos del bucle del u
ltimo programa a:
c=0.85;
for n=1:niter %Bucle
x=c*A*x+(1-c);
endfor
se puede utilizar para el segundo modelo, obteniendose un vector de importancias (con niter = 15) cuyas coordenadas son x1 = 0,45779, x2 = 0,18673,
x3 = 0,16880, x4 = 1,13119, x5 = 0,33876, x6 = 0,58660, x7 = 0,90052.
x8 = 1,00000, lo cual no esta muy lejos de la solucion hallada para el primer
modelo.
Para mostrar fehacientemente que todo esto no son entelequias teoricas,
incluimos un codigo en C que permite llevar a cabo el algoritmo en una red
creada aleatoriamente con N = 106 paginas y E = 10 enlaces salientes de
cada una de ellas. Un buen reto para el lector es crear un programa eficiente
que permita tratar el caso en el que n
umero de enlaces no este fijado de
antemano.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define
#define
#define
#define
N 1000000
E 10
ITER 80
C 0.85
12
1.5.
Bibliografa
[Au] D. Austin. How Google Finds Your Needle in the Webs Haystack. Feature Column Archive, December 2006. American Mathematical Society.
En www.ams.org/featurecolumn/archive/pagerank.html
[Br-Le] K. Bryan, T. Leise. The $25, 000, 000, 000 eigenvector: the linear algebra
behind Google. SIAM Rev. 48 (2006), no. 3, 569581. Disponible en
www.rose-hulman.edu/$\sim$bryan/google.html
[Br-Pa] S. Brin, L. Page. The anatomy of a large-scale hypertextual Web search engine. Computer Networks and ISDN Systems 33, 107-17, 1998.
Disponible en infolab.stanford.edu/pub/papers/google.pdf
14
n 2
Aplicacio
Une los puntos
Muchas veces uno se ve forzado a inventar datos de los que carece y
no necesariamente para enga
nar. Por ejemplo, la inflacion, las ganancias de
una empresa, la altura de nuestro sobrino, las representamos como una lnea
continua, cuando es obvio que hemos tomado una cantidad discreta y peque
na
de datos. El dibujo de unos pocos puntos sera menos interpretable para
nosotros pues no dara una idea tan clara de la evolucion.
2.1.
Uni
on exacta
2.2.
Interpolaci
on de Lagrange
Y t tk
tj tk
k6=j
Los fans de Java sabran que algunas de las funciones empleadas estan anticuadas o
mal vistas (deprecated ) pero ellos las corregiran facilmente, y si se dan prisa antes de que
las modernas se queden tambien anticuadas.
17
(int)(size().height/2));
// Crea imagen ajustada al tama~
no especificado en
lienzo = createImage(size().width,size().height);
grafico = lienzo.getGraphics();
<APPLET>
}
// Calcula el valor del polinomio de Lagrange j-
esimo
private double lagr(int i, double t){
double pr=1.0;
for(int j=0; j < N; ++j)
if(j != i) pr*=(t*(N-1.0)-j)/(i-j);
return pr;
}
public void paint(Graphics g) {
// Pinta el segmento (px,py), (qx,qy)
double qx=puntos[0].x, qy=puntos[0].y, px, py;
// Rellena de blanco
grafico.setColor(Color.white);
grafico.fillRect(0,0,size().width,size().height);
grafico.setColor(Color.black);
// Dibuja los puntos
for(int i=0;i < N;++i)
grafico.fillOval(puntos[i].x-R/2,puntos[i].y-R/2,R,R);
// Los interpola
for(double t=0.0; t<=1.0; t+=0.01){
// nuevo-> antiguo
px=qx; py=qy; qx=0.0; qy=0.0;
// Calcula nuevo
for(int i=0; i<N; ++i){
qx+=(double)(puntos[i].x)*lagr(i,t);
qy+=(double)(puntos[i].y)*lagr(i,t);
}
grafico.drawLine((int)(px-.5),(int)(py-.5),(int)(qx-.5),(int)(qy-.5));
}
grafico.drawLine((int)qx,(int)qy,puntos[N-1].x,puntos[N-1].y);
g.drawImage(lienzo,0,0,this); // Al lienzo
}
public void update(Graphics g) {
paint(g);
}
Con el programa tal como esta, con N = 5 las cosas van relativamente
bien:
18
Puestos a quejarnos, en la u
ltima figura no hay razon aparente para continuar la primera ondulacion tan arriba y las dos u
ltimas ondulaciones parecen
un poco superfluas.
Las deficiencias intolerables se muestran inequvocamente cuando el n
umero de puntos crece. Por ejemplo si modificamos el programa anterior escribiendo N = 15 al separar ligersimamente el punto central de la altura inicial
com
un a todos los puntos se obtiene la figura de la izquierda.
2.3.
Splines c
ubicos
Nuestro objetivo es hallar los coeficientes sij . Para ello debemos utilizar las
propiedades antes citadas de f . En primer lugar, como interpola los yi , ya
20
si4 = yi
si1 + si2 + si3 + si4 = yi+1
para 0 i < n. Por otra parte en cada uno de los nodos interiores, 0 < i < n,
se tiene que cumplir que las primeras y segundas derivadas son continuas y
por tanto su calculo por la derecha y por la izquierda debe coincidir. Es decir,
0
00
Si1
(1) = Si0 (0) y Si1
(1) = Si00 (0) que en ecuaciones lineales es
(2.5)
(2.6)
00
Por u
ltimo imponemos S000 (0) = Sn1
(1) = 0 que se escribe como
(2.7)
(2.8)
2s02 = 0
6sn1 1 + 2sn1 2 = 0.
Tenemos que resolver el complejo sistema (2.3)(2.8) donde los sij son las
incognitas y las yi son los datos conocidos. Parece muy difcil pero no lo es
tanto con una organizacion ingeniosa. Definamos Di = f 0 (ti ), entonces cualquiera de los dos miembros de (2.5) es Di , en particular si3 = Di . Restando
(2.4) y (2.3) se sigue si1 + si2 + si3 = yi+1 yi , y por otra parte Di+1 + Di =
(3si1 + 2si2 + si3 ) + si3 , por consiguiente si1 = Di+1 + Di 2(yi+1 yi ). De
forma similar se obtiene si2 . En definitiva, si hallamos Di tendremos resuelto
el sistema con
..
D0
y1 y0
2
1
0
0
.
y2 y0
..
D1
1
4
1
0
.
y3 y1
D2
..
0
y
y
D
1
4
1
.
2 .
3 = 3 4
..
.
..
.. . . . . ..
.
.
. . ..
.
.
yn yn2
. . . 0
1 4 1 Dn1
yn yn1
Dn
... ... 0 1 2
Despues a partir de los Di se pueden construir los polinomios Si (t) sustituyendo en (2.9) y en la definicion (2.2). En resumidas cuentas, aunque la
deduccion teorica ha sido un poco larga e incompleta, en la practica la interpolacion con splines c
ubicos se reduce a resolver un sistema con una matriz
tridiagonal, computacionalmente muy sencillo [St-Bu], y a hacer unas sustituciones.
Con el siguiente codigo Matlab u Octave2 definimos una funcion que realiza el proceso y eval
ua f en param. Hemos empleado practicamente la misma
notacion que en el desarrollo anterior, con la excepcion mas notable de que
la n esta trasladada en 1 para evitar ndices nulos (no permitidos en estos
paquetes pero s en C).
function resul = mifspline(param,y)
n=length(y);
% Crea los nodos
t=linspace(0,1,n);
% Crea el sistema y lo resuelve
incr=(y(2:end)-y(1:end-1));
A=spdiags([ones(n,1),4*ones(n,1),ones(n,1)],-1:1,n,n);
A(1,1)=2;
A(n,n)=2;
S=zeros(n,4);
S(:,3)=A\(3*[y(2)-y(1);incr(2:end)+incr(1:end-1);y(n)-y(n-1)]);
% Construye los coeficientes de los polinomios
n=n-1;
2
22
nk=n;
for m=1:n
S(m,1)=-2*incr(m)+S(m,3)+S(m+1,3);
S(m,2)=3*incr(m)-2*S(m,3)-S(m+1,3);
S(m,4)=y(m);
end
S=S(1:n,1:4)*diag([nk*nk*nk,nk*nk,nk,1]);
% Eval
ua los polinomios
resul=ppval(mkpp(t,S),param);
end
Las dos u
ltimas instrucciones deshacen el cambio para pasar de Si a Qi y
construyen la funcion f a partir de los coeficientes de los polinomios c
ubicos.
Por supuesto, para comprobar los resultados queremos ver dibujos mas
que leer n
umeros. La siguiente funcion dibuja con precision suficiente la curva
(t) obtenida al interpolar los puntos Pi con coordenadas en la las listas x
e y.
function dibujaspline(x,y)
% Cien puntos entre nodos
param=linspace(0,1,100*length(y));
% Dibuja el resultado
plot(x,y,+,mifspline(param,x),mifspline(param,y))
end
5
4
5
4
23
a=linspace(0,1,20);
x = a;
y = 0*a;
y(length(y)/2) = 1;
dibujaspline(x,y);
0.8
0.6
0.4
0.2
0.2
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.8
1.5
0.6
1
0.4
0.5
0.2
0
0.2
0.5
0.4
1
0.6
1.5
0.8
1
2
3
2.4.
Un ejemplo en m
as dimensiones
Nada impide que con las tecnicas anteriores se interpolen igualmente puntos de tres, cuatro o cualquier n
umero de coordenadas. Otra cosa distinta es
que los nodos vivan en un espacio bidimensional, entonces el objeto con el
que interpolamos es mas bien una superficie para cada coordenada y hay que
considerar polinomios en dos variables. Uno de los ejemplos mas simples es la
ampliacion de imagenes planas. Los pixels de que disponemos son los puntos
de interpolacion que en este caso tendran tres coordenadas dadas por sus tres
componentes de color RGB (o cuatro, RGBA, si hay transparencias) mientras
que los nodos son de la forma ~tij = (i/n, j/m) con n m correspondiendo al
tama
no original de la imagen.
Creando con GIMP una esferita 3232 y escalandola a tama
no 256256,
el resultado visual es mucho mejor empleando la opcion de interpolacion
c
ubica3 que usando la opcion sin interpolacion consistente en aumentar simplemente el tama
no de cada pixel (los informaticos, siempre tan amigos de la
jerga, a vece3s llaman a esto de no hacer nada nearest neighbor scaling por
razones que puede imaginar el lector).
Interpolacion c
ubica
Sin revisar el codigo no sabemos si esta interpolacion es por splines como los explicados aqu o por otra variante. Nos inclinamos por la segunda opcion ya que en para esta
situacion no es necesaria mucha precision y posiblemente los programadores se decidan por
implementaciones sencillas utilizando los B-splines que se tratan en el siguiente captulo.
25
2.5.
Bibliografa
26
n 3
Aplicacio
No unas los puntos
En el captulo anterior estudiamos como conseguir una curva suave que
pase exactamente por una coleccion de puntos dados y los splines c
ubicos
permitan hacerlo de manera optima en alg
un sentido. Supongamos que sacrificamos la exactitud por una mayor sencillez en la programacion o por
una interfaz mas intuitiva para el usuario, exigiendo solo cierto grado de
aproximacion a los puntos dados.
Por dar un ejemplo mas preciso, la mayor parte de la veces que en un
programa de dise
no grafico necesitamos trazar una curva sinuosa, deseamos
una forma suave de cierto tipo mas que un ajuste exacto a unos puntos destacados. En estos programas aparecen tpicamente los puntos de control de
los que estiraremos para deformar la curva de forma imprecisa pero muy intuitiva y local (en contraste con la interpolacion donde mover un solo punto
altera el aspecto global de la curva). Un ejemplo mas complicado, que simplificamos con fines academicos y es mas esquematico que real, podra ser
la trayectoria de un bot (un personaje que se mueve autonomamente) en un
videojuego1 . Internamente el mapa de cada nivel esta discretizado y hay algoritmos que seleccionan un camino de puntos que acaba en el punto elegido
(el mas famoso es el algoritmo A ). Para que los bots amigos o enemigos se
dirijan a cierto punto con una trayectoria natural, poco robotica, hay que
impedir que el jugador note que hay ciertos puntos de paso comunes a todos
ellos (los de la discretizacion) y es logico construir una curva que pase solo
cerca.
1
27
3.1.
La idea general
n
X
j (t)Pj
j=0
0,5
0,75
t
0,0
0,25
0,5
0,75
1,0
0,0
0,5
0,5
1,0
0,25
1,5
0,0
2,0
0,0
0,25
0,5
0,75
1,0
Polinomio de Lagrange n = 8
Funciones alternativas
Una opcion natural es elegir como j una funcion suave sin oscilaciones
(como la representada en lnea discontinua) pero necesariamente la condicion j (tj ) = 1, j (ti ) = 0, i 6= j, obligara a que sea muy puntiaguda y la
interpolacion dara lugar a una curva con bultos poco naturales. Es mucho mas
28
3.2.
Curvas de B
ezier generales
Antes de nada hay que hacer notar que las curvas de Bezier que se usan
habitualmente en los programas de dise
no grafico o retoque fotografico se
trataran en otro apartado posterior y constituyen una variante del caso particular de las estudiadas aqu.
Retomando la idea general buscamos sustituir los polinomios de Lagrange
por otros menos ondulantes que hagan una funcion parecida. Las curvas de
Bezier emplean los polinomios de Bernstein:
n j
t (1 t)nj
Bj (t) =
j
que pertenecen a Rn [t] y que solo consideraremos para t [0, 1]. Unas lneas
en Maple nos ayudan a visualizar las graficas de algunos de los Bj para
distintos valores de n y j:
F:=(N,j)->binomial(N,j)*t^(j)*(1-t)^(N-j);
plot([F(10,2),F(10,4),F(10,6),F(10,8)], t=0..1);
plot([F(10,5),F(20,10),F(30,15),F(40,20),F(50,25)], t=0..1);
0,25
0,3
0,25
0,2
0,2
0,15
0,15
0,1
0,1
0,05
0,05
0,0
0,0
0,0
0,25
0,5
0,75
1,0
0,0
0,25
0,5
t
29
0,75
1,0
El primer grafico muestra que realmente los Bj avanzan con tj , para n fijado.
En el segundo se representa el polinomio central Bn/2 y deducimos que seg
un
crece n disminuye su altura. Este efecto se traduce en que para un n
umero
grande de nodos la influencia del punto central sobre el resultado sera poca.
Por otra parte, los polinomios B0 = (1 t)n y Bn (t) = tn tienen una grafica
con una forma distinta y llegan a alcanzar el valor 1 en t = 0 y t = 1, lo
que les sit
ua fuera de la escala de los graficos anteriores e implica que los
puntos extremos tienen mucha influencia. Ademas las igualdades B0 (0) =
Bn (1) = 1, y Bj (0) = Bj (1) = 0 para 0 < j < n implica que la curva siempre
comenzara en P0 y acabara en Pn .
Facilmente se comprueba que cada funcion Bj es no negativa, alcanza un
maximo en t = tj = j/n (Analisis Matematico P
I), es peque
na lejos de este
n
valor (las potencias decrecen rapido) y ademas j=0 Bj (t) es identicamente 1
(binomio de Newton).
La curva de Bezier asociada a los puntos de control P0 , . . . , Pn viene
dada por la combinacion lineal
(t) =
n
X
Bj (t)Pj ,
t [0, 1].
j=0
n
umero combinatorio despues de haber simplificado algunos factores comunes.
Experimentando con un n
umero peque
no de nodos los resultados son
aceptables. Se nota una falta de sensibilidad en algunos casos al movimiento
de los puntos de control representada en la primera de las siguientes figuras
por la separacion entre la curva y los tres puntos de control intermedios. Por
otra parte hay una aproximacion bastante buena cuando los puntos estan
ordenados y proximos a una recta.
Para un n
umero grande de nodos examinando uno de los casos problematicos para la interpolacion de Lagrange vemos en el primer grafico que al saltar el punto central no hay una gran variacion y de hecho hay que separarlo
mucho para que tenga influencia notable.
En el segundo grafico planteamos una situacion que por logica debiera dar
oscilaciones: con la mitad de los puntos a una altura y la otra mitad a otra.
Las oscilaciones no se producen y el resultado es extra
no. Los puntos de los
extremos tiran de la curva produciendo dos pendientes muy pronunciadas
mientras que el resto de los puntos no parecen tener influencia alguna.
31
Bj (t) = 1
Bj (t) 0
en [0, 1]
implican que el dibujo de una curva de Bezier siempre esta dentro del conjunto llamado envoltura convexa de los puntos de interpolacion Pi , que esta definido por las siguientes combinaciones lineales restringidas (donde, como
antes, consideramos los puntos como vectores):
{0 P0 + 1 P1 + + n Pn : i 0,
n
X
i = 1}.
i=0
Conjunto de puntos
0000000000000000000000000000
1111111111111111111111111111
1111111111111111111111111111
0000000000000000000000000000
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
0000000000000000000000000000
1111111111111111111111111111
Su envoltura convexa
Seg
un hemos visto, teorica y practicamente el problema aqu es el contrario al de la interpolacion de Lagrange: no hay mucha sensibilidad al movimiento de los puntos que no estan cerca de los extremos y para un n
umero
grande de nodos es difcil ajustar intuitiva y comodamente una curva de este
manera.
3.3.
B-splines c
ubicos
La B de los B-splines es por basis (base en ingles) y viene de que consideraremos bases muy sencillas formadas por splines c
ubicos (esencialmente
una funcion y sus trasladados) que a pesar de perder la interpolacion exactas
son todava suficientemente intuitivas como para ser practicas.
32
Hay que a
nadir que la definicion de B-splines tiene varias versiones y la
mas general incluye las curvas de Bezier y otros metodos que no mencionaremos aqu. Lo que examinaremos son los B-splines c
ubicos uniformes2 .
Para remediar los problemas de las curvas de Bezier buscamos funciones
mas parecidas a los pulsos que dibujamos en la primera seccion cuyo soporte
se limite a unos cuantos nodos adyacentes. Ademas escogeremos como base
una funcion y sus trasladados, lo que simplificara computacionalmente mucho
el metodo y dara uniformidad al resultado.
En terminos matematicos consideramos:
X
(3.1)
(t) =
(t tj )Pj
j
33
Q1 (t + 2)
Q2 (t + 1)
S(t) = Q3 (t)
Q4 (t 1)
si 2 t 1
si 1 t 0
si 0 t 1
si 1 t 2
en otro caso.
0,6
0,5
0,4
0,3
0,2
0,1
0,0
2
con u = n(t tj ).
34
qx=(double)(puntos[i].x)*q3+(double)(puntos[i+1].x)*q2;
qy=(double)(puntos[i].y)*q3+(double)(puntos[i+1].y)*q2;
if( i==0 ){
qx+=(double)(puntos[0].x)*q4;
qy+=(double)(puntos[0].y)*q4;
}
else{
qx+=(double)(puntos[i-1].x)*q4;
qy+=(double)(puntos[i-1].y)*q4;
}
if( i==N-2 ){
qx+=(double)(puntos[N-1].x)*q1;
qy+=(double)(puntos[N-1].y)*q1;
}
else{
qx+=(double)(puntos[i+2].x)*q1;
qy+=(double)(puntos[i+2].y)*q1;
}
grafico.drawLine((int)(px-.5),(int)(py-.5),(int)(qx-.5),(int)(qy-.5));
}
}
Los ejemplos con pocos nodos funcionan tambien muy bien, y el ejemplo
alocado con la mitad de los puntos a cada lado da un resultado razonable:
35
3.4.
En esta seccion combinamos los objetivos planteados en el captulo anterior y en este. Construiremos una curva que pase exactamente por una parte
de los puntos mientras que el resto se utilizan para controlar la forma.
El metodo esta basado en curvas de Bezier c
ubicas, esto es, en
(t) = (1 t)3 P0 + 3t(1 t)2 P1 + 3t2 (1 t)P2 + t3 P3 .
Se cumple (0) = P0 y (1) = P3 , de modo que la curva interpola estos
puntos mientras que P1 y P2 controlan su forma. Ademas lo hacen de una
forma intuitiva porque 0 (0) = 3P0 + 3P1 , 0 (1) = 3P2 + 3P3 , implican
P2
P3
P0
Si a
nadimos a la derecha otra curva de Bezier c
ubica resultara una curva
que conecta P0 , P3 y P6 y se controla con P1 , P2 , P4 y P5 . En general con
k curvas de Bezier c
ubicas unidas logramos conectar k + 1 pntos por medio
de una curva controlada por 2k puntos. Con el abuso de notacion evidente
se llama curva de Bezier a esta curva construida a trozos, cuyo uso se ha
popularizado en programas de dise
no grafico.
Si tenemos el vicio o la virtud de leer las caractersticas tecnicas o los avisos del proceso de configuracion, sabremos que la mayor parte de las impresoras entienden o simulan PostScript. Si ademas utilizamos LATEX es posible
que incluyamos figuras PostScript por medio de ficheros con apellidos .ps o
.eps. Lo que es menos conocido es que mas que un formato, PostScript es
un lenguaje de programacion (muy simplificado y orientado a graficos) y que
dichos ficheros son simplemente documentos de texto con algunas instrucciones. A veces las instrucciones son tan burdas como indicar el contenido de
todos los pixels, por ejemplo cuando el fichero representa una foto (para ello
PostScript es poco aconsejable). Sin embargo es posible programar figuras
sencillas usando unas pocas instrucciones (vease [Bo]) que permiten emplear
curvas de Bezier. Si en el fichero curvaps.eps incluimos las lneas
36
%!PS-Adobe-2.0 EPSF-2.0
% %Title: curvaps.eps
% %BoundingBox: 0 0 300 300
% %EndComments
newpath
300 200 moveto
220 100
100 200
50 150
curveto
4 setlinewidth
stroke
% %EOF
ANCH
ALT
SUAV
GROS
N 10
La rutina main imprime primero la cabecera del fichero PostScript y despues los comandos que dibujan crculos rellenos en los puntos de interpolacion
para que sean facilmente identificables. El bucle principal llama a las funciones que crean los puntos de control e imprime el comando curveto que
completara cada curva de Bezier c
ubica.
int main(int argc, char *argv[]){
double pcx, pcy; /* Punto de control */
int i;
/* Imprime cabecera */
printf("%%!PS-Adobe-2.0 EPSF-2.0\n%%%%Title: curva.eps\n");
37
Pi+1
Pi1
~ d/k
~ dk
~ 2
La proyeccion de un vector ~v en la direccion d~ viene dada por (~v d)
donde ~v d~ indica el producto escalar, y esto es lo que aparece en las funciones
p cont izq y p cont dch con las excepciones l
ogicas para el primer y el u
ltimo
nodo.
void p_cont_izq(int i, double *x, double *y){
double pe;
if(i!=0){
*x=px[i+1]-px[i-1];
*y=py[i+1]-py[i-1];
}
38
else{
*x=2*(px[1]-px[0]);
*y=2*(py[1]-py[0]);
}
pe=(px[i+1]-px[i])*(*x) + (py[i+1]-py[i])*(*y);
pe/=((*x)*(*x) + (*y)*(*y))*SUAV;
*x=px[i]+pe*(*x);
*y=py[i]+pe*(*y);
}
void p_cont_dch(int i, double *x, double *y){
double pe;
if(i!=N-2){
*x=px[i+2]-px[i];
*y=py[i+2]-py[i];
}
else{
*x=2*(px[N-1]-px[N-2]);
*y=2*(py[N-1]-py[N-2]);
}
pe=(px[i+1]-px[i])*(*x) + (py[i+1]-py[i])*(*y);
pe/=((*x)*(*x) + (*y)*(*y))*SUAV;
*x=px[i+1]-pe*(*x);
*y=py[i+1]-pe*(*y);
}
3.5.
Bibliografa
40
n 4
Aplicacio
Comprobar, corregir y mezclar
Algunas de las aplicaciones mas relevantes en el mundo de hoy de las
matematicas a la informatica se enmarcan dentro de la teora de codigos y
la criptografa. En general se trata de cambiar la forma de un mensaje y el
objetivo practico que se busca es o bien producir redundancia para detectar
y corregir errores, o bien eliminar redundancia para economizar memoria
o bien ocultar la informacion para protegerla. Ejemplos cotidianos de estas
situaciones son, respectivamente, los lectores de CD, que corrigen multitud de
errores en tiempo real, los ficheros con formatos de compresion sin perdidas
(*.gz, *.zip, etc.) y las transacciones seguras por internet. En los u
ltimos
a
nos estas tecnicas han crecido de una manera espectacular y no son una
parcela del algebra lineal, por ello lo mas que haremos aqu es poner algunos
ejemplos para capturar la atencion del lector que debe buscar entre la amplia
bibliografa existente para tener informacion mas completa.
4.1.
Corrigiendo errores
Despues de compilarlo con gcc codifica.c -o codifica en nuestra consola Linux ejecutamos ./codifica abcd con abcd un n
umero (en binario) de cuatro
bits a nuestro antojo (los usuarios de Windows o los que prefieran no usar la
consola deben introducir los parametros con ayuda de su IDE, lo mismo se
aplica a otros programas de esta seccion). Por ejemplo, la salida tras ejecutar
./codifica 0110 es 1100110 y la de ./codifica 1101 es 1010101. De esta forma
los n
umeros de 4 bits se condifican en otros de 7 bits (para hacer el programa
medianamente profesional el lector debera incluir como ejercicio una funcion
comprobante de que la entrada es realmente de cuatro bits).
42
Seg
un lo dicho anteriormente, si modificamos un bit de la salida no parece posible recuperar la entrada. Teclear para ver. Consideremos el programa descodifica.c casi tan breve como el anterior que compilaremos con gcc
descodifica.c -o descodifica y que de nuevo deberamos completar con una
funcion comprobante de que el parametro de entrada es un n
umero de 7 bits:
/* descodifica.c */
#include <stdio.h>
#include <stdlib.h>
#define P argv[1]
int main(int argc, char **argv) {
int i;
int w=0;
for (i = 0; i < 7; ++i)
if( P[i]==1 ) w^=i+1;
printf("%s -> ",P);
if ( w!=0 ) {
printf("Error en el bit %do (por la izqda)\n",w);
if ( P[w-1]==0 ) P[w-1]=1;
else P[w-1]=0;
printf("%s -> ",P);
}
printf("%c%c%c%c\n",P[2],P[4],P[5],P[6]);
return EXIT_SUCCESS;
}
nulas. La opcion mas simple es elegir como columnas todos los vectores no
nulos de k coordenadas. En el ejemplo anterior n = 7, k = 4 y elegimos
* 1 1 0 1 +
0
1
1
1
0 0 0 1 1 1 1
1
0
0
0
0
Nuc(f ) =
, 1 , 1 , 1
.
H = 0110011
1
0
0
00
1 0 1 0 1 0 1
0
1
0
0
Los vectores ~v1 , ~v2 , ~v3 , ~v4 indicados como generadores del n
ucleo forman una
base y lo u
nico que hace el primer programa al ejecutar ./codifica abcd
es calcular la combinacion lineal ~x = a~v1 + b~v2 + c~v3 + d~v4 .
Si un error ha reemplazado ~x por ~y = ~x +~ei entonces el segundo programa
lo detecta porque ~y 6 Nuc(f ), ademas f (~y ) es la i-esima columna de H y se
puede saber facilmente donde esta el error (el n
umero binario que representa
la i-esima columna es i). Las coordenadas tercera, quinta, sexta y septima
de ~x son respectivamente a, b, c y d, entonces una vez subsanado el posible
error la descodificacion se reduce a una lnea de programa: printf("%c%c%c%
c\n",P[2],P[4],P[5],P[6]).
Como podramos subsanar no uno, sino hasta dos errores en una palabra
de n bits? Repitiendo el razonamiento anterior habra que verificar que no
existen ~ei , ~ej , ~ek , ~el distintos tales que
f (~ei ) = ~0 o f (~ei ) = f (~ej ) o f (~ei ) = f (~ej + ~ek ) o f (~ei + ~ej ) = f (~ek + ~el ).
Gracias a la linealidad y a que en F2 solo hay dos n
umeros, el cero y el
1, todo esto equivale a que cuatro columnas cualesquiera de H sean linealmente independientes sobre F2 . En general hallar un codigo lineal sobre F2
que sea capaz de subsanar hasta t errores es lo mismo que hallar una matriz H M(nk)n (F2 ) tal que 2t columnas cualesquiera sean linealmente
independientes sobre F2 (Th.3.2.11 [Mu-Mu]).
Es un buen ejercicio computacional dise
nar un programa que busque por
fuerza bruta codigos que corrijan muchos errores con n/k no demasiado grande (para economizar bits). Naturalmente la materia gris ha llegado a lmites
inalcanzables por la fuerza bruta y en la actualidad disponemos de varios
metodos para crear codigos eficientes [Hi], [Li-Xi], [Mu-Mu].
4.2.
C
odigos de todos los das
contextos cotidianos cambiando F2 por otro cuerpo con mas elementos para
detectar errores con cierta probabilidad. Al terminar de leer mas de un lector
concedera que las matematicas no quedan tan lejos de nuestra vida diaria,
simplemente permanecen escondidas.
La letra del DNI. El Documento Nacional de Identidad contiene un
n
umero n de 8 dgitos acompa
nado de una letra. A cada n le asignaremos
el elemento correspondiente de F23 calculando su resto al dividir por 23,
mientras que a la letra le asignaremos el lugar que ocupa en la cadena
TRWAGMPYDFXBNJZSQVHLCKE
comenzando por cero, es decir, T 7 0 y E 7 22. De esta forma el n
umero y
la letra dan lugar a un elemento de F223 . Se utiliza el codigo viene dado por
la aplicacion lineal
f : F223 F23 ,
f (~x) = H~x,
con H = 1 1 .
En palabras sencillas, la letra esta determinada por el resto modulo 23
del n
umero como muestra el siguiente programa brevsimo:
#include <stdio.h>
#include <stdlib.h>
/* Calcula la letra del DNI/NIF */
int main(int argc, char *argv[]){
unsigned char a[23]="TRWAGMPYDFXBNJZSQVHLCKE";
printf("N
umero=%s, Letra=%c\n",argv[1],a[ (atoi(argv[1]) %23) ]);
}
H = 1 2 3 4 5 6 7 8 9 10 .
que corresponde a una aplicacion lineal f : F10
11 F11 .
Con esta informacion, un script muy sencillo en python (seguramente
no muy bien programado) permite comprobar si un ISBN (que se puede
introducir con o sin guiones) es valido:
import string
tab={X:10,x:10}
for i in range(10):
tab[string.digits[i]]=i
cod = str(raw_input("Posible ISBN: ")).replace(-, )
if len(cod)!=10:
print Debe tener 10 caracteres
else:
j=0
for i in range(10):
j+=(i+1)*tab[cod[i]]
if j %11 == 0:
print Es un ISBN-10 admisible
else:
print No es un ISBN-10 admisible
H= 1 3 1 3 1 3 1 3 1 3 1 3 1 .
sobre Z10 . El problema (teorico) es que Z10 no es un cuerpo, ya que en el no
se puede dividir: por ejemplo 2 0 = 2 5 = 0 implica que 0/2 debera dar
a estrictamente un
a la vez 0 y 5. Si Z10 no es un cuerpo Z13
10 tampoco ser
47
H = 2 2 2 2 2 2 2 2 1 0 00 01 02 03 04 05 06 07 08 09 .
0 0 0 0 0 0 0 0 0 1 2 2 2 2 2 2 2 2 2 2
48
4.3.
n
umeros (pseudo)aleatorios. Por ejemplo, la funcion RND del prehistorico ZXSpectrum lo u
nico que haca era multiplicar por a = 75 y reducir modulo
p = 65537, presentando el resultado normalizado en (0, 1]. Con n
umeros
mayores mas en lnea con las tecnologas actuales el procedimiento sigue
en vigor. La biyectividad de f implica que se puede emplear para hacer
repartos evitando repeticiones sin tener que ocupar memoria para recordar
los n
umeros ya asignados.
Aqu vamos a introducir una variante bidimensional de este proceso con
fines academicos y la aplicaremos para crear un efecto de pulverizado en una
imagen.
Trabajaremos con p = 31 y lo que buscamos es una manera de desordenar
los elementos de X = F231 {(0, 0)}, es decir, los puntos {(x, y) : 0 x, y <
31} salvo el origen. En analoga con lo anterior tomaremos
f (n) = An~v0
para alg
un
~v0 X
0
1 0
n
1
A=C
C
=
A =C
C
0
0 n
0 3
=
|A I| = 2 9
3 1
y 2 9 = 0 no tiene races en F31 . Donde estan entonces las races?
Pues en un cuerpo formado por una especie de n
umeros complejos modulo 31.
Ademas la teora asegura que siempre algunos de los elementos del cuerpo (los
analogos de las races primitivas) cumplen que sus potencias tardan 312 1 en
repetirse. Como habra adivinado el lector, la matriz A citada anteriormente
tiene autovalores y con esta propiedad. En esta situacion no es difcil ver
que para ~v0 X la coleccion finita
~v1 = A~v0 ,
~v2 = A~v1 ,
~v3 = A~v2 , . . .
50
~v312 1 = A~v312 2
r.y=++b*ZOOM;
(notese que las comillas son comillas derechas, como acentos graves). Si al
ejecutar ./pulveriza se produjese un error relativo a un formato de pantalla
no soportado, cambiense (31*ZOOM) y (31*ZOOM) en las definiciones de ANCHO y
ALTO por ejemplo por 320 y 240.
Teniendo en el directorio la imagen bolota.bmp (en este caso de tama
no
62 62) el resultado fue:
52
4.4.
Ocultar informaci
on
n a
c a d
n a
el texto se representan con N/k vectores de Fk251 . Cada uno de estos vectores ~v
se codifica con f (~v ) y se descodifica con f 1 (~v ).
Las aplicaciones lineales son un buen instrumento para este fin, ya que es
posible hallar su inversa algortmicamente. Pero seamos todava mas exigentes: es posible que el mismo algoritmo codifique y descodifique? Si f (~v ) = A~v
con A M44 (F251 ) entonces f = f 1 equivale a A2 = I y como inventarse una matriz con esta propiedad? Obviamente una matriz diagonal D
con dii {1, 1} (= {1, 250} en F251 ) es una solucion trivial pero poco u
til
porque no oculta la informacion de manera significativa: simplemente deja
los caracteres igual o los cambia de signo. Para esconder su aspecto basta
cambiar de base:
1
!
A = C 1 DC
con D =
A2 = I.
1
1
Sirve cualquier matriz C de cambio de base para la que A no sea sencilla. Lo mejor es escoger C M44 (Z) con determinante uno y as no
habra que calcular ning
un inverso modulo 251, ya que los elementos de C 1
seran automaticamente enteros. Crear matrices enteras de determinante uno
no es difcil, por ejemplo usando transformaciones elementales sobre la matriz identidad o inventando elementos al azar dejando algunos de ellos como
parametros para ajustar el determinante. Elegimos
180 221 169 119 !
71 30 82 132 !
7 3 4 9!
5 5 2 8
7 3 3 8
3 0 5 6
C=
C 1 DC =
A =
F251
69 172 49 170
41 161 16 118
210 90 236 134
110,
101,
32,
32,
117,
108,
110,
97,
32,
32,
108,
77,
117,
97,
103,
110,
97,
99,
114,
104,
32,
97,
...
110
32
117
210
219
181
32
108
117
=
54
124
96
129
97
114
32
179
89
57
101
32
108
24
234
157
97 !
,
32
77
97
143 !
=
81
221
204
110 !
,
99
104
97
179,
20,
89,
176,
16
20
176
25
!
.
210,
24,
219,
234,
181,
157,
62,
143,
124,
81,
96,
221,
129,
204,
50,
16,
57,
25,
...
129
2 3 Y9b 24 e
^ 157
143
Q
Y`
I 16
20
25
donde los n
umeros recuadrados indican los caracteres no imprimibles con el
codigo ASCII se
nalado.
Para ver mejor los caracteres podemos escribir todo en hexadecimal. El
siguiente conversor act
ua sobre un fichero de texto y muestra la traduccion
hexadecimal en pantalla:
/* Texto a hexadecimal */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
char c; /* Car
acter */
FILE *ifp; /* Fichero de entrada */
if(argc<2){
printf("Hay que especificar un fichero.\n");
return EXIT_FAILURE;
}
ifp=fopen(argv[1],"r");
if(ifp==NULL){
printf("No se puede abrir el fichero \"%s\"\n",argv[1]);
return EXIT_FAILURE;
}
while ((c=getc(ifp))!=EOF) printf("%X",c);
fclose(ifp);
printf("\n");
return EXIT_SUCCESS;
}
Si el ejecutable es texto2hex hay que teclear ./texto2hex texto.txt para hacerlo actuar sobre el fichero texto.txt. Este proceso se puede invertir con un
programa hex2texto identico salvo definir char c[]="00"; reemplazar el bucle
while por
55
while ((c[0]=getc(ifp))!=EOF){
c[1]=getc(ifp);
printf("%c",strtol(c,NULL,16));
}
56
4.5.
Bibliografa
57
58
Parte II
Res
umenes de teora
59
menes 5
Resu
Temario
El temario comentado empleado en los u
ltimos a
nos esta recogido en la
siguiente lista:
1. Sistemas de ecuaciones lineales. Reducci
on de Gauss. Reducci
on de Gauss-Jordan.
Metodos basicos para resolver sistemas de ecuaciones lineales. El resto
del curso los usa para resolver distintos problemas dentro del algebra
lineal.
2. Matrices. Operaciones entre matrices. Matriz inversa. Matrices y sistemas de ecuaciones lineales.
Las matrices son el instrumento basico para realizar calculos efectivos
en algebra lineal. Se incluye el algoritmo para calcular la matriz inversa
usando la reduccion de Gauss-Jordan.
3. Espacios y subespacios vectoriales. Aplicaciones lineales.
Definicion y propiedades basicas de los espacios vectoriales y sus subespacios. Todo subespacio vectorial de k n dado mediante generadores
se puede tambien describir mediante ecuaciones lineales.
4. Bases y dimensi
on.
Definiciones y calculo de bases y dimensiones de subespacios vectoriales de k n . Matriz de una aplicacion lineal en una base dada. N
umero
mnimo de ecuaciones lineales que describen un subespacio.
5. Suma e intersecci
on de subespacios.
Se incluye la formula de Grassmann y se discute como calcular la suma
y la interseccion de subespacios.
61
62
5.1.
=2
=0
= 2
=0
1
1
3
2
-1
3
4
3
1
-1
3
2
0
-2
f2 7f2 f1
0
0
0
0
f3 7f3 f1
2
-3
1
-2
3
-2
-4
-6
2
-2
-4
-6
f4 7f4 3f1
Intercambiar las filas es superfluo pero nos permite evitar los calculos con
fracciones al crear los ceros de la segunda columna:
0
0
f2 f3
2
1
-3
-2
3
-4
-2
-6
2
1
0
-4
0
-2
f3 7f3 +3f2
-6
0
f4 7f4 +2f2
f4 7f4 f3
|1
0
0
0
2
|1
0
0
3
-4
|-14
0
2
1
0
0
3
-4
-14
-14
2
-4
-14
-14
2
-4
-14
0
Los elementos se
nalados se llaman elementos pivote y se
nalan el principio
de los escalones. Con mas rigor, un elemento pivote en una matriz escalonada es un elemento no nulo que tiene ceros a la izquierda. Las columnas
que contienen a los elementos pivote se llaman columnas pivote.
Una vez que se ha llegado a la forma escalonada es facil resolver el sistema
(o deducir que no tiene solucion), despejando de abajo a arriba las ecuaciones.
As en el ejemplo anterior la tercera ecuacion de la forma escalonada implica
z = 1, sustituyendo en la segunda se tiene y = 0 y estos resultados en la
primera dan x = 1.
Reducci
on de Gauss-Jordan El algoritmo de reducci
on de Gauss-Jordan
es similar al del Gauss pero cuando se ha finalizado este se procede a crear
ceros encima de los elementos pivote empleando las filas de abajo a arriba sin
modificar la estructura escalonada. Multiplicando por un n
umero adecuado
(transformacion 2) tambien se consigue que los elementos pivote sean unos.
Esta forma escalonada en la que los elementos pivote son unos y el resto
64
de los elementos de las columnas pivote son ceros a veces se llama forma
escalonada reducida.
En el ejemplo anterior dividiendo entre 14 en la tercera fila los pivotes
seran unos:
0 1
0 0
2
1
0
-4
0
-14
f3 7f3 /14
0
0
3
-4
-14
0
2
1
0
0
3
-4
1
0
2
-4
1
0
Ahora creamos ceros encima del tercer elemento pivote y despues del segundo:
f2 7f2 +4f3
f1 7f1 3f3
0 1
0 0
0
0
1
0
-1
1
0
0
0
1
f1 7f1 2f2
0
0
0
1
0
0
0
0
1
0
-1
0
1
0
1
3
x 2y +z = 2
3x 6y +2z = 1
-2
-6
1
2
0
0
2
1
1 -2 1 0 2
1 -2
3 -6 2 0 1
0 0
f2 7f2 3f1
65
1
-1
0
0
2
-5
1 -2 1 0 2
1 -2 0 0 -3
.
0 0 1 0 5
0 0 1 0 5
f2 7f2
f1 7f1 f2
x = 2
x = 3 + 2
y=
y=
y
z=0
z = 5.
5.2.
Algebra
matricial
0 0
1 2
1 1
2 1
1 2 3
8
3
1 0 =
+
=
,
.
3 4
0 1
3 5
4 5 6
17 6
2 1
1
66
1 4
1 2 3
M23 (R),
At = 2 5 M32 (R).
A=
4 5 6
3 6
Con respecto a la suma y el producto, la traspuesta tiene las propiedades:
1) (A + B)t = At + B t ,
2) (AB)t = B t At
2) (At )1 = (A1 )t ,
3) (A1 )1 = A.
1 2
0
3 .
A = 0 1
2 1 8
Los pasos del algoritmo de Gauss-Jordan son:
!
1
0
0
f3 7f3 2f1
f3 7f3 /7
1
0
0
f1 7f1 2f2
2
1
0
1
0
0
2
1
-5
1
0
-2/7
0
3
1
0
1
0
0
3
-8
0
0
1
-5/7
6/7
-2/7
1
0
-2
0
1
0
0
1
5/7
16/7
-8/7
5/7
0
0
1
0
0
1/7
f3 7f3 +5f2
f2 7f2 3f3
6/7
-3/7
1/7
1
0
0
2
1
0
0
3
7
1
0
-2
1
0
0
2
1
0
0
0
1
1
6/7
-2/7
!
= A1
0
1
5
0
0
1
0
-8/7
5/7
0
-3/7
1/7
a11 . . . a1n
x1
b1
..
.
.
~b = ...
.. ,
A= .
~x = .. ,
.
am1 . . . amn
xn
bm
Si A es una matriz invertible entonces el sistema tiene solucion u
nica dada
1~
por ~x = A b.
Las transformaciones elementales en los algoritmos de Gauss y GaussJordan pueden escribirse en terminos de multiplicaciones de matrices.
5.3.
Espacios vectoriales
Espacios y subespacios vectoriales. Un espacio vectorial sobre un cuerpo es intuitivamente un conjunto en el que tenemos definida una suma y una
multiplicacion por n
umeros (los elementos de un cuerpo) con las propiedades
68
habituales. La definicion rigurosa es mas complicada requiriendo la estructura algebraica de grupo abeliano con la suma y cuatro propiedades que ligan
la suma y la multiplicacion.
Los elementos de un espacio vectorial se llaman vectores y los elementos
del cuerpo (los n
umeros) escalares.
Los ejemplos de espacios vectoriales de espacios vectoriales sobre un cuerpo K mas importantes en este curso son:
1. K n que es el producto cartesiano K .n. veces
. . . . K con la suma y el
producto por elementos de K definidos de la manera obvia. Por razones
que seran claras mas adelante, escribiremos en columna la coleccion de
n elementos de K que representan cada vector de K n . El ejemplo mas
com
un en el curso sera Rn .
2. P[x], el conjunto de polinomios en la variable x con coeficientes en K.
3. Mmn (K).
Un subespacio vectorial es un espacio vectorial incluido en otro con las
mismas operaciones. Las propiedades de espacio vectorial se cumplen inmediatamente en un subconjunto siempre que las operaciones esten bien definidas, por ello para demostrar que cierto subconjunto S de un espacio vectorial
sobre K es un subespacio basta comprobar:
1) ~u, ~v S ~u + ~v S
2) ~u S, K ~u S
Por ejemplo, Rn [x], el conjunto de todos los polinomios con coeficientes reales
de grado menor o igual que n (incluyendo al polinomio cero) son un subespacio de P[x] y en particular un espacio vectorial. Sin embargo los polinomios de
grado exactamente 3 no lo son porque 1 x3 y x + x3 estan en este conjunto
pero su suma no.
Un ejemplo de subespacio vectorial muy frecuente este curso es el subconjunto de K n dado por las soluciones ~x K n del sistema A~x = ~0 donde
A Mmn (K) (el convenio de los vectores columna hace que el producto de
matrices tenga sentido).
Dados vectores ~v1 , ~v2 , . . . ~vn , una combinaci
on lineal de ellos es cualquier
expresion del tipo 1~v1 + 2~v2 + + n~vn con 1 , . . . n K.
69
3
1
1
1
x
x
hCi = y R3 : y = 0 + 2 .
3
1
x
x
1
0
-1
1
-2
3
x
y
z
1
0
0
1
-2
4
x
y
x+z
1
0
0
1
-2
0
x
y
x + 2y + z
!
.
Im(f ) = {w
~ W : ~v con f (~v ) = w}.
~
70
1
x
f
= 0
y
1
1
x
2
,
y
3
hallemos su n
ucleo y su imagen.
Al igualar a ~0 y resolver el sistema se obtiene u
nicamente la solucion trivial
x = y = 0, por tanto Nuc(f ) = {~0}. Las columnas forman un conjunto C
que genera un subespacio de R3 que seg
un hemos visto antes responde a la
ecuacion x + 2y + z = 0. De aqu concluimos que f es una aplicacion lineal
inyectiva pero no sobreyectiva, en particular no tiene inversa.
5.4.
Bases y dimensi
on
Bases y dimensi
on Una base B de un espacio vectorial V es un subconjunto que verifica hBi = V (sistema de generadores) y que es linealmente
independiente.
En este curso solo trataremos el caso de bases con un n
umero finito de
elementos. Es conveniente considerar las bases como conjuntos ordenados (es
decir, no cambiaremos la ordenacion de los vectores que la componen).
71
Dada una base B = {~b1 , . . . , ~bn } cada vector ~v se puede escribir de forma
u
nica como combinacion lineal ~v = 1~b1 + + n~bn . Los n
umeros 1 , . . . , n
se llaman coordenadas o componentes de ~v en la base B.
Un espacio vectorial V puede tener muchas bases pero todas ellas tienen
el mismo n
umero de elementos, llamado dimensi
on que se indica con dim V .
n
En K se llama base can
onica a {~e1 , . . . , ~en } donde ~ei es el vector que
tiene en el i-esimo lugar un uno y en el resto ceros. Esta base canonica se
puede extender al espacio de matrices Mmn (K) considerando {~e1 , . . . , ~emn }
donde ~ei es la matriz que tiene en el i-esimo lugar un uno y en el resto ceros,
donde se cuentan los lugares de izquierda a derecha y de arriba a abajo. En
el espacio Kn [t] formado por los polinomios de grado menor o igual que n en
la variable t, la base llamada canonica es {1, t, . . . , tn }. Con estos ejemplos
se tiene dim K n = n, dim Mmn (K) = mn y dim Kn [t] = n + 1. El espacio
vectorial trivial V = {~0} tiene dimension cero.
En un espacio vectorial de dimension n siempre n vectores linealmente
independientes forman una base. As por ejemplo {1 + x x2 , 7 + x, 5 7x}
es una base de R2 [x] porque claramente estos polinomios son linealmente
independientes y sabemos que dim R2 [x] = 3.
Una aplicacion lineal f : K n K m se puede escribir siempre como
f (~x) = A~x con A Mmn (K). Las columnas de A son las imagenes de los
vectores de la base canonica.
Fijada una base B de un espacio vectorial V de dimension n, la aplicacion que asigna a cada vector de V sus coordenadas en la base B define un
isomorfismo (una aplicacion lineal biyectiva) de V en K n . Esto prueba que
cualquier espacio vectorial (de dimension finita) es isomorfo a alg
un K n , es
decir, es igual salvo renombrar sus vectores. Con ello podemos asignar una
matriz a una aplicacion lineal entre espacios que no son necesariamente K n
siempre que hayamos fijado bases.
Por ejemplo f (P ) = P + P 0 (con P 0 la derivada de P ) es una aplicacion
lineal f : R2 [x] R2 [x] y si fijamos la base canonica, cada polinomio
a + bx + cx2 estara asociado al vector de R3 con coordenadas a, b y c. El
efecto de la aplicacion f se puede traducir a R3 :
f (a+bx+cx2 ) = (a+b)+(b+2c)x+cx2
a
a+b
1
e
b
b
+
2c
f
=
= 0
c
c
0
1
1
0
0
a
2 b .
1
c
Esta u
ltima matriz 3 3 diremos que es la matriz asociada a f cuando se
emplea la base B.
72
5.5.
Suma e intersecci
on de subespacios Hay dos operaciones naturales que
se pueden aplicar sobre los subespacios para producir otros nuevos.
1. Dados dos subespacios V y W de un mismo espacio vectorial, su interseccion V W tambien es un subespacio.
2. Dados V y W como antes, se define el subespacio suma como
V + W = {~v + w
~ : ~v V, w
~ W }.
Para calcular la interseccion de dos subespacios de K n dados por ecuaciones, simplemente se a
naden las ecuaciones del primero a las del segundo.
Para calcular la suma de dos subespacios dados por generadores, simplemente se a
naden los generadores del primero a los del segundo.
Por ejemplo, digamos que queremos calcular la interseccion y la suma
de los subespacios de R4 , V y W , que tienen bases BV = {~u1 , ~u2 } y BW =
{~u3 , ~u4 } con
1
2
~u1 =
1 ,
0
0
1
~u2 =
0 ,
1
73
1
0
~u3 =
0 ,
2
2
1
~u4 =
1 .
1
La suma es el subespacio de R4 generado por {~u1 , ~u2 , ~u3 , ~u4 }. Un calculo, que
no se incluye, prueba que no es linealmente independiente pero {~u1 , ~u2 , ~u3 }
s lo es. As pues este u
ltimo conjunto es una base de V + W y se tiene
dim(V + W ) = 3.
Para hallar la interseccion hallamos las ecuaciones de V y W por el procedimiento ya estudiado, obteniendose
V = ~x R4 :
1 0 1 0
~x = ~0 ,
2 1 0 1
W = ~x R4 :
0
2
1 1 0
~x = ~0 .
3 0 1
5.6.
Rango Dada una matriz A Mmn (K) se define su rango, y se denota con
rg(A), como el n
umero maximo de columnas de A linealmente independientes.
Seg
un hemos visto, si f : K n K m viene dada por f (~x) = A~x entonces
rg(A) = dim Im(f ).
El rango se puede calcular aplicando el algoritmo de reduccion de Gauss
sobre la matriz. El n
umero de columnas pivotes (que es el n
umero de escalones) coincide con el rango y ademas las columnas de A en los lugares de
las columnas pivotes dan una base del subespacio de K m generado por las
columnas. Esto es u
til para calcular bases de Im(f ) y en general de cualquier
m
subespacio de K expresado mediante generadores.
74
1
3
2 5
A=
3
11
1
7
5 1
8
0
19 7
13 5
5
17
1
3
y llamamemos ~v1 , ~v2 , ~v3 , ~v4 , ~v5 a sus columnas, que generan Im(f ) para f
como antes. Con unos calculos la reduccion de Gauss lleva a
1
0
0
0
3
1
0
0
5
2
0
0
1
2
4
0
5
7
.
20
0
Este nombre practicamente solo se usa en los textos escritos por autores hispanos,
parece ser que por influencia del matematico hispanoargentino J. Rey Pastor (18881962).
75
base B por otra base B 0 , la matriz cambia a una nueva matriz A0 mediante
la formula:
A0 = MBB 0 A MB 0 B
donde MB 0 B es la llamada matriz de cambio de base de B 0 a B. Sus columnas
son las coordenadas en la base B de los elementos de la base B 0 . Se cumple
MBB 0 = MB10 B .
Por ejemplo, si tenemos la aplicacion lineal
f : R2 R2 ,
f (~x) = A~x,
con A =
1 2
,
3 4
entonces A es la matriz de f en la
base
can
onica B. Si queremos averiguar
la matriz A0 de f en la base B 0 = 21 , 32
(estas son las coordenadas con
respecto a la base canonica) se tiene seg
un la formula
MB 0 B =
2 3
1 2
A =
2 3
1 2
1
1
3
2
4
2
1
3
2
22
=
16
37
.
27
5.7.
a b
c d = ad bc,
a11
..
.
a22
0
..
.
a33
..
.
...
...
...
..
.
...
76
ann
..
.
Desde el punto de vista computacional la formula que define el determinante es muy costosa para matrices generales de tama
no moderadamente
grande.
Algunas propiedades de los determinantes son:
1. |A| = |At |.
2. |AB| = |A| |B|.
3. Al intercambiar dos columnas (o dos filas) el determinante cambia de
signo.
Regla de Cramer Los determinantes estan ligados a la resolucion de sistemas de ecuaciones lineales n n. La relacion mas conocida (aunque muy
poco practica) es la llamada regla de Cramer :
Sea el sistema A~x = ~b con A Mnn (K) y |A| =
6 0, entonces la solucion
(
unica) viene dada por la formula
x1 =
|A1 |
,
|A|
x2 =
|A2 |
,
|A|
x3 =
|A3 |
,
|A|
...
xn =
|An |
,
|A|
1
0
A=
4
2
2
2
2
2
3
2
0
1
4
3
3
1
0
|A| =
0
0
2
2
6
2
3
2
12
5
4 1
3 0
=
13 0
7 0
2
2
0
0
3
2
6
3
4
3
,
4
4
0
|A| =
0
0
2 3
2 2
0 3
0 6
1 2
4
0 2
3
0 0
4
0 0
4
77
3
2
3
0
4
3
= 1 2 (3) 4 = 24.
4
4
La relacion con la reduccion de Gauss tambien sirve para probar que las
columnas de una matriz cuadrada A son linealmente independientes si y solo
si |A| =
6 0 y esta u
ltima condicion equivale a que A sea invertible.
Se pueden emplear determinantes para hallar la matriz inversa. Si |A| 6= 0,
se tiene
1 t
A1 =
C
|A|
donde C es la matriz de cofactores, es decir cij = (1)i+j |Aij |. Por ejemplo,
si A = 31 21 se tiene |A11 | = 1, |A
2, |A22
12 | = 1, |A21 | = 1
|1 =23, y la matriz
1 1
de cofactores resulta C = 2
y
la
inversa
es
A
=
3
1 3 .
5.8.
Diagonalizaci
on de aplicaciones lineales
Valores y vectores propios Dado un endomorfismo, esto es, una aplicacion lineal f : V V , se dice que un vector ~v V no nulo es un autovector
o vector propio si verifica f (~v ) = ~v para alg
un K. Este n
umero se
llama autovalor o valor propio.
Cualquier m
ultiplo no nulo de un vector propio es tambien vector propio.
Si se tiene una aplicacion f : K n K n dada por f (~x) = A~x con A
Mnn (K), entonces el sistema A~x = ~x debe tener soluciones no triviales
(que son autovectores) cuando sea autovalor. Esto prueba que los valores
propios son las races de la ecuacion algebraica |AI| = 0, llamada ecuaci
on
caracterstica. Una vez hallados los autovalores, los autovectores se obtienen
resolviendo el sistema (A I)~x = ~0.
Todas las aplicaciones lineales f : V V tienen una matriz, una vez
fijada una base, y se corresponden con el caso anterior. A veces, con un poco
de falta de rigor, se habla de los valores y vectores propios de una matrices
para referirse a los de la aplicacion del tipo anterior con A especificada.
Calculemos todos los autovalores y autovectores de f : R3 R3 dada
por f (~x) = A~x donde
4 1 6
A = 2 1 6 .
2 1 8
78
Unos calculos, que se pueden simplificar con las propiedades de los determinantes, prueban que la ecuacion caracterstica es
|A I| = 3 + 132 40 + 36 = (9 )( 2)2 = 0.
Por tanto hay dos autovalores: 1 = 9 y 2 = 2. Resolviendo los sistemas
lineales (A 9I)~x = ~0 y (A 2I)~x = ~0 se tiene que los autovectores con
autovalores 1 y 2 son, respectivamente, los vectores no nulos de los subespacios:
* 1 +
V1 = 1
1
+
* 1
0
2 , 6
.
V2 =
1
0
1
0
1
x
x
2
2
1
1
R R dada por f y = 0 1 y tiene solo el autovalor 1 = 2 y el
79
subespacio formado por los autovectores (y el ~0) tiene dimension uno, por
tanto no hay suficientes autovectores para formar una base.
En el caso diagonalizable, la formula de cambio de base relaciona la matriz
original con la matriz diagonal a traves de las coordenadas de los vectores
de la base en que estamos diagonalizando. En general la formula responde al
esquema D = C 1 AC.
En el ejemplo que hemos venido manejando, se tendra
9
0
0
0
2
0
0
1
0 = 1
2
1
1
2
0
1
0
4
6 2
1
2
1 6
1
1 6 1
1 8
1
0
6 .
1
1
2
0
Es importante el orden relativo en que se ordenan los autovalores y autovectores, as el primer elemento de la matriz diagonal, d11 = 9, es un autovalor
que corresponde al autovector indicado por la primera columna en la matriz
de cambio de base.
Aplicaciones Hay varias aplicaciones de la diagonalizacion a temas fuera
de la propia algebra lineal. Revisamos dos de ellas a traves de sendos ejemplos:
1) Resolucion de sistemas de ecuaciones diferenciales lineales con coeficientes constantes.
Deseamos hallar las funciones regulares x = x(t) e y = y(t) que satisfacen
la relacion
0
x = x 2y
y 0 = x + 4y
Diagonalizando se tiene
D=C
AC
2
donde D = 0
0
3
yC=
y A= 1
2
.
4
1
.
1
2
1
an+1 = an 2bn
bn+1 = an + 4bn
80
an
1
, A=
bn
1
2
4
que en cierta manera es la variante discreta del problema anterior (las derivadas vienen de incrementos infinitesimales). Iterando obtenemos que la
solucion es ~sn = An~s0 y el problema consiste en hallar una formula para la
potencia n-esima de una matriz. Diagonalizando como antes A = CDC 1
implica An = CDn C 1 y se obtiene
~sn =
5.9.
2
1
1
1
2n
0
0
3n
2
1
1
1
1
~s0 .
Dado un vector
~x de un espacio vectorial eucldeo, se define su norma
Con un producto escalar se pueden definir distancias y angulos (que pueden no coincidir con los medidos con el producto escalar usual): d(~x, ~y ) =
k~x ~y k, cos = ~x ~y /(k~xkk~y k).
Formas bilineales Una forma bilineal es una funcion f : V V K
que es lineal en cada variable. En este curso K = R y una forma bilineal
sera simplemente una funcion que cumple la tercera propiedad del producto
escalar.
Se dice que una forma bilineal es simetrica si f (~x, ~y ) = f (~y , ~x) y que
es definida positiva si f (~x, ~x) > 0 para todo ~x 6= ~0. Con estas definiciones
se tiene que un producto escalar es una forma bilineal simetrica y definida
positiva.
No todas las formas bilineales son productos escalares. Por ejemplo, en
R2 la funcion f que asigna a cada par de vectores el determinante de sus
coordenadas puestas en columna, es bilineal pero no un producto escalar
porque f (~x, ~x) = 0 para todo ~x.
Fijada una base B = {~e1 , . . . , ~en } a cada forma bilineal f se le asigna la
matriz A que tiene como elemento aij a f (~ei , ~ej ).
Por ejemplo, al producto escalar definido antes en el espacio de polinomios
en el caso n = 2 con la base canonica {1, x, x2 } le correspondera la matriz:
R1
A=
1 1 dx
1
R1
1 x 1 dx
R1 2
x 1 dx
1
R1
1 x dx
R 1
1
x x dx
R 11 2
x x dx
1
R1
1 x2 dx
R 1
1
x x2 dx
R 11 2 2
x x dx
1
2
= 0
2/3
0
2/3
0
2/3
0 .
2/5
2 0
0
A0 = 0 2/3 0 ,
0 0 8/5
1 0
C t AC = 0 1
0 0
t
1
2
0 0
2/3
3
1
0 2/3
2/3 0 0
0
0 2/5
0
1
0
1
0
3
donde C se ha construido con las coordenadas de los elementos de B 0 (respecto de la base B).
5.10.
Ortogonalizaci
on Dada una base ortogonal de un espacio vectorial eucldeo es facil ortonormalizarla sin mas que normalizar cada uno de sus vectores
(es decir, dividiendolos por su norma).
Si {~b1 , ~b2 , . . . , ~bn } es una base de un espacio vectorial eucldeo V el proceso
de Gram-Schmidt produce una base ortogonal {~x1 , ~x2 , . . . , ~xn } de V . Este
proceso es un algoritmo definido por
~x1 = b1
i1 ~
X
bi ~xj
~
~xi = bi
~x ,
i = 2, 3, . . . , n.
2 j
k~
x
k
j
j=1
Se puede interpretar el algoritmo diciendo que a cada ~bi se le resta su proyeccion ortogonal (vease el siguiente apartado) sobre h{~x1 , . . . , ~xi1 }i.
2
Por ejemplo, la
R 1 base {1, x, x } de R2 [x] no es ortonormal con el producto
escalar hP, Qi = 1 P Q. Con el proceso de Gram-Schmidt conseguimos una
base ortogonal {P1 , P2 , P3 } tomando P1 = 1 y
R1
P2 = x
1 1x dx
1
R1
2
1 1 dx
R1
= x,
P3 = x
83
2
1 1x dx
1
R1
2
1 1 dx
R1
x3 dx
1
x = x2 .
2
3
1 x dx
R1
1
3
x,
2
45 2 1
x
.
8
3
De esta forma se concluye que todo espacio vectorial eucldeo (de dimension finita) tiene bases ortonormales.
Proyecci
on ortogonal Dado un subespacio W de un espacio vectorial
eucldeo V se define el complemento ortogonal de W (en V ) como el subespacio
W = {~v V : ~v w
~ = 0, w
~ W }.
Se prueba que V = W + W y es facil ver que W W = {~0} de modo
que V es suma directa de W y W . En consecuencia cada vector ~v V se
descompone de manera u
nica como ~v = w
~ + ~u con w
~ W y ~u W . Se dice
que w
~ es la proyecci
on ortogonal de ~v en W y se escribe w
~ = PrW (~v ). De la
propiedad (W ) = W se sigue que, con la notacion anterior, ~u = PrW (~v ).
En consecuencia
~v = PrW (~v ) + PrW (~v ).
Si {~x1 , ~x2 , . . . , ~xn } es una base ortogonal de W entonces la proyeccion
ortogonal responde a la formula:
PrW (~v ) =
~v ~x1
~v ~x2
~v ~xn
~x1 +
~x2 + +
~xn .
2
2
k~x1 k
k~x2 k
k~xn k2
sobre el
0
1
1
2
~v ~n
~n =
PrW (~v ) = ~v PrW (~v ) = ~v
k~nk2
84
1
2/3
4/3
1/3
!
.
Por otro lado, la forma general de proceder sera extraer primero una base
ortogonal de W . En este caso el algoritmo de Gauss aplicado de la forma
habitual produce una base B que se ortogonaliza utilizando el proceso de
Gram-Schmidt
0
0
1
0
1
0
Gram-Schmidt
0
2
0
1
0
B=
, 1 , 0
B =
, 11 , 1
.
0
0
1
0
5.11.
Una matriz cuadrada A Mnn (R) se dice que es una matriz ortogonal
si verifica At A = I, donde I es la matriz identidad. De esta definicion se sigue
facilmente |A| = 1, A1 = At y que las columnas de A son ortonormales.
La relacion entre ambas definiciones es que si consideramos Rn con el
producto escalar usual y f : Rn Rn dada por f (~x) = A~x entonces f es
una aplicacion ortogonal si y solo
una matriz
(3x4y)/5
ortogonal.
xsi A es
Por ejemplo, la aplicacion f y = (4x+3y)/5 de R2 en R2 (con el producto escalar usual) es ortogonal porque
f
x
y
3/5 4/5 x
4/5 3/5
y se verifica
85
1 0
0 1
3 2 2
A = 2 3 2
2
2 2
El teorema espectral asegura que los vectores de E1 y los de E2 son ortogonales pero no que los generadores que nosotros elijamos formen una base ortonormal. Si ortogonalizamos los generadores de E1 con el proceso de
Gram-Schmidt, debemos sustituir el segundo por
2/2 1 2/4
2/2
1
= 2/4 .
0
2
Con estos tres vectores tenemos una base ortogonal de R3 formada por vectores propios de A, que ortonormalizada (dividiendo cada vector por su norma)
es
2/25 2/5
1/ 2
5
2/ 5
B=
,
.
, 2/2
1/ 2
2/ 5
1/ 5
Notese que C es una matriz ortogonal (porque sus columnas son vectores
ortonormales) y por tanto C 1 = C t .
5.12.
Diagonalizaci
on de formas cuadr
aticas
Formas cuadr
aticas Una forma cuadratica es una funcion Q : V R
tal que Q(~x) = f (~x, ~x) donde f es una forma bilineal.
de ~x en una base B, entonces Q(~x) =
coordenadas
n
PnSi x1 , . . . , xn son las
f
x
x
donde
f
es
la
matriz
de f en la base B. Tomando
ij i,j=1
i,j=1 ij i j
Pn
aij = (fij + fji )/2 tenemos Q(~x) = i,j=1 aij xi xj = v~ t A~v donde A es una
matriz simetrica y ~v es un vector (columna) en Rn de coordenadas x1 , . . . , xn .
En definitiva, una forma cuadratica no es otra cosa que un polinomio
cuadratico homogeneo en las coordenadas. Ademas se puede escribir como
v~ t A~v con A = At , la matriz de la forma cuadratica en la base elegida.
87
Se dice que una forma cuadratica Q es definida positiva si Q(~x) > 0 para
~x 6= ~0, se dice que es definida negativa si Q(~x) < 0 para ~x 6= ~0 y, suponiendo
que su matriz tiene determinante no nulo, se dice que Q es indefinida si no
es ni definida positiva ni definida negativa.
Si A con |A| 6= 0 es la matriz de una forma cuadratica Q, por el teorema
espectral A diagonaliza en una base ortonormal. En dicha base Q se expresa
como 1 x21 + . . . n x2n donde 1 , . . . , n son los autovalores y Q sera definida positiva si todos ellos son positivos y definida
p negativa si todos son
0
negativos. Un posterior cambio de base xi 7 xi / |i | combinado con un
reordenamiento de las variables permiten llegar a que Q en cierta base se ex2
2
). A esta expresion
+ + yl+k
presa en coordenadas como y12 + + yk2 (yl+1
se le llama forma normal de Q y al par de n
umeros (k, l) signatura de Q (si
l = 0, Q es definida positiva).
Por
Q(~x) = x2 + 8xy 7y 2 con ~x = ( xy ) tiene como matriz
1ejemplo,
4
A = 4 7 , Q(~x) = x~ t A~x. Los autovalores de A son 1 = 1 > 0 y 2 =
9 < 0 entonces su signatura es (1, 1) y es indefinida. De la misma forma
si consideramos el ejemplo en R3 dado por Q = x2 + 5y 2 + 2z 2 + 4yz los
autovalores son 1 = 1 > 0 (doble) y 2 = 6 > 0 por tanto Q es definida
positiva.
El criterio de Sylvester es un criterio simple y eficiente en dimensiones bajas para decidir si una forma cuadratica es definida positiva. Lo que establece
es:
a11 ... a1k
t
.. > 0 para todo k.
x~ A~x definida postiva k = ...
.
ak1 ... akk
1 = | 1 | > 0,
2 = 2 11 > 0 y 3 = 2 11 1 > 0.
1 1 5
2 factor
com
un antes de completar cuadrados: 2(y 2 2yz) = 2 (y
89