Академический Документы
Профессиональный Документы
Культура Документы
o
r
r
a
d
o
r
Leccion IV
Calculo simbolico, arrays y celdas en Matlab.
Valores y vectores propios. Google.
151
B
o
r
r
a
d
o
r
Introduccion
La physique ne nous donne pas seulement
loccasion de resoudre des probl`emes... elle
nous fait pressentir la solution
Henri Poincare
En la primera parte de esta leccion trataremos diversos aspectos instrumentales de
Matlab, como el manejo de polinomios, arrays multidimensionales (tensores) y vectores de
celdas. Daremos ademas algunos esbozos sobre la manipulacion de expresiones simbolicas.
Aunque en este campo Matlab no es comparable a otros manipuladores simbolicos como
Maple o Mathematica, puede resultar en muchos casos suciente.
En la segunda parte trataremos el calculo de valores y vectores propios de Matlab.
Volvemos por tanto a incidir en el manejo de vectores y matrices, y en ese sentido es un
recordatorio de lo que vimos en las Lecciones 1 y 2. Con el n de aliviar el peso teorico de
la parte matematica, terminaremos con un captulo fundamentalmente divulgativo sobre
Google y su algoritmo de evaluacion de paginas web Pagerank
tm
.
153
B
o
r
r
a
d
o
r
Captulo 8
Matlab: Calculo simbolico y
estructuras de datos.
8.1. Polinomios y calculo simbolico
Los polinomios constituyen las funciones mas simples en Matematicas y computacio-
nalmente son importantes habida cuenta que contienen en su estructura las operaciones
basicas en un ordenador. En esta seccion veremos como maneja Matlab un polinomio y
nos servira de preparacion para la seccion siguiente donde veremos someramente la toolbox
de calculo simbolico.
8.1.1. Polinomios
Matlab maneja un polinomio identicandolo simplemente con un vector de n umeros
(en principio) reales. Concretamente, el vector la (a
n
, . . . , a
0
)
corresponde al polinomio
a
n
x
n
+ a
n1
x
n1
+ . . . + a
0
. Si alg un coeciente es nulo, debe incluirse. Por ejemplo, el
vector (1, 0, 2)
representa el polinomio x
2
+ 2. Sumar y restar dos polinomios se reduce
as a sumar y restar dos vectores, salvando el problema de que ambos deben tener el
mismo grado:
>> p=[2 0 1]; % 2*x^2+1
>> q=[-1 1 -1 0 1]; % -x^4+x^3-x^2+1
>> p+q % ERROR!!
??? Error using ==> plus
Matrix dimensions must agree.
>> p=[0 0 2 0 1]; % dos coeficientes mas
>> p+q % ahora OK!
ans=
-1 1 1 0 2
El producto y division de polinomios estan implementados respectivamente en los coman-
dos conv y deconv
155
B
o
r
r
a
d
o
r
8.1 Polinomios y calculo simbolico LECCI
ON IV
>> p=[2 0 1]; q=[-1 1 -1 0 1];
>> conv(p,q)
ans =
-2 2 -3 1 1 0 1
>> deconv(q,p)
ans=
-0.5000 0.5000 -0.2500
Ejercicio 8.1 Implementa una funcion que calcule la suma de dos polinomios, su producto,
cociente y resto seg un el siguiente prototipo
01 OPERACIONESPOL(P1,P2)
02
03 [S,R,C,P]= OPERACIONESPOL(P1,P2) S, R, C y P son la suma, resta
04 cociente y producto de P1 y P2
(Ayuda: P1 y P2 deben ser de la misma longitud. Que hace la instruccion
p1=[zeros(1,length(p2)-length(p1)) p2]
cuando length(p2)>length(p1)? Comprueba que tambien es valida cuando length(p2)<length(p1).
Que hace entonces?.)
El comando polyval se encarga de la evaluacion de un polinomio:
>> p=[1 0 0 1 0 3]; %definimos el polinomio x^5+x^2+3
>> polyval(p,2) %evaluamos en x=2
ans =
39
>> polyval(p,[1 2 3]) %vectorizado
ans =
5 39 255
Races de polinomios
Las races de un polinomio p son las soluciones de la ecuacion p(x) = 0. El Teorema
Fundamental del
Algebra
1
arma que un polinomio de grado n tiene exactamente n races
en C (alguna puede estar repetida).
1
Demostrado por primera vez por Carl Friedrich Gauss en 1799 (a los 22 a nos) en su tesis doctoral.
Gauss ha salido repetidamente en estas lecciones y en campos muy distintos, desde las Matematicas mas
aplicadas a las mas puras. Quizas ahora se comprenda mejor por que recibio el sobrenombre deprncipe
de las Matematicas.
156
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
En la segunda parte de esta leccion nos centraremos en los metodos numericos para el
calculo de las races de estos polinomios
2
.
Nota. Un problema clasico
3
es la determinacion de las races de un polinomio. La ecua-
cion de segundo grado aparece mas o menos resuelta en las Matematicas antiguas: ba-
bilonicas, griegas, hind ues y arabes. Es un hecho muy resaltable que no exista una formula
para la solucion como la como la que conocemos hoy en da, sino que los autores describan
diversas ecuaciones, habitualmente con ejemplos concretos, para luego explicar como se
proceda a resolverlas
4
a menudo con razonamientos geometricos que excluan cualquier
resultado negativo. Fue en las matematicas hind ues donde las races negativas fueron
consideradas como validas.
Las matematicas italianas primero y europeas despues retoman a partir del siglo XV
las ecuaciones polinomicas. Nicolo Fontana Tartaglia, Girolamo Cardano, Francois Vi`ete,
Rene Descartes, Gottfried Wilhelm von Leibniz, Joseph-Louis Lagrange y Leonhard Euler
entre otros matematicos de menor renombre, estudiaron la resolucion por radicales de
ecuaciones polinomicas de tercer y cuarto grado con un resultado nal satisfactorio: se
consiguio dar con formulas que proporcionaban las races de un polinomio de grado 4. Sin
embargo fueron incapaces de encontrar una formula para la ecuacion general de quinto
grado. La cuestion quedo zanjada de forma sorprendente: Niels Henrik Abel probo en 1824
(a los 22 a nos) que no exista un formula que diera las races de cualquier polinomio de
grado 5 mediante la aplicacion de radicales
5
tomando races enesimas. En ultima medida,
se haba llegado a la conclusion de que era imposible la resolucion exacta de ecuaciones
polinomicas de grado mayor o igual que cinco. El estudio de cuando una ecuacion se poda
resolver mediante radicales fue iniciado por Evariste Galois
6
.
Otro asunto muy diferente es la resolucion numerica del problema. Se dispone de una
familia de metodos para la resolucion de problemas no lineales generales (es decir, para
ecuaciones de la forma f(x) = 0 donde f es una funcion cualquiera, no necesariamente
polinomica) como los metodos de Newton-Raphson, secante, regulafalsi, etc. Sin em-
bargo, dadas las particulares propiedades de los polinomios, hay metodos especialmente
dise nados para tal n. Algunos metodos clasicos son los de Bairstow y el de Bernoulli. En
los ultimos a nos el calculo de las races de un polinomio ha quedado reducido al calculo
2
Las races son los valores propios de la matriz A.
3
La informacion de estas lneas se ha extrado de la web MacTutor History of Mathematics Ar-
chive de la Universidad de St. Andrews (Escocia). La direccion electronica es http://turnbull.mcs.st-
and.ac.uk/history/
4
al-Khwarizm clasico y explico como resolver ecuaciones de segundo grado en 6 tomos. El desarrollo
del
Algebra y la manipulacion simbolica de expresiones ha conseguido que este problema pueda ser
planteado en nuestros das a un alumno de primaria.
5
Paolo Runi haba dado una demostracion no del todo correcta en 1799.
6
Galois y Abel comparten algunas caractersticas en com un, ambos murieron jovenes (Abel a los 29
a nos y Galois a los 21) con buena parte de su trabajo ignorado por la comunidad matematica. La muerte
de Galois es todava mas sorprendente. Frances y republicano convencido, llego a estar en prision por ello,
murio en un duelo en 1832 en los a nos convulsos posteriores a la revolucion francesa, aunque no esta claro
si este fue por motivos polticos o de otra ndole. En la noche anterior al duelo escribira en el margen de
unas notas sobre las que trabaja: Falta algo para completar la demostracion. No tengo tiempo.. Esta
frase ha cimentado la, probablemente exagerada, leyenda de que paso la noche escribiendo Matematicas.
Su trabajo fue rescatado del olvido por Joseph Liouville 11 a nos despues.
158
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
a
n1
a
n2
a
1
a
0
1 0 0 0
0 1
.
.
.
0 0
.
.
.
.
.
.
.
.
.
.
.
.
0 0 1 0
_
_
Al calculo de los valores propios de una matriz volveremos en la segunda parte de esta
leccion.
8.2. Procesador simbolico
Retomando el hilo de la seccion anterior, otra forma de operar con polinomios es de
manera simbolica. Para ello podemos proceder del siguiente modo:
>> syms x %define x como variable simbolica
>> (x^4+x^2-1)+(2*x^3+4*x^2+3) %suma de polinomios
ans =
x^4+5*x^2+2+2*x^3
>> expand((x^4+x^2-1)*(2*x^3+4*x^2+3)) %expande el producto
ans =
2*x^7+4*x^6+2*x^5+7*x^4-2*x^3-x^2-3
Observa con atencion la primera instruccion. Con syms, declaramos x con una variable
simbolica y por tanto susceptible de entrar en expresiones y manipulaciones algebraicas.
Las ordenes anteriores pueden aplicarse sobre funciones cualesquiera, no necesaria-
mente polinomicas:
>> syms x y
>> expand(cos(x+y))
ans=
cos(x)*cos(y)-sin(x)*sin(y)
Podemos llevar a cabo operaciones de calculo basico tales como la integracion o la
derivacion:
7
De hecho, as procede roots.
159
B
o
r
r
a
d
o
r
8.2 Procesador simbolico LECCI
ON IV
>> diff(x*cos(x^2)) %derivada
ans =
cos(x^2)-2*x^2*sin(x^2)
>> diff(x^4+x^2-1,3) %tercera derivada
ans =
-24*x^2*cos(x^2)-6*sin(x^2)+8*x^4*sin(x^2)
>> int(exp(x)*cos(4*x),x) %integral indefinida
ans =
1/17*exp(x)*cos(4*x)+4/17*exp(x)*sin(4*x)
>> int(exp(x)*cos(4*x),x,0,pi) %integral definida
ans =
1/17*exp(pi)-1/17
De forma similar se pueden calcular lmites (limit), sumar series (symsum),
>> sym k;
>> symsum(1/k^2,k,1,inf)
ans=
1/6*pi^2
hacer desarrollos de Taylor (taylor) o transformadas integrales como las de Fourier o
Laplace (fourier, ifourier, laplace e ilaplace)
Observa como los resultados son smbolos y no n umeros. En cualquier caso, el comando
vpa procede a evaluar con la precision solicitada (si es posible)
>> vpa( 1/17*exp(pi)-1/17) % 32 cifras por defecto
ans=
1.3023936842811332237346277906909
>> vpa( 1/17*exp(pi)-1/17,64) % ahora con 64 cifras
ans=
1.3023936842811332237346277906908653676509857177734375000
160
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
Nota. Matlab es un programa mas enfocado al calculo numerico que al simbolico. Cier-
tamente los resultados son presentados de una forma que esteticamente no es comparable
a Mathematica o Maple. Sin embargo se puede acceder a cualquier instruccion de Maple
luego a priori todo lo que se puede hacer con este procesador se puede hacer con Matlab.
Para llamar a un comando de Maple se utiliza el comando maple, mientras que a la ayuda
correspondiente se accede con mhelp.
8.3. Tensores
Ya hemos hablado en m ultiples ocasiones de la gran potencia que posee Matlab para
realizar calculos matriciales
8
y su habilidad en el manejo de grandes cantidades de memo-
ria. Estas habilidades se extienden a la manipulacion de arrays multidimensionales, que
matematicamente se puede identicar con tensores. Un tensor es simplemente una matriz
multidimensional, esto es, si una matriz se puede interpretar como una tabla de n umeros,
un tensor (o array) tridimensional es simplemente un conjunto de n umeros desplegados
en 3D en forma de paralelogramo. As
>> a=zeros(1,3,2)
a(:,:,1) =
0 0 0
a(:,:,2) =
0 0 0
dene un array de una la, tres columnas y dos alturas. Abandonaremos en lo que sigue
este smil geometrico pues aporta poco. Se puede declarar un tensor simplemente dando
sus valores
>> a2(:,:,1)=[1 2 3;4 5 6]
a2 =
1 2 3
4 5 6
>> a2(:,:,2)=[7 8 9;10 11 12]
a2(:,:,1) =
1 2 3
4 5 6
8
Recuerda Matlab = Matrix laboratory
162
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
1 2 3
4 5 6
Por tanto, de las variables que acabamos de denir unicamente a3 es una matriz propia-
mente dicha.
La forma de operar con tensores es basicamente la misma que con vectores y matrices.
Por ejemplo:
>> b=a+ones(2,3,2)
b(:,:,1) =
2 3 4
5 6 7
b(:,:,2) =
8 9 10
11 12 13
>> b(:,2:3,2)=[-1 -2;-3 -4]
b(:,:,1) =
2 3 4
3 3 3
b(:,:,2) =
8 -1 -2
3 -3 -4
>> b(:) % como se guarda en memoria...
ans =
2 3 3 3 4 3 8 3 -1 -3 -2 -4
Ejemplo. Mediante las siguientes ordenes calculamos las cinco primeras potencias de
la matriz a y las almacenamos en una variable tridimensional b:
a=[1 2;3 4];
b(:,:,1)=a;
for i=2:5
b(:,:,i)=b(:,:,i-1)*a; %b(:,:,i) guarda a^i
end
164
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
8.4. Vectores de celdas
Aunque los tensores a naden mayor exibilidad a las matrices y vectores, siguen siendo
estructuras rgidas (todas las entradas deben ser n umeros reales, a(1,:,:,:) debe tener
la misma dimension que a(2,:,:,:),...).
Matlab cuenta con una estructura que probablemente sea el paradigma de la exibilidad
en tanto en cuanto permite guardar casi cualquier tipo de dato. Es, por as decirlo, un
cajon de sastre. Este tipo de estructura se denomina vector (matriz o tensor) de celdas
o cell array. Ya nos hemos encontrado con esta estructura cuando vimos el dise no de
funciones cuyo n umero de parametros de entrada y/o salida era variable. Las variables
varargin y varargout son realmente vectores de celdas que contenan distintos tipos de
datos a los que se acceda mediante llaves. Un vector de celdas se maneja del mismo. A
modo de ejemplo podemos crear un vector de celdas simplemente asignando valores
>> celda={7,[1 2 3;4 5 6],una cadena de caracteres,inline(x+y)};
>> whos celda
Name Size Bytes Class
celda 1x4 1214 cell array
Grand total is 95 elements using 1214 bytes
que es equivalente a dar cada una de sus componentes
>> celda{1}=7;
>> celda{2}=[1 2 3;4 5 6];
>> celda{3}=una cadena de caracteres;
>> celda{4}=inline(x+y);
Tambien se puede proceder, con peque nas diferencias de sintaxis, de la siguiente forma
>> celda(1)={7};
>> celda(2)={[1 2 3;4 5 6]};
Fjate en la disposicion de las llaves en los dos ejemplos anteriores. En cualquier caso, una
vez denido el vector podemos acceder a cada una de sus componentes indicando entre
llaves su posicion
>> celda{1}
ans =
7
>> celda{4}([1 2 4], [2 1 1/2]) % funcion!!
ans =
3.0000 3.0000 4.5000
166
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
Las races de un polinomio son muy sensibles a variaciones en sus coecientes;
El polinomio a su vez puede ser muy sensible a las entradas de la matriz.
En vista de lo anterior se planteo el problema original: son los valores y vectores propios
sensibles a peque nas modicaciones de las entradas de la matriz?. Afortunadamente para
matrices simetricas se tiene la ansiada estabilidad: peque nas variaciones en A, producto
por ejemplo de errores de medida o errores de redondeo, dan lugar a peque nas modi-
caciones en los valores propios
1
. Para matrices arbitrarias este resultado dista mucho
de ser cierto, las condiciones para asegurar la estabilidad son mas complicadas, y po-
demos encontrarnos con lo que en la terminologa habitual se denomina, matrices mal
condicionadas para el calculo de valores propios.
Ejemplo Estas lneas muestran la sensibilidad de una matriz muy simple ante una
peque na variacion en una entrada.
>> a=[149 50 154;-537 -180 -546;27 9 25];
>> p= poly(a)
p =
1.0000 6.0000 11.0000 6.0000
>> roots(p).
ans =
-3.0000 -2.0000 -1.0000
>> b=[149 50 154;-537 -180.01 -546;27 9 25];
>> q=poly(b)
ans =
1.0000 6.0100 9.2600 1.6700
>> roots(q).
ans=
-3.5019 -2.3008 -0.2073
Ejercicio 9.1 Repite el ejemplo anterior con diferentes matrices simetricas y observa como
el resultado es mas estable.
1
Probado por primera vez por Hermann Weyl en 1911 en un area totalmente distinta.
170
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
, y por tanto
P
AP = D.
Las matrices ortogonales son muy estables numericamente y posibilitan el dise no de meto-
dos mas robustos frente a errores de redondeo.
2
Recogida por D. Kincaid y W. Cheney en su excelente libro Analisis Numerico: Las Matematicas
del Calculo Cientco. Addison-Wesley, 1994.
3
Como asumir que las races de un polinomio tan sencillo fueran imposibles de aproximar por un
ordenador? Wilkinson dira despues Speaking for myself I regard it as the most traumatic experience in
my career as a numerical analyst
171
B
o
r
r
a
d
o
r
9.3 Metodo de potencias LECCI
ON IV
Teorema 9.1 Si A es simetrica, existe Q ortogonal tal que Q
n
i=1
vectores propios linealmente independientes (la matriz A es por tanto
diagonalizable). Entonces, cualquier vector x
0
puede escribirse en la forma
x
0
=
n
i=1
i
v
i
con
i
adecuados. Multiplicando reiteradamente por A obtenemos
A
m
x
0
=
n
i=1
m
i
v
i
=
m
1
_
1
v
1
+
2
_
1
_
m
v
2
+ . . . +
n
_
1
_
m
v
n
_
. (9.1)
Entonces, si
1
,= 0 y m es grande
x
m
:= A
m
x
0
m
1
1
v
1
,
es decir, x
m
tiende a apuntar en la direccion del vector propio asociado al valor propio
de mayor modulo (en el lenguaje habitual se habla del valor propio dominante). El valor
propio
1
se puede calcular, entre otras posibilidades, mediante el conocido cociente de
Rayleigh:
(m)
1
:=
x
m
Ax
m
|x
m
|
2
=
x
m
x
m+1
|x
m
|
2
1
.
172
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
(m)
1
=
1
+O
__
2
_
m
_
.
Si ademas A es simetrica
(m)
1
=
1
+O
__
2
_
2m
_
.
Basado en estas ideas surge el metodo de potencias, que simplemente consiste en
multiplicar un vector inicial por las potencias sucesivas de la matriz A. Para evitar que
los vectores x
m
tengan componentes muy grandes o muy peque nas se genera una sucesion
de vectores normalizados, es decir, una vez multiplicado por A se procede a dividir por
su norma.
El algoritmo es el siguiente:
Metodo de potencias
01 x
0
,= 0 vector inicial
02 y
0
=
x
0
|x
0
|
2
03 for m=1:mmax
04 x
m
= Ay
m1
05
(m)
= y
m1
x
m
06 y
m
=
x
m
|x
m
|
2
07 if |y
m
y
m1
|
2
< eps
08 return
09 end
10 end
La lnea 06 es simplemente el cociente de Rayleigh que, como la norma escogida para
normalizar es la eucldea, adopta esta expresion mas sencilla.
Hemos elegido como criterio de parada la diferencia entre dos vectores consecutivos.
Otra posible eleccion es
[
(m)
(m1)
[ < eps [
(m)
[.
Ejercicio 9.2 Programa el metodo de potencias
Solucion. He aqu una implementacion del metodo.
01 %POTENCIAS
02 %
03 %LB=POTENCIAS(A) Devuelve en LB una aproximacion del
173
B
o
r
r
a
d
o
r
9.3 Metodo de potencias LECCI
ON IV
04 % mayor valor propio de A calculado
05 % por el metodo de potencias
06 %
07 %[LB,V]=POTENCIAS(A) V es el vector propio
08 %
09 %[LB,V,NITER]=POTENCIAS(A) NITER son las iteraciones calculadas
10 %
11 % LB=POTENCIAS(A,MMAX) MMAX No. maximo de iteraciones n
12 %
13 % LB=POTENCIAS(A,MMAX,EPS) EPS es el criterio de parada
14 %
15 % LB=POTENCIAS(A,MMAX,EPS,V0) V0 vector inicial para la iteracion
16
17 function [lb,x,m]=potencias(a,varargin);
18
19 n=length(a);
20 if nargin>1 & ~isempty(varargin{1})
21 mmax=varargin{1};
22 else
23 mmax=n*2;
24 end
25 if nargin>2 & ~isempty(varargin{2})
26 eps=varargin{2};
27 else
28 eps=1e-6;
29 end
30 if nargin>3 & ~isempty(varargin{3})
31 y=varargin{3};
32 else
33 y=rand(n,1);
34 end
35 y=y/norm(y);
36
37 for m=1:mmax
38 x=a*y;
39 lb=y*x;
40 x=x/norm(x);
41 if norm(x-y)<eps
42 return
43 end
44 y=x;
45 end
46 disp(numero maximo de iteraciones superado)
Observa la utilizacion de isempty que permite que el usuario especique alguno de
los parametros, ignorando los anteriores sin mas que utilizar el vaco []. Por ejemplo, la
siguiente llamada es valida:
174
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
0 0 0 24
1 0 0 50
0 1 0 35
0 0 1 10
_
_
cuyos valores propios son 1, 2, 3 y 4.
1. Aplicar el metodo de potencias a la matriz A partiendo de un vector aleatorio y del
vector (20, 33, 15, 2)
.
2. Sabiendo que v
1
= (24, 26, 9, 1)
y v
2
= (12, 19, 8, 1)
?
3. Observa para distintas tolerancias la diferencia entre partir del vector del apartado an-
terior y de (12, 31, 15, 2.0001)
.
4
El efecto de los errores de redondeo se traduce en una componente no nula en la direccion de v
1
,
incluso aunque el vector inicial no la tuviese. Se podra decir que este es uno de los pocos casos en los
que los errores de redondeo nos pueden ayudar.
175
B
o
r
r
a
d
o
r
9.3 Metodo de potencias LECCI
ON IV
Ejercicio 9.5 En este ejercicio vamos a comprobar que el calculo de los valores propios
utilizando el polinomio caracterstico no es el camino correcto. Teclea las instrucciones en un
chero script
n=50;
d=1/n:1/n:1; [q,r]=qr(rand(n));
a=q*d*q;
En a tenemos una matriz simetrica con valores propios
5
0.02, 0.04, 006, . . . , 1. Se trata de
que apliques potencias para calcular el valor propio dominante y compares el resultado con el
que obtienes al calcular las races del polinomio caracterstico.
Compara los resultados. Cambia el valor de n y observa el efecto que tiene en matrices
cada vez mas grandes.
9.3.2. Variantes del metodo de potencias
Metodo de la potencia inversa
Si A es invertible y v es un vector propio asociado a un valor propio (que sera distinto
de cero), entonces,
Av = v A
1
v =
1
v.
Es decir,
1
es un valor propio de la matriz inversa y v es un vector propio asociado.
Por tanto podemos aplicar el metodo de potencias a la matriz A
1
para calcular el menor
valor propio en valor absoluto de A.
En lugar de calcular el producto x
m
= A
1
y
m1
(lnea 04 en el metodo de potencias)
resolveremos en cada iteracion el sistema
6
Ax
m
= y
m1
.
Disponemos para ello de una galera amplia de metodos vistos en las Lecciones I y II.
Notemos ademas que en cada iteracion se tiene que resolver un sistema cuya matriz
es siempre la misma, as que si optamos por un metodo directo podemos calcular la
factorizacion LU una unica vez, fuera del bucle for (lneas 03--10), y resolver de forma
reiterada los dos sistemas triangulares. Si por contra se opta por un metodo iterativo,
podemos arrancar el esquema utilizando x
m1
, la aproximacion del vector propio calculada
en la iteracion anterior.
Ejercicio 9.6 Programa a partir del Ejercicio 9.2 el algoritmo de la potencia inversa.
Metodo de potencias desplazado
Si es un valor propio de A, entonces es un valor propio de AI y ( )
1
lo es de (A I)
1
. Por tanto, si aplicamos el metodo de potencias a la matriz
A I
5
El comando qr descompone A = QR con Q ortogonal y R triangular. Por tanto los valores propios
de Q
AQ coinciden con los de A. La Seccion 9.5.1 esta dedicada al calculo de esta descomposicion.
6
Recuerda que invertir una matriz para multiplicarla posteriormente por un vector es mucho mas
costoso que resolver el sistema correspondiente.
176
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
forma
R
pq
() =
_
_
1
.
.
.
cos sin
1
.
.
.
1
sin cos
.
.
.
1
_
_
la p
la q
col. p col. q
(9.2)
Es facil ver que son ortogonales, es decir, R
pq
()
1
= R
pq
()
.
Mediante
A
1
:= R
pq
AR
pq
(p, q y adecuados) vamos a anular el mayor elemento extradiagonal de A. Esta operacion
solo afecta a las las y columnas p, q de A. Concretamente, si denotamos por a
(1)
ij
las
entradas de A
1
,
a
(1)
pq
= (a
qq
a
pp
) cos sen + a
pq
(cos
2
sen
2
) =
=
1
2
(a
qq
a
pp
) sen(2) + a
pq
cos(2).
Por tanto, el angulo debe tomarse de modo que
_
_
cos(2) = 0, si a
qq
= a
pp
,
tan(2) =
2a
pq
a
qq
a
pp
, en caso contrario.
Para calcular cos y sen evitando el uso de un arcotangente se recurre a algunas
manipulaciones trigonometricas que prueban que si
7
:=
a
qq
a
pp
2a
pq
, t :=
sign()
[[ +
2
+ 1
,
entonces
cos =
1
t
2
+ 1
, sen =
t
t
2
+ 1
.
Cuando a
qq
= a
pp
tomamos
cos =
1
2
, sen
m
=
sign(a
qq
)
2
.
7
sign (z) es el signo de z, 1 si z es negativo, 1 en caso contrario.
178
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
2
.
.
.
n
_
_
, cuando m .
Ademas, deniendo Q
m
:= R
p
1
q
1
(
1
)R
p
2
q
2
(
2
) . . . R
p
m
q
m
(
m
), donde R
p
k
,q
k
es la matriz
utilizada en el paso kesimo
Q
1
m
AQ
m
= A
m
D.
Por tanto, las columnas de Q
m
son las aproximaciones (ortonormales) de los vectores
propios correspondientes.
El siguiente teorema prueba la convergencia de este metodo. Para ello necesitamos la
llamada norma de Frobenius
8
|A|
F
:=
_
n
i,j=1
[a
i,j
[
2
_
1/2
Teorema 9.3 Sea A
m
la matriz en la iteracion m, D
m
su diagonal y B
m
:= A
m
D
m
.
Entonces
|A
m
|
F
= |A
m+1
|
F
, |B
m+1
|
2
F
= |B
m
|
2
2[a
(m)
p
m
q
m
[
2
El resultado dice en primer lugar que la norma de Frobenius de una matriz no cambia
cuando se multiplica a izquierda y derecha por las matrices R
pq
(), una de ellas traspuesta.
De hecho se preserva cuando se multiplica, a izquierda y derecha, por matrices ortogonales
arbitrarias. El segundo resultado dice algo mas: el peso de los elementos extradiagonales
disminuye en cada paso seg un el elemento cancelado. Esto asegura la convergencia del
proceso hasta obtener una matriz diagonal.
En la practica, el proceso se interrumpe cuando los elementos que estan fuera de la
diagonal son sucientemente peque nos. En concreto, se suele tomar el siguiente criterio
de parada
[a
(m)
p
m
q
m
[ < eps
_
n
i=1
[a
(m)
ii
[
2
_
1/2
.
Fjate que las matrices A
m
y A
m+1
solo dieren en las las y columnas p
m
y q
m
. A
efectos practicos no sera necesario formar las matrices de rotacion ya que basta conocer
los valores de cos
m
y de sen
m
para construir A
m+1
a partir de A
m
.
Ejercicio 9.8 Implementa el metodo de Jacobi.
8
En Matlab sera norm(a(:)) o norm(a,fro).
179
B
o
r
r
a
d
o
r
9.4 Metodo de Jacobi LECCI
ON IV
Solucion. La parte central del programa se puede implementar con las siguientes lneas
01 % JACOBI
02 %
03 % D=JACOBI(A) Aplica el metodo de Jacobi a A y devuelve
04 % en D los valores propios; A debe ser
05 % simetrica
06 %
07 % [D,Q]= JACOBI(A) Q es ortogonal con QA Q=D
08 %
09 % [D,Q,NITER]= JACOBI(A) NITER Numero de iteraciones calculadas
10 %
11 % D=JACOBI(A,NMAX) NMAX numero maximo de iteraciones
12 %
13 % D=JACOBI(A,NMAX) NMAX numero maximo de iteraciones
14 %
11 % D=JACOBI(A,NMAX,EPS) EPS es el criterio de parada
12
13 function [d,Q,m]= jacobi(a,varargin)
14
15 n=length(a);
16 if nargin>1 & ~isempty(varargin{1})
17 mmax=varargin{1};
18 else
19 mmax=n^2;
20 end
21
22 if nargin>2 & ~isempty(varargin{2})
23 eps=varargin{2};
24 else
25 eps=1e-5;
26 end
27
28 Q=eye(n);
29 for m=1:mmax
30 d=diag(a);
31 %Calculo del mayor elemento extradiagonal
32 [max1,p]=max(abs(a-diag(d)));
33 [max2,q]=max(max1);
34 p=p(q);
35 if max2<eps*norm(d)
36 return % convergencia
37 end
38 %calculo sen y cos
39 if abs(a(q,q)-a(p,p))<eps
40 c=1/sqrt(2);
41 s=-c*sign(a(p,q));
180
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
MATLAB Profile Report: Function Details
jacobi C: / Document s and Set t i ngs/ V ct or / Escr i t or i o/ Li br oMat l ab/ j acobi . m
Time: 14.75100000 s (100.0%)
Calls: 1
Self time: 14.75100000 s (100.0%)
Function: Time Calls Time/call
jacobi 14.75100000 1 14.75100000
Parent functions:
none
Child functions:
none
99% of the total time in this function was spent on the following lines:
33: f or m=1: mmax
0. 07643962 1%34: d=di ag( a) ;
35: %Cal cul o del mayor el ement o ext r adi agonal
13. 37100000 91%36: [ max1, p] =max( abs( a- di ag( d) ) ) ;
0. 26000000 2%37: [ max2, q] =max( max1) ;
38: p=p( q) ;
0. 07000000 0%39: i f max2<eps*nor m( d)
40: r et ur n %conver genci a
42: %cal cul o sen y cos
0. 09000000 1%43: i f abs( a( q, q) - a( p, p) ) <eps
44: c=1/ sqr t ( 2) ;
51: end
0. 10819591 1%52: r 0=[ c s ; - s c] ;
53: %La r ot aci on sol o af ect a a l as f i l as y col . p y q
0. 31000000 2%54: a( [ p q] , : ) =r 0' *a( [ p q] , : ) ;
0. 12000000 1%55: a( : , [ p q] ) =a( : , [ p q] ) *r 0;
0. 17000000 1%56: r ( : , [ p q] ) =r ( : , [ p q] ) *r 0; %guar damos r
0. 05000000 0%57: end
Figura 9.1: Profile aplicado al metodo de Jacobi.
182
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
= Q
1
) y R triangular superior. Esta descomposicion siempre existe
y puede ser calculada de varias formas distintas.
El metodo QR de Francis consiste en grosso modo construir una sucesion de matrices
A
m
(A
0
= A) procediendo como sigue
A
m
= Q
m
R
m
(factorizar) A
m+1
:= R
m+1
Q
m+1
(construir)
Para una matriz simetrica el algoritmo converge practicamente en todos los casos a una
matriz diagonal con los valores propios. Mas adelante detallaremos el algoritmo y como se
9
Tener activada esta opcion resta algo de velocidad a los programas puesto que parte de Matlab
esta ocupada en autorevisarse. Con profile off desconectas este control.
183
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
puede mejorar su implementacion. En cualquier caso queda claro que antes de entrar en
materia debemos hablar con algo de profundidad de la descomposicion QR de una matriz.
Ejercicio 9.10 Probar que todas las matrices A
m
son semejantes y por tanto comparten los
mismos valores propios.
9.5.1. Factorizacion QR
Quizas la forma mas sencilla de calcular la descomposicion es aquella ligada al algo-
ritmo de Gram-Schmidt. Este algoritmo, uno de los clasicos en
Algebra Lineal, se utiliza
para hallar una base ortogonal de un subespacio partir de una base (o sistema generador)
dada. Las operaciones, una vez reescritas adecuadamente se pueden expresar de la forma
A = QR
donde las columnas de A son los vectores originales, las colunas de Q son los vectores
ortonormales que generan el mismo subespacio que los vectores columna de A y R es una
matriz triangular superior que indica como se transforma la base original en la nueva base
ortonormal. La descomposicion tiene sentido para matrices rectangulares y en este caso
las dimensiones de A y Q coinciden (si A, es mn, tambien lo es Q y R es n n).
Este algoritmo es, sin embargo, muy inestable numericamente y rara vez se utiliza en
la practica
10
.
Existen caminos distintos que nos conducen a la descomposicion QR. Los dos metodos
mas utilizados se basan en transformar la matriz original en una triangular superior mul-
tiplicando a izquierda por matrices ortogonales, ya sean rotaciones como las que aparecen
en el algoritmo de Jacobi (matrices de Givens), o matrices (reexiones) de Householder.
Factorizacion QR con Matrices de Householder
Una matriz de Householder viene dada por
Q = I 2 uu
, con |u|
2
=1,
donde u es un vector columna n1 e I es la matriz identidad de tama no n. Observa que
efectivamente es una matriz, ya que uu
es n n.
Es muy sencillo comprobar que es simetrica (Q
= Q) y que Q
Q = I, y por tanto
Q
1
= Q.
La factorizacion QR mediante transformaciones de Householder se basa en la siguiente
propiedad
Proposicion 9.4 Dado un vector columna x, si tomamos = |x|
2
y denimos
u :=
x e
1
|x e
1
|
2
, donde e
1
= (1, 0, . . . , 0)
,
Q := I 2 uu
,
entonces
Qx = (, 0, . . . , 0)
.
10
Existe el algoritmo de Gram-Schmit modicado que dota de algo mas de estabilidad al metodo
original.
184
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
1
. . .
0
.
.
. A
2
0
_
_
(9.3)
2. Repetimos el proceso con la matriz A
2
que es (n 1) (n 1) para construir la
matriz de Householder Q
2
tal que
Q
2
A
2
=
_
2
. . .
0
.
.
. A
3
0
_
_
. (9.4)
Ahora basta considerar
Q
2
=
_
_
1 0 . . . 0
0
.
.
. Q
2
0
_
_
(9.5)
que cumple
Q
2
Q
1
A =
_
1
. . .
0
2
. . .
0 0
.
.
.
.
.
. A
3
0 0
_
_
3. En el kesimo paso se construyen las matrices Q
k
y Q
k
:
Q
k
A
k
=
_
k
. . .
0
.
.
. A
k+1
0
_
_
, Q
k
:=
_
I
k1
Q
k
_
,
donde I
k1
es la matriz identidad de tama no k 1.
Despues de n 1 pasos obtenemos la descomposicion
Q
n1
Q
1
A = R, con R triangular superior.
Deniendo Q := Q
1
Q
n1
, tenemos que Q
1
= Q
1
n1
Q
1
1
= Q
n1
Q
1
. Por tanto,
A = QR con Q ortogonal y R triangular superior.
Ejercicio 9.11 Implementa la descomposicion QR con matrices de Householder
185
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
Solucion. He aqu una implementacion del metodo
01 % [Q,R]=QRHOUSEHOLDER(A) Calcula Q ortogonal y R triangular
02 % superior tales que A=QR.
03 %
04 % El algoritmo esta basado en las matrices de Householder
05 %
06 function [q,r]=QRhouseholder(a)
07
08 n=length(a)
09 q=eye(n);
10 r=a;
11 for k=1:n
12 u=r(k:n,k); %primera columna
13 alpha=-sign(u(1))*norm(u);
14 u=u-alpha*[1;zeros(length(u)-1,1)];
15 u=u/norm(u);
16 qhouse=eye(length(u))-2*u*u;
17 r(k:n,k:n)=qhouse*r(k:n,k:n);
18 q(:,k:n)=r(:,k:n)*qhouse;
19 end
20 return
Observa la manipulacion simple de los bloques de a, q y r.
)B = B 2u(u
B). (9.6)
Es decir, en ning un momento se requiere construir la matriz Q y unicamente necesitamos
realizar dos productos matriz-vector. El n umero de operaciones del producto QB es ahora
nm mientras que en la implementacion inicial el costo era n
2
m. De forma analoga se puede
calcular el producto BQ con B mn tambien en mn operaciones.
Ejercicio 9.13 Implementa la factorizacion QR utilizando las indicaciones previas. Compara
con alg un ejemplo la reduccion del tiempo de calculo.
Factorizacion QR con matrices de Givens
La factorizacion QR de una matriz se puede obtener tambien utilizando matrices de
rotacion, es decir, matrices de la forma (9.2). Esta alternativa es especialmente interesante
si la matriz tiene sus elementos no nulos concentrados entorno a la diagonal. Para matrices
186
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
. . .
0 . . .
.
.
.
.
.
.
.
.
.
0 . . .
_
_
.
Obviamente Q
1
es una matriz ortogonal por ser producto de matrices ortogonales. En el
siguiente paso haremos ceros en la segunda columna por debajo de la diagonal y as suce-
sivamente. Fjate que los elementos nulos de las columnas anteriores se preservan en los
sucesivos pasos.
Ejercicio 9.14 Implementa la factorizacion QR utilizando matrices de Givens.
Solucion. Podemos denir la siguiente funcion:
01 % QRGIVENS
02 %
03 % [Q,R]=QRGIVENS(A) Calcula Q ortogonal y R triangular
04 % superior cumpliendo A=QR
05 %
06 % Utiliza el algoritmo basado en matrices de Givens
07 %
08
09
10 function [q,r]=QRGivens(a)
11 n=length(a);
12 q=eye(n);
13
14
15 for j=1:n-1
16 for i=j+1:n
17 if a(i,j)~=0
18 aux=sqrt(a(j,j)^2+a(i,j)^2);
19 c=a(j,j)/aux;
187
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
20 s=-a(i,j)/aux;
21 Rot=[c s; -s c];
22 %solo cambian las filas i y j
23 a([i j],:)=Rot*a([i j],:);
24 q([i j],:)=Rot*q([i j],:);
25 end
26 end
27 end
28 q=q;
29 r=a;
30 return
ON IV Cap
Ax = A
b.
Este sistema de ecuaciones recibe el nombre de ecuaciones normales. Se prueba enton-
ces que, bajo la hipotesis de que las columnas de A sean linealmente independientes, la
solucion anterior cumple
|b Ax|
2
< |b Az|
2
, z R
n
.
Esto es, minimiza el residuo. En la practica no se construyen las ecuaciones normales,
sino que utilizando la descomposicion QR, el problema se reduce a
R
1
Q
1
Q
1
. .
I
R
1
x = R
1
Q
1
b, R
1
R
1
x = R
1
Q
1
b, R
1
x = Q
1
b.
Recuerda que R
1
es triangular y que por tanto, la resolucion del ultimo sistema es trivial.
En particular este metodo puede aplicarse a un sistema compatible determinado y
resolver as sistemas de ecuaciones lineales. El metodo resultante es mas caro que el
metodo de Gauss, ya que realiza el doble n umero de operaciones, pero tiene una ventaja
muy importante: es estable numericamente y no hace falta realizar ninguna estrategia de
pivotaje
12
.
11
Ya hemos indicado en los Ejercicios 9.12 y 9.15 que estos metodos pueden aplicarse a matrices
rectangulares generales.
12
La razon de esta estabilidad se puede vislumbrar intuitivamente: como Q es ortogonal, todas las
entradas estan entre 0 y 1.
189
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
Otra aplicacion de la factorizacion QR es el calculo del rango de una matriz. Concre-
tamente, el rango de A coincide con el n umero de las de R distintas de cero. Asumiendo
que estamos trabajando con un rango numerico, examinaremos cuantas las son clara-
mente distintas de cero. Esto merece un comentario: casi cualquier perturbacion de una
matriz que no tenga rango maximo da una matriz que si lo tiene. Por esto, numerica-
mente, las matrices tienen (casi) siempre rango maximo. Sin embargo, el hecho de estar
muy cerca de una matriz que no tenga rango maximo tiene consecuencia perniciosas en
muchas aplicaciones numericas.
Ejercicio 9.17 Implementa la resolucion de sistemas lineales por mnimos cuadrados.
Ejercicio 9.18 Introduce la siguiente matriz en Matlab
A =
_
11 13
22 26
_
Calcula el determinante en Matlab y deduce cual es su rango. Calcula la descomposicion QR.
Que rango le asignaras a A?.
9.5.2. Metodo QR de Francis
Retomamos el metodo QR de Francis para matrices simetricas. El algoritmo es sim-
plemente el siguiente:
Metodo QR de Francis
A = A
1
matriz inicial
for k=1:mmax
Descomponer A
k
= Q
k
R
k
Calcular A
k+1
:= R
k
Q
k
D
k+1
=diag(A
k+1
)
if (
n1
j=1
n
i=j+1
[a
(k+1)
ij
[
2
< eps
n
i=1
[a
(k+1)
ii
[
2
)
return
end
end
El algoritmo naliza cuando el tama no de los elementos por debajo de la diagonal
principal es peque no respecto de los elementos diagonales, es decir, cuando consideramos
que la matriz es practicamente triangular.
Para matrices simetricas, que es el caso que de momento nos ocupa, el metodo converge
salvo en situaciones algo extra nas a una matriz diagonal con los valores propios. Un hecho
sorprendente es que ademas los valores propios aparecen ordenados en la diagonal de
mayor a menor modulo.
190
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
D
1
. . . . . . . . . . . .
D
2
. . . . . . . .
.
.
.
.
.
.
D
m
_
_
, donde D
j
es 1 1 o 2 2.
Los valores propios de A son exactamente los valores propios de estos bloques 2 2.
De hecho cada par de valores propios complejos conjugados genera un bloque D
j
de
orden 2. En particular, si la matriz tiene unicamente valores propios reales, la matriz T
es triangular. Si trabajamos con aritmetica compleja entonces la matriz T es triangular
superior.
Este es el conocido Teorema de Schur.
Ejercicio 9.21 Adapta el metodo QR a matrices no simetricas. Observa que deberas cambiar
el criterio de parada.
Ejercicio 9.22 Aplica el metodo QR a distintas matrices (simetricas, no simetricas, con
todos los valores propios reales o con alguno complejo) para observar como es la matriz lmite
resultante en cada caso.
Nota. La descomposicion de Schur, tanto real como compleja, se puede calcular en
Matlab con schur.
9.5.3. Comentarios adicionales
Tecnicas de aceleracion
Una matriz es de Hessenberg si tiene la forma
H =
_
_
. . . . . .
.
.
.
0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
0 . . . 0
_
_
,
es decir, si todos los elementos por debajo de la subdiagonal principal son nulos.
Toda matriz se puede llevar a forma de Hessemberg mediante producto a izquierda y
derecha por matrices ortogonales. Si ademas la matriz original es simetrica, la matriz de
Hessenberg correspondiente es de hecho tridiagonal simetrica.
191
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
Trabajar sobre una matriz de Hessemberg tiene importantes ventajas. En primer lugar,
la factorizacion QR es mucho mas economica: si utilizamos matrices de Givens unicamente
debemos preocuparnos de cancelar los elementos situados en la subdiagonal inferior. Es
mas, si H es Hessemberg (respectivamente tridiagonal simetrica), y H = QR, entonces la
matriz RQ es de nuevo de Hessemberg (respectivamente tridiagonal simetrica). En el caso
de matrices tridiagonales hay claramente una reduccion en las necesidades de memoria
del metodo pues solo requerimos guardar tres diagonales de la matriz durante todo el
proceso.
El metodo QR no se programa en la practica tal como lo hemos presentado. Se recurre
a dos tipos de estrategias que aceleran enormemente la velocidad de convergencia. La
primera es la traslacion. Utilizando la notacion de la Seccion 9.5.2, se tratara de en
lugar de factorizar la matriz A
m
, descomponer
A
m
m
I = Q
m
R
m
,
para posteriormente denir
A
m+1
:=
m
I + R
m
Q
m
.
Es trivial comprobar que A
m
y A
m+1
son semejantes, por lo que tendran los mismos
valores propios. Una eleccion adecuada de
m
consigue acelerar la convergencia en zonas
determinadas de la matriz. Por ejemplo, si A simetrica se puede conseguir que en pocas
iteraciones
A
m
_
_
B
n1
0
0
n
_
_
.
En este caso,
n
es un valor propio, se guarda en memoria y se empieza a trabajar con B
n1
que es de orden n 1. Este tipo de tecnica se denomina deaccion. Existen algoritmos
que permiten seguir la pista a los vectores propios, relacionando los vectores propios de
A
m
con los de B
n1
.
Apendice: reduccion a la forma de Hessenberg
Disponemos ya de las herramientas necesarias para implementar la reduccion a forma
de Hessenberg de una matriz. Para ello, consideremos la siguiente particion de A
A =
_
_
b
c A
1
_
_
,
donde b y c son vectores columna de n 1 componentes y A
1
es (n 1) (n 1).
Tomemos H
1
una matriz de Householder n1 n1, que especicaremos mas adelante,
y construyamos
H :=
_
_
1 0
0 H
1
_
_
.
192
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
H
1
H
1
c H
1
A
1
H
1
_
_
.
Si H
1
se toma ahora de forma que H
1
c = e
1
, se consigue cancelar todos los elementos
de la primera columna situados por debajo de la subdiagonal inferior. Es mas, si A es
simetrica, b = c y por tanto en la primera la de HAH solo los dos primeros elementos
son no nulos.
A continuacion se procede a trabajar con la matriz H
1
A
1
H
1
de forma similar a como
se hizo en la Seccion 9.5.1.
Nota. En Matlab la funcion hess reduce una matriz a forma de Hessenberg. Puede
utilizarse de las siguientes maneras:
>>H=hess(A); %H es una matriz de Hessenberg semejante a A
>>[P,H] = hess(A); %Ademas P ortogonal tal que A = P*H*P
AQ = D,
13
Puede resultar extra no, pero en muchas aplicaciones practicas es mas facil hallar el producto de un
vector por la matriz que construirla explcitamente.
14
La descomposicion QR destroza la estructura sparse de una matriz.
193
B
o
r
r
a
d
o
r
9.7 Notas historicas LECCI
ON IV
donde D es una matriz diagonal con elementos no negativos. Las entradas de D son los
valores singulares, mientras que las columnas de P y Q contienen los vectores singulares
asociados. Esta descomposicion existe a un cuando A es rectangular. El comando que cal-
cula esta descomposicion en Matlab es svd. El algoritmo mas utilizado para este problema
es una variante del metodo QR conocido como Algoritmo de Golub-Kaham.
9.7. Notas historicas
15
El problema del calculo numerico de los valores propios de una matriz puede remon-
tarse a los trabajos de Carl Jacobi quien utilizo el metodo del mismo nombre en 1846.
No existe un origen claro del metodo de potencias, sino que parece haber surgido
de forma simultanea en diversos ambientes. El metodo de la potencia desplazada fue
introducido por Helmut Wielandt en 1944, quien sugirio tambien algunas tecnicas de
deaccion para, combinadas con el metodo de potencias, obtener varios valores propios
de la matriz.
En 1958, Heinz Rutishause propuso un precursor del metodo QR, el metodo LU. El
metodo descompona la matriz en la forma LU, para posteriormente construir UL. Se
trataba de aplicar de forma simultanea el metodo de potencias y para evitar que todas las
direcciones degeneran hacia la direccion dominante, se haca una descomposicion LU que
aseguraba la independencia de los vectores. Desgraciadamente, el metodo era inestable
numericamente salvo para algunos casos particulares. J. G. F. Francis y V. N. Kubla-
novskaya propusieron independientemente en 1961 reemplazar la descomposicion LU por
la QR dando origen al metodo que hemos visto. El trabajo de Francis era mas completo
y sugera ya de hecho la reduccion a forma de Hessenberg, la deacion y estrategias de
desplazamiento.
El calculo estable de la descomposicion QR tuvo que esperar a los a nos 1950, cuando
Wallace Givens y Alstom S. Householder propusieron sus metodos en 1954 y 1958 res-
pectivamente. Householder tambien en 1958 y Wilkinson en 1960 estudiaron los aspectos
numericos de la reduccion de una matriz a su forma de Hessenberg.
9.8. Google
16
Google
17
ha pasado a ser en su corta vida uno de los referentes mundiales de Internet.
Su sistema de b usqueda de paginas en la red ofrece en general unos resultados bastante
precisos. Una de las claves de su sistema es su metodo de evaluacion de las paginas,
denominado Pagerank
tm
. Este sistema eval ua las paginas web seg un el n umero de enlaces
que permiten llegar a ella.
15
Las fuentes de esta seccion se han obtenido principalmente del artculo Eigenvalue computation in
the 20th Century (Gene H. Golub y Henk A. van der Vorst, publicado en Journal of Computational and
Applied Mathematics 123 y Matrix Algorithms Volume II: Eigensystems, de G.W. Stewart.
16
Este captulo se ha extrado esencialmente del libro Numerical Computing de Cleve Moler, disponible
en http://www.mathworks.com/moler/
17
Por si alg un despistado todava no conoce su direccion electronica, vistese http://www.google.es,
http://www.google.com y muchos mas...
194
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
0 0 1 0 0 0
1 0 0 1 1 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 1
0 0 0 1 0 0
_
_
donde
g
ij
= 1, si llegamos a i desde j.
De forma natural G es sparse, puesto que con n paginas uno puede esperar que el n umero
de enlaces sea del orden de O(n) (esto es, proporcional al n umero de paginas) y no del
orden O(n
2
) que se correspondera con una matriz llena.
Sea
c
j
=
n
i=1
g
ij
(n umero de enlaces que salen de j).
195
B
o
r
r
a
d
o
r
9.8 Google LECCI
ON IV
Entonces la probabilidad de llegar a i si estamos en j es
p
g
ij
c
j
..
Siguiendo un enlace desde j
+
1 p
n
. .
Tecleando la direccion
Esta informacion se puede recoger en la matriz A de tama no n n cuyas componentes
vienen dadas por
a
ij
= p
g
ij
c
j
+
1 p
n
.
Esta matriz no es sparse, pero se puede escribir
p
G +
1 p
n
e
n
e
n
donde g
ij
= g
ij
/c
j
y e
n
es la matriz columna 1 n
e
n
=
_
1 1 1
.
De esta forma se puede almacenar la matriz A sin necesidad de requerir grandes cantidades
de memoria. Es mas, el producto por cualquier vector se puede calcular con
Ax = p
Gx +
1 p
n
e
n
e
n
x = p G x./c
..
Div. elem. a elem.
+
1 p
n
(e
n
x)
. .
Prod. escalar
e
n
.
Si denotamos por x
(0)
j
la probabilidad de estar en la pagina web j en un instante inicial,
entonces la probabilidad de llegar a la pagina web i en el paso primero es
n
j=1
a
ij
x
(0)
j
=: x
(1)
i
y por tanto
_
_
x
(1)
1
x
(1)
2
x
(1)
n
_
_
=
_
_
a
11
a
12
a
1n
a
21
a
22
a
2n
. . . . . . . . . . . . . . . . . .
a
n1
a
n2
a
nn
_
_
_
_
x
(0)
1
x
(0)
2
x
(0)
n
_
_
= Ax
0
.
De esta forma, denotando por
x
m
= (x
(m)
1
, x
(m)
2
, . . . , x
(m)
n
)
ON IV Cap
e
n
=
n
i=1
x
i
= 1.
Ademas, comenzando con x
0
cuyas componentes sean positivas y sumen uno,
x = lm
m
x
m
.
El resultado dice, en palabras llanas, que la probabilidad de que estemos en una pagina
web (esto es, x), despues de navegar una cantidad suciente de tiempo
18
es independiente
de como hemos empezado (es decir, de x
0
). Matematicamente hablando, dice que existe
un unico vector propio asociado al valor propio 1 de componentes positivas con |x|
1
= 1
y que ademas la sucesion x
m
converge a x independientemente del vector inicial escogido.
Observa que la sucesion de vectores x
m
son el resultado de aplicar el metodo de potencias
a la matriz A (sin normalizar respecto de | |
2
) y que por su forma particular
19
siempre
que se parta de un vector inicial cumpliendo los requisitos de la proposicion tendremos
que x
m
0 y |x
m
|
1
= 1.
Aqu vemos una forma completamente directa de programar este calculo
01 % PAGERANK(G)
02 %
03 % PAGERANK(G) Calcula el indice de impacto de una WEB dada
04 % por el grafo G
05 % El grafo tiene que ser conexo, es decir, no puede haber nodos
06 % separados del resto
07
08 function y=pagerank(g)
09
10 p=0.85; % probabilidad de llegar a traves de un enlace
11 eps=0.0001; % criterio de parada
12 nmax=1000; % numero maximo de iteraciones
13 n=length(g);
14 x=1/n*ones(n,1); % vector inicial
15 for j=1:nmax
16 y=producto(g,x,p);
17 if norm(x-y)<eps
18 disp(convergencia)
19 return
20 end
21 x=y;
22 x=x/sum(x);
23 end
18
Ciertamente, podramos tener que dedicar muchas horas...
19
La matriz A cumple que todas sus entradas son positivas y que la suma de los elementos de cada la
es 1. Una matriz de esta forma se denomina matriz de Markov. Teoricamente se sabe que el valor propio
dominante de estas matrices es siempre 1.
197
B
o
r
r
a
d
o
r
9.8 Google LECCI
ON IV
24 disp(Convergencia no alcanzada)
25 return
26
27 % Y= PRODUCTO(G,X,P)
28 % calcula el producto a*x
29 % notese que la matriz no llega a construirse
30
31 function y=producto(g,x,p)
32 c=sum(g);
33 c=c(:);
34 x=x(:);
35 n=length(x);
36 en=ones(n,1);
37 y=p*g*(x./c)+(1-p)/n*en*(en*x);
38 return
Nota. Aplicando la funcion pagerank al ejemplo de la Figura 9.2, obtenemos este re-
sultado
x = [0.1370 0.2806 0.2636 0.1370 0.1181 0.0638]
ON V
Figura 10.1: Ventana graca.
Te parece natural? Que observas con la escala? Que sucede si se ejecuta axis equal?.
Como dibujaras una circunferencia?.
Segundo nivel
El comando ademas acepta una serie de argumentos que, entre otras cosas, permiten
controlar el color, el tipo de marcas sobre los puntos (x(i), y(i)) y el formato de las
lneas que los unen. As, en su aspecto mas general,
plot(x,y,S)
dibuja y versus x, con S una cadena de caracteres que se construye con
1
b azul . punto - linea solida
g verde o circulo : punteado
r rojo x equis -. punto-linea
c cian + cruz -- linea-linea
m magenta * estrella
y amarillo s cuadrado
k negro d diamante
v triangulo (hacia abajo)
^ triangulo (arriba)
1
Traducido directamente de la ayuda de Matlab.
206
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Figura 10.2: Ventana graca.
Tercer nivel
Ya en un tercer nivel, se pueden acceder a detalles concretos del dibujo, como el tama no
y color de las marcas, la anchura de la lnea, etc. Las diferentes opciones llevan nombres
nemotecnicos que facilitan su memorizacion
3
. Destacamos entre las mas importantes
color: color de la lnea.
LineWidth: anchura de la lnea.
Marker: selecciona la marca que se coloca en los puntos evaluados
MarkerEdgeColor: color del borde de las marcas
MarkerFaceColor: color de la marca
MarkerSize: tama no de la marca
Para especicar un color, se puede utilizar uno de estos caracteres b, g, r, c, m, y, k o
bien un vector con tres componentes con valores entre 0 y 1 que especica un color seg un
3
nemotecnicos en ingles, of course.
208
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Figura 10.3: Edicion de un dibujo.
210
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
plot(x,y,-,color,[0.0,0.3,0.0],linewidth,2)
grid on % desplegamos la red
xlim([-0.5,6]), ylim([-0.25,0.5]) % rango de los graficos
xlabel(Eje OX,fontname, Comic Sans Ms, fontsize,12)
ylabel(Eje OY,fontname, Comic Sans Ms, fontsize,12)
title(Algunas graficas de funciones,...
fontsize,16,fontname,Times new roman)
legend(exp(-x/3).*cos(x), exp(-x).*cos(x),...
exp(-3x)*cos(x), exp(-9x).*cos(x));
0 1 2 3 4 5 6
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
Eje OX
E
j
e
O
Y
Algunas graficas de funciones
exp(-x/3).*cos(x/3)
exp(-x).*cos(x)
exp(-3x)*cos(3x)
exp(-9x).*cos(9x)
Figura 10.4: Una muestra de dibujos.
Nota. En el comando title hemos utilizado los atributos fontname y fontsize para
especicar la fuente y su tama no utilizada en el ttulo. Otros atributos son
fontweight: los valores posibles son light, normal, demi, bold. Especica el trazo
de los caracteres, desde no (light) hasta negrita (bold).
fontangle: sus valores son normal, italic u oblique. Fija la inclinacion de la fuente.
rotate: especica el angulo con el que se escribe el texto. El valor por defecto, 0, es
la escritura horizontal, mientras que con 90 se escribe el texto en vertical.
212
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
>> get(h,marker)
ans =
none
>> get(h,linewidth)
ans =
0.5000
Las ordenes anteriores nos informan de que el dibujo se ha trazado con lnea continua, sin
ninguna marca y con anchura de lnea 0.5.
Con set podemos cambiar cualquiera de estos atributos
>> set(h,linewidth,2)
>> set(h,color,[0.5 0.6 0.2])
>> set(h,linestyle,-.)
de forma que la graca pasa a tener una anchura de 2 puntos, cambia el color y el estilo
ahora es punto-raya.
Si se ejecuta get(h) podemos visualizar todos los atributos del objeto graco:
>> get(h)
Color = [0.5 0.6 0.2]
EraseMode = normal
LineStyle = -.
LineWidth = [2]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [ (1 by 315) double array]
YData = [ (1 by 315) double array]
ZData = []
BeingDeleted = off
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
214
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
0 0.25 0.5 1 2 4
-1
0
1
2
3
4
5
6
x log(x)
Figura 10.5: Modicacion del entorno del dibujo.
Un ejemplo de caractersticas mas avanzadas
Es posible asignar a un objeto graco funciones que se ejecuten al realizar alguna
accion, como cuando se crean ( util especialmente si se redibuja constantemente) o cuando
se seleccione con el raton.
Por ejemplo con
t=linspace(-6*pi,6*pi,200);
h=plot(t,sin(t)./t);
orden=v=get(h,color); set(h,color,v([3 1 2]));
set(h,ButtonDownFcn,orden)
asignamos al dibujo la siguiente propiedad: cuando se pulse encima de el con el raton, se
ejecutara la instruccion dada en orden:
>> v=get(h,color); set(h,color,v([3 1 2]));
La variable orden es simplemente una cadena de caracteres con esta instruccion. Observa
como se repite precisamente para insertar este caracter y evitar as la confusion con el
smbolo n de cadena de caracteres.
En ultima medida, estas caractersticas enlazan con las interfaces gracas de Matlab
(gui), donde los objetos gracos pueden ser men us desplegables, campos de textos, items,...
Matlab dispone de una gua para el desarrollo de interfaces gracos con su tutorial corres-
pondiente. Aqu no entraremos en la descripcion y uso de estas interfaces, pero animamos
al lector a consultar la correspondiente ayuda mediante helpwin guide. Una vez den-
tro de la ayuda, aconsejamos seleccionar Go to online doc for guide y all acceder a
Creating GUIs.
216
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
subplot(325)
plot(x,sin(4*x),linewidth,2);
title(sin(4x),fontsize,14)
axis tight
subplot(326)
plot(x,cos(4*x),linewidth,2);
title(cos(4x),fontsize,14)
axis tight
crean la Figura 10.7.
10.1.5. Otras salidas gracas
Se nalaremos a continuacion otros comandos relacionados con dibujos y gracas bidi-
mensionales de manejo similar a plot
plotyy: permite mostrar dos dibujos en la misma graca con dos ejes
OY a la izquierda y a la derecha.
polar: curvas en polares.
semilogx, semilogy: similar a plot pero utilizando, respectivamente, una escala lo-
gartmica en el eje OX y en el eje OY.
loglog: escala logartmica en ambos ejes.
stem: dibuja puntos uniendolos con una linea vertical al eje OX.
stairs: traza una graca en forma de escalera.
bar, barh, bar3: despliega gracas en forma de barras. Muy apropiada para re-
presentar datos y estadsticas (estilo excel).
area: muestra los datos en una graca de forma acumulada. El color
utilizado se controla mediante el comando colormap, cuyo fun-
cionamiento veremos mas adelante.
line: une puntos mediante lneas. Es una instruccion de bajo nivel
cuyo funcionamiento es similar a plot. De hecho, plot se cons-
truye a partir de line.
fill: dibuja polgonos cerrados y colorea su interior.
patch: una instruccion tambien de bajo nivel, construye polgonos, o
caras en tres dimensiones y asigna un color a la cara denida.
Comandos faciles de usar
Matlab tiene implementada una serie de comandos, asociados a la toolbox de calculo
simbolico que vimos en la leccion anterior, que permiten dibujar de forma sencilla gracas
de funciones. No se tiene un control tan completo como con plot pero se compensa con
su facil uso. En el apartado que nos ocupa (gracas bidimensionales) son resaltables
218
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
clf
t=linspace(0,8*pi,200);
plot3(t.*cos(t),t.*sin(t),t,r-,linewidth,2)
grid on % dibujamos la malla
title(Una curva en espiral...,fontsize,18,fontname,...
Comic Sans MS,color,[0.675 0.000 0.000])
zlim([0,20])
xlabel(eje OX,fontsize,14)
ylabel(eje OY,fontsize,14)
zlabel(eje OZ,fontsize,14)
cuyo resultado se muestra en la Figura 10.8. Los comandos relacionados con los aspectos
-30
-20
-10
0
10
20
30
-30
-20
-10
0
10
20
30
0
5
10
15
20
25
30
eje OX
Una curva en espiral...
eje OY
e
j
e
O
Z
Figura 10.8: Un dibujo en 3D con plot3.
accesorios del dibujo (axes, title, xlabel, grid...) funcionan exactamente igual. Ademas
aparecen algunos nuevos cuya utilidad y manejo no debera causar sorpresa:
zlabel zlim
Para poder manipular, rotar en 3D, el objeto graco basta presionar en la barra de
herramientas en el boton se nalado en la Figura 10.9 y mover el raton sobre el objeto con
el boton pulsado
220
B
o
r
r
a
d
o
r
LECCI
ON V Cap
_
x
1
. . . x
n
.
.
.
.
.
.
x
1
. . . x
n
_
_
Y =
_
_
y
1
. . . y
1
.
.
.
.
.
.
y
m
. . . y
m
_
_
.
Es decir, las m las de X son copias del vector x y las n columnas de Y son copias del
vector y. La malla esta formada por los puntos (X(i,j),Y(i,j)). Por ejemplo,
>> x=[0 0.33 0.67 1]; y=[-1 0 1];
>> [X,Y]=meshgrid(x,y)
X =
0 0.3300 0.6700 1.0000
0 0.3300 0.6700 1.0000
0 0.3300 0.6700 1.0000
221
B
o
r
r
a
d
o
r
10.2 Gracas en 3D LECCI
ON V
Y =
-1 -1 -1 -1
0 0 0 0
1 1 1 1
Ahora para representar la supercie z = f(x, y) utilizamos la orden surf(X,Y,Z)
donde
Z = f(X, Y) =
_
_
f(x
1
, y
1
) . . . f(x
n
, y
1
)
.
.
.
.
.
.
f(x
1
, y
m
) . . . f(x
n
, y
m
)
_
_
.
El dibujo de la Figura 10.10 se ha construido con el siguiente conjunto de instrucciones
>>x=linspace(-2,2,40); y=linspace(-1,1,20);
>>[X,Y]=meshgrid(x,y); Z=X.^2-Y.^2;
>>surf(X,Y,Z)
Figura 10.10: Ejemplo de una supercie creada con surf.
Se puede dibujar la supercie y asignar un color seg un los valores de un cuarto vector
(matriz mas bien). Desde una interpretacion matematica, se tratara de dibujar los valores
de una funcion sobre una supercie:
>> x=linspace(-3,3,60); y=linspace(-3,3,60);
>> [X,Y]=meshgrid(x,y); Z=X.^2-Y.^2; T=cos(sqrt(X.^2+Y.^2+Z.^2));
>> surf(X,Y,Z,T), colorbar
222
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Figura 10.12: Utilizacion de nan en un dibujo.
colorbar: despliega una barra de colores que informa sobre la correspondencia
entre el valor numerico y el color utilizado. Por defecto se despliega
verticalmente a la derecha del dibujo, aunque puede mostrarse horizon-
talmente si as se desea.
colormap: especica que colores se van a utilizar en el dibujo (mapa de colores).
Existe un conjunto de formatos predenidos que listamos a continuacion
autumn bone colorcube cool copper flag
gray hot hsv jet lines pink
prism spring summer white winter default
Para cambiar a un formato basta ejecutar
>> colormap(bone)
Se pueden tambien denir formatos personalizados, bien mediante la
lnea de comandos o desde la propia ventana graca.
daspect: controla la relacion entre los ejes del dibujo. Baste decir que
daspect([1 1 1])
ja que las proporciones de los ejes OX, OY y OZ sean iguales. Es decir,
>> sphere(40); % dibuja una esfera
>> daspect([1 1 1]) % relaciones 1:1:1 en los ejes
muestra la esfera como tal y no como un elipsoide.
224
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
f=inline(x^2-y^2); f=vectorize(f);
x0=linspace(-2,2,6);
y0=linspace(-2,2,4);
[X0,Y0]=meshgrid(x0,y0);
x1=linspace(-2,2,40);
y1=linspace(-2,2,40);
[X1,Y1]=meshgrid(x1,y1);
hold on % solapamos dos dibujos
surf(X0,Y0,f(X0,Y0),facecolor,none,edgecolor,k,...
marker,o, markersize,6,MarkerFaceColor,k, linewidth,2);
surf(X1,Y1,f(X1,Y1),facecolor,interp, facealpha,0.5,...
edgecolor,none);
colorbar
colormap(spring)
Figura 10.13: Algunas opciones con surf.
Ejercicio 10.5 Observa las diferencias entre estas dos salidas de la misma supercie
>> x=linspace(-2,2,20); y=linspace(-1,1,20);
>> [X,Y]=meshgrid(x,y);
>> figure(1)
>> surf(X,Y,X.^3-Y.^2.*Y,linestyle,none)
>> figure(2)
>> surf(X,Y,X.^3-Y.^2.*Y,linestyle,none,facecolor,interp)
226
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Mallados especiales
Con sphere podemos obtener el mallado de una esfera. Puede utilizarse para dibujar
bien una esfera o incluso funciones denidas sobre una supercie esferica. Por ejemplo,
mediante el siguiente chero script hemos obtenido las representaciones gracas de la
Figura 10.14.
[X,Y,Z]=sphere(60);
subplot(121)
surf(X,Y,Z,facecolor,[0.4 0.9 0.6])
daspect([1 1 1]) % aspecto [1 1 1]
title(La esfera,fontsize,14)
subplot(122);
surf(X,Y,Z,16*X.^2.*Y.^3.*Z.^4)
title(16 X^2 Y^3 Z^4 sobre la esfera,fontsize,14)
colormap(hot)
colorbar(hor) % barra de colores horizontal
daspect([1 1 1]) % aspecto [1 1 1]
Figura 10.14: Esferas en 3D.
Comandos similares son ellipsoid (elipsoides) y cylinder (cilindros). Son algo mas
exibles de lo que pueda parecer. As, y aunque parezca paradojico,
228
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
>> x1=linspace(-2,2,60); y1=linspace(-2,2,60);
>> [X1,Y1]=meshgrid(x1,y1);
>> f=vectorize(inline(cos(x^2-y)));
>> subplot(211) % dos dibujos
>> [c,h]=contour(X1,Y1,f(X1,Y1)); colorbar;
>> clabel(c,h) % Inserta el texto sobre las curvas de nivel
>> subplot(212)
>> [c,h]=contourf(X1,Y1,f(X1,Y1),5); colorbar % 5 curvas de nivel;
>> clabel(c,h,fontsize,12); % cambiamos tamano de la letra
El resultado es el de la Figura 10.16.
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1
0
1
2
-
0
.
8
-
0
.8
-
0
.
8
-
0
.8
-
0
.
8
-
0
.
8
-
0
.
6
-
0
.6
-
0
.
6
-
0
.6
-
0
.
6
-
0
.
6
-
0
.
4
-0
.4
-
0
.4
-
0
.
4
-
0
.
4
-
0
.
4
-
0
.
2
-
0
.2
-0
.2
-
0
.
2
-
0
.
2
-0.2
-
0
.
2
0
0
0
0
0
0
0
0
.
2
0.2
0
.
2
0
.
2
0
.2
0
.
2
0
.
4
0.4
0
.
4
0
.
4
0
.4 0
.4
0
.
4
0
.
6
0.6
0
.
6
0
.6
0
.6
0
.
6
0
.
8
0.8
0
.
8
0
.8
0
.8
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1
0
1
2
-
0
.
5
9
9
9
9
-
0
.
5
9
9
9
9
-0.2
-
0
.
2
-0.2
-
0
.
2
0
.2
0
.
2
0
.
2
0
.
2
0
.
6
0
.
6
0
.
6
0
.6
0
.
6
-
0
.
2
-
0
.
2
0
.
2
0
.
2 -0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
Figura 10.16: Lneas de nivel
surfc y surfl
Ambas son variantes de surf. La primera despliega la supercie y dibuja en el plano
OXY (plano inferior) las curvas de nivel.
La segunda es como surf pero el color que asigna a cada punto viene determinado
por un punto de iluminacion exterior. El resultado es el de una supercie de un color
determinado iluminado desde un punto
mesh, meshc, meshz y waterfall
Todos ellos dibujan unicamente la malla (rejilla) del dibujo. La segunda ademas a nade
las lneas de nivel, de forma semejante a como proceda surfc. Finalmente, waterfall es
230
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
>>vx=-Y./(X.^2+Y.^2);
>>vy=X./(X.^2+Y.^2); % calculamos vectores
>>h=quiver(X,Y,vx,vy);
>>axis square
Observa que cerca del (0,0) los vectores se hacen muy grandes. Para evitar que esto
distorsione el dibujo hemos optado por no dibujar los vectores correspondientes a puntos
muy cercanos al origen. Con este n hemos utilizado una variable (en realidad una matriz)
logica ind que toma valor uno unicamente si el punto correspondiente (X,Y) esta cerca
del origen.
Una vez salvada esta dicultad, hemos procedido a dibujar el campo de velocidades
resultante.
El comando quiver devuelve en realidad dos punteros, uno a las lneas y otro a
la cabeza del vector. Sus valores opcionales son similares a los ya vistos en secciones
anteriores.
Ejercicio 10.7 Siguiendo con las instrucciones desplegadas arriba, observa que sucede si se
ejecuta
set(h(1),linewidth,1,color,r,linestyle,:)
set(h(2),color,k)
Podras eliminar la punta de los vectores?.
Ejercicio 10.8 Utilizando el comando quiver3, dibuja el campo de velocidades que a cada
punto le asigna el vector (velocidad) dado por
_
x
_
x
2
+ y
2
+ z
2
,
y
_
x
2
+ y
2
+ z
2
,
z
_
x
2
+ y
2
+ z
2
)
(Ayuda: el comando meshgrid es tambien el apropiado para construir mallas en 3D)
10.4. Dibujos sobre dominios mallados en triangulos
Los comandos que hemos estudiado a lo largo de la seccion precedente estan pensados
para dibujar supercies denidas esencialmente sobre una cuadrcula. Aunque en muchos
casos esto es suciente, en otras muchas ocasiones se trabaja con funciones denidas sobre
conjuntos, o dominios en la terminologa habitual, mucho mas generales.
Una forma muy simple de trabajar con estos dominios es dividirlos en triangulos y
construir la supercie solapando diferentes planos denidos sobre cada triangulo
9
. Los
resultados que se obtienen son bastante satisfactorios, puesto que los triangulos son mas
exibles que los cuadrilateros a la hora de adaptarse a los dominios.
Esta division en triangulos de un dominio se denomina triangulacion o mallado del
dominio. Se dice que un mallado se hace mas no si el tama no de los triangulos disminuye.
Una triangulacion es conforme si la interseccion de dos lados cualesquiera del mallado
es o bien vaca (los triangulos no se tocan), o un vertice o un lado entero. Es decir no
9
Se utiliza el conocido resultado de que tres puntos no alineados denen un unico plano. Es facil ver
tambien que la supercie as construida es continua
232
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
-0.5 0 0.5
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
1
2
3
4
5
6
7 8
9 10
11 12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Figura 10.19: Ejemplo de triangulacion. En el graco la numeracion de los triangulos se
rodea con un crculo.
5 10 19
6 12 20
14 7 15
2 11 15
17 13 20
18 15 20
3 9 16
18 13 19
16 13 17
8 16 17
10 14 19
14 15 18
19 13 21
14 18 19
12 17 20
13 18 20
13 16 21
5 19 21
coordenadas:
x y
234
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Esta es una forma ya estandar de denir y trabajar con una triangulacion que tambien
sigue Matlab
10
con los comandos trimesh y trisurf.
El primero despliega la malla triangular especicada por t, (la matriz conteniendo los
triangulos), x e y (que dan las coordenadas de los vertices),
trimesh(t,x,y)
Se puede especicar la coordenada z de los vertices (la altura),
trimesh(t,x,y,z)
con lo que se dibuja la malla 3D correspondiente.
El comando trisurf es similar, pero colorea las caras. Hablando con propiedad, estos
comandos al igual que mesh y surf, representan supercies. Las opciones para manipular
el aspecto nal de la supercie son iguales que las de surf, incluyendo las ya vistas
facecolor, facealpha, meshalpha, edgecolor,....
Nota. Un tema nada trivial es la construccion de un mallado sobre un dominio (poli-
gonal) dado. Existen multitud de algoritmos que tratan este problema. En principio se
plantea la construccion de una malla gruesa, con pocos triangulos y de area considera-
ble, con los triangulos lo mas regulares posibles (sin deformar, alargar, en demasa los
triangulos).
Posteriormente, se trata de renar la malla, es decir, dividir los triangulos en triangulos
mas peque nos hasta que se alcance una precision adecuada.
Esta idea se esconde detras de aplicaciones como la interpolacion (aproximacion de
una funcion) y especialmente el metodo de elementos nitos, probablemente del metodo
11
mas utilizado en la resolucion de problemas de contorno para ecuaciones en derivadas
parciales.
Si se desea informacion de como se puede inicializar un malla en Matlab, as como
sobre el algoritmo utilizado se puede consultar el comando initmesh (incluido el tema de
triangulaciones de Delaunay). Para el renamiento puedes consultar refinemesh. .
Existe otra posibilidad mas visual, y por tanto mas amigable para empezar a trabajar.
Teclea
>> pdetool
Se cargara un entorno graco para la resolucion de ecuaciones en derivadas parciales. No
entraremos en este tema por ser demasiado tecnico. En lugar de ello, nos centraremos en
la denicion de mallados. Una vez dibujado el dominio, y mallado, se puede exportar la
malla a la ventana de comandos en las variables t y p. La primera contiene en las tres
primeras las los triangulos que componen la triangulacion mientras que las coordenadas
de los vertices estan guardadas en las dos las de p.
10
La toolbox pdetool dedicada a la resolucion de ecuaciones en derivadas parciales sigue una variante
algo mas complicada que la expuesta arriba.
11
Propiamente hablando es una familia de metodos.
236
B
o
r
r
a
d
o
r
Captulo 11
Interpolacion. Curvas Bezier
11.1. Interpolacion polinomica
Un problema ya clasico es la construccion, o aproximacion de una funcion conocidos
unos pocos valores. Algunas referencias a este tipo de problemas se remontan al manejo de
tablas trigonometricas y posteriormente logartmicas y exponenciales donde unos pocos
valores estaban tabulados y para valores intermedios era necesario un proceso de interpo-
lacion. Se habla en este caso de un problema de interpolacion de Lagrange. Si ademas del
valor puntual, a nadimos informacion sobre las derivadas estamos ante una interpolacion
de Hermite.
En estos apuntes trataremos principalmente la interpolacion polinomica, esto es, la
construccion de polinomios que pasen por unos puntos predeterminados. Daremos tam-
bien unos breves esbozos sobre la interpolacion por polinomios trigonometricos y la inter-
polacion polinomica a trozos con las funciones spline.
11.1.1. Interpolacion polinomica de Lagrange
El problema que queremos resolver es el siguiente
Dados un conjunto de n + 1 puntos (x
0
, y
0
), (x
1
, y
1
), . . . (x
n
, y
n
), construir
un polinomio p
n
de grado n tal que
p
n
(x
j
) = y
j
, j = 0, . . . , n.
El polinomio p
n
recibe el nombre de polinomio de interpolacion de Lagrange. Ha-
bitualmente, y
j
son valores de una funcion f que solo se puede evaluar en un conjunto
nito de puntos porque o bien en el resto del intervalo es desconocida, o bien es cara
computacionalmente de evaluar.
Tenemos una serie de cuestiones pendientes:
Se puede construir siempre el polinomio de interpolacion p
n
?. Y relacionada con
esta cuestion, el polinomio de interpolacion es unico?.
Existen formas optimas para calcular este polinomio?.
237
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
7.994 7.996 7.998 8 8.002 8.004 8.006
-1
0
1
2
3
4
5
x 10
-9
z
6
-46*z
5
+884*z
4
-9088*z
3
+52736*z
2
-163840*z+212992
(z-8)
4
*(4+(z-8)*(2+(z-8))
Figura 11.1: Dos formas de escribir y evaluar un polinomio.
Como aproxima p
n
a esta funcion f?. Este punto es crucial ya que se trata del error
que podemos esperar de nuestra aproximacion.
Como cuestion asociada, pero no menos importante, nos deberamos plantear
Cual es la mejor forma de evaluar un polinomio?. Es decir, nos interesa el polino-
mio escrito en la manera tradicional o simplemente poder evaluarlo de forma facil,
rapida y estable numericamente?
Ejemplo En la Figura 11.1 hemos dibujado los polinomios (z8)
4
(4+(z8)(2+(z8)))
y z
6
46z
5
+884z
4
9088z
3
+52736z
2
163840z+212992 en un entorno de 8. Analticamente
son el mismo polinomio pero el resultado de evaluar una u otra expresion puede dar
un resultado muy diferente debido a los errores de redondeo. La primera expresion es
mucho mas apropiada desde el punto de vista computacional aunque nosotros estemos
mas acostumbrados a escribir los polinomios de la segunda manera.
El algoritmo mas estable para evaluar un polinomio es el metodo de Horner que esta ba-
sado a su vez en el metodo de Runi para dividir polinomios. Concretamente utiliza que el
valor de p(a) es el resto de dividir p(z) por za . El algoritmo es facilmente implementable
y tiene un costo reducido.
11.1.2. Existencia del polinomio de interpolacion
Probaremos la existencia del polinomio de interpolacion mediante un razonamiento
directo. Tomemos
P
n
p
n
(x) = a
0
+ a
1
x + a
2
x
2
+ . . . + a
n
x
n
,
238
B
o
r
r
a
d
o
r
LECCI
ON V Cap
_
1 x
0
x
2
0
x
n
0
1 x
1
x
2
1
x
n
1
1 x
2
x
2
2
x
n
2
. . . . . . . . . . . . . . . . . .
1 x
n
x
2
n
x
n
n
_
_
_
_
a
0
a
1
a
2
.
.
.
a
n
_
_
=
_
_
y
0
y
1
y
2
.
.
.
y
n
_
_
. (11.1)
Por tanto el problema se reduce a la resolucion de un sistema de ecuaciones lineales y
la existencia y unicidad del polinomio de interpolacion a que el sistema en cuestion sea
compatible determinado.
La matriz del sistema (11.1) es de tipo Vandermonde que nos ha surgido repetidas
veces en estos apuntes
1
. Dado que el sistema tiene el mismo n umero de ecuaciones que
de incognitas, se tiene que la existencia de solucion para cualquier conjunto de
datos es equivalente a la unicidad. Ademas, la unicidad de solucion es equivalente
a que la unica solucion posible para el termino independiente nulo sea el polinomio cero.
Pero esto es inmediato puesto que todo polinomio no nulo de grado n tiene a lo sumo n
races.
Otra forma de ver la existencia y unicidad es de tipo constructiva. Tomemos
L
j
(x) :=
(x x
0
) (x x
j1
)(x x
j+1
) (x x
n
)
(x
j
x
0
) (x
j
x
j1
)(x
j
x
j+1
) (x
j
x
n
)
=
i=j
x x
i
x
j
x
i
.
Es facil ver que L
j
P
n
y que ademas
L
j
(x
i
) :=
_
1, i = j,
0, i ,= j.
Por tanto,
p
n
(x) = y
0
L
0
(x) + y
1
L
1
(x) + . . . + y
n
L
n
(x)
satisface las condiciones (11.1). Una vez probada la existencia deducimos por los mismos
argumentos la unicidad del polinomio de interpolacion.
La formula anterior se conoce como formula de Lagrange del polinomio de in-
terpolacion y la base del espacio de polinomios P
n
formada por L
j
j
se denomina base
de Lagrange del problema de interpolacion.
Ejercicio 11.1 Programar una funcion que eval ue el polinomio de interpolacion seg un la
formula de Lagrange en un conjunto de puntos.
1
Cada columna es el resultado de elevar a una potencia el vector [1 x
0
x
1
x
n
]
239
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
Solucion. He aqu una posible implementacion
2
01 % LAGRANGEP
02 %
03 % Y=LAGRANGEP(X0,Y0,X) devuelve en Y el valor del pol. de interp.
04 % que pasa por los puntos (X0,Y0) evaluado
05 % en x mediante la formula de Lagrange
06 %
07 % X0 y Y0 son dos vectores de la misma longitud, X puede ser un
08 % vector.
09
10 function y=lagrangep(x0,y0,x)
11
12 x0=x0(:).; y0=y0(:).; x=x(:).; % todos vectores filas
13 n=length(x0);
14 if (length(y0)~=n)
15 disp(ERROR. Long de x0 debe ser igual a Long de y0)
16 return
17 end
18 y=x*0; % y es un vector nulo de igual dimension que x
19
20 for j=1:n
21 p=ones(size(x));
22 for i=[1:j-1 j+1:n]
23 p=p.*(x-x0(i))./(x0(j)-x0(i));
24 end
25 y=y+p*y0(j);
26 end
27
28 return
ON V Cap
0
+
1
(x x
0
) + . . . +
n
(x x
n1
)(x x
n2
) (x x
0
). (11.2)
Ademas el sistema lineal que hay que resolver para obtener los coecientes
j
es ahora
triangular superior, por lo que su resolucion es practicamente directa en O(n
2
) operacio-
241
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
nes. A un es mas, si p
n
(x) interpola a f en n+1 puntos, a nadir un punto mas (x
n+1
, y
n+1
)
es simplemente corregir el polinomio anterior en la forma siguiente
p
n+1
(x) = p
n
(x) +
n+1
(x x
0
) (x x
n
), (11.3)
donde
n+1
=
y
n+1
p
n
(x
n+1
)
(x
n+1
x
n
)(x
n+1
x
n1
) (x
n+1
x
0
)
. (11.4)
Es decir, el trabajo hecho para calcular el polinomio de interpolacion en n + 1 puntos se
puede utilizar si se desea a nadir un punto mas de interpolacion.
Estas identidades se pueden utilizar para calcular el polinomio de interpolacion utili-
zando polinomios intermedios que vayan interpolando en subconjuntos crecientes de datos.
Sin embargo, un analisis algo mas detallado nos va a descubrir una manera mas apropiada
de calcular los coecientes del polinomio de interpolacion. Siguiendo la notacion clasica,
consideraremos que los valores y
j
que deseamos interpolar provienen de una funcion f a
priori desconocida, es decir,
y
j
= f(x
j
), j = 0, . . . , n.
Escribiremos entonces el polinomio que interpola en x
k
, . . . , x
k+m
como sigue
f[x
k
] +f[x
k
, x
k+1
](x x
k
) +. . . +f[x
k
, x
k+1
, . . . , x
k+m
](x x
k
) (x x
k+m1
). (11.5)
La identidad (11.3) justica el uso de esta notacion es correcta. Esto es, el coeciente
de (x x
k
) (x x
k+r
) no depende de m. Obviamente, si k = 0 y m = n, entonces
recuperaremos el polinomio de interpolacion en el conjunto inicial de valores. A estas
alturas f[x
k
, x
k+1
, . . . , x
k+r
] son todava simples coecientes del polinomio de cuyo calculo
nos ocupamos a continuacion. Es inmediato comprobar que si
p
n
interpola en
_
(x
0
, f(x
0
)), (x
1
, f(x
1
)), . . . , (x
n
, f(x
n
))
_
,
q
n
interpola en
_
(x
1
, f(x
1
)), (x
2
, f(x
2
)), . . . , (x
n+1
, f(x
n+1
))
_
,
entonces
p
n+1
(x) = q
n
(x) +
x x
n+1
x
0
x
n+1
(p
n
(x) q
n
(x)), (11.6)
es el polinomio que interpola en los n + 1 puntos
_
(x
0
, f(x
0
)), (x
1
, f(x
1
)), . . . , (x
n+1
, f(x
n+1
))
_
.
Detengamonos un momento a examinar el coeciente director de cada polinomio. El
coeciente en x
n
de p
n
y q
n
y el de x
n+1
de p
n+1
son respectivamente
f[x
0
, . . . , x
n
], f[x
1
, . . . , x
n+1
] f[x
0
, . . . , x
n+1
].
Utilizando (11.6) deducimos que
f[x
0
, x
1
. . . , x
n+1
] =
f[x
0
, . . . , x
n
] f[x
1
, . . . , x
n+1
]
x
0
x
n+1
. (11.7)
242
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Orden 0 Orden 1 Orden 2 Orden 3
x
0 f(x
0
) = f[x
0
]
//
f[x
0
, x
1
]
//
f[x
0
, x
1
, x
2
]
//
f[x
0
, x
1
, x
2
, x
3
]
x
1 f(x
1
) = f[x
1
]
//
66
m
m
m
m
m
m
m
m
m
m
m
m
m
f[x
1
, x
2
]
66
m
m
m
m
m
m
m
m
m
m
m
m
m
//
f[x
1
, x
2
, x
3
]
66
l
l
l
l
l
l
l
l
l
l
l
l
l
x
2 f(x
2
) = f[x
2
]
//
66
m
m
m
m
m
m
m
m
m
m
m
m
m
f[x
2
, x
3
]
66
m
m
m
m
m
m
m
m
m
m
m
m
m
x
3 f(x
3
) = f[x
3
]
66
m
m
m
m
m
m
m
m
m
m
m
m
m
Figura 11.3: Estructura del calculo de las diferencias dividas.
Ejercicio 11.3 Implementa el calculo del polinomio de interpolacion mediante diferencias
divididas.
Solucion. Nuestra intencion es, si no se especican valores donde evaluar el polinomio,
que se devuelva el polinomio escrito en forma simbolica. Es decir, declararemos x como
variable simbolica y devolveremos el polinomio en esta variable. Podemos escoger hacerlo
en forma expandida o bien simplemente escrito en la forma anidada. Nosotros hemos
escogido hacerlo en la segunda forma.
Por otro lado y entrando ya en el tema de su implementacion, en el algoritmo anterior
todas las entradas de los vectores y matrices implicados se numeran de 0 a n. Hay que tener
en cuenta, como ya hemos hecho repetidas veces, que la numeracion en Matlab comienza
necesariamente en 1 y por tanto los vectores y bucles iran de 1 a n+1. Recordemos que
n+1 es la longitud del vector de datos. Aunque en teora renumerar el algoritmo es
algo sencillo, hay que hacerlo con cierto cuidado.
Dicho esto, una implementacion posible es la siguiente
01 % NEWTONP
02 %
03 % Y= NEWTONP(X0,Y0) devuelve el polinomio que interpola
04 % en (X0,Y0) escrito en forma de Newton
05 %
06 % Y= NEWTONP(X0,Y0,X) devuelve en Y el polinomio interpolante
07 % evaluado en X
08
09 function y=newtonp(x0,y0,varargin)
10
11 x0=x0(:).; y0=y0(:).; n=length(x0)-1;
12 if (length(y0)~=n+1)
13 disp(long de x0 debe ser igual long de y0)
244
B
o
r
r
a
d
o
r
LECCI
ON V Cap
Ejercicio 11.4 El bucle interno en las lneas 25-27 se puede vectorizar. Hazlo.
Un analisis mas detenido muestra que no es necesario denir toda una matriz D sino
que es posible realizar todo el proceso con un vector. Para ello observa que las diferencias
D(i, j) con solo se utilizan dos veces, para construir D(i 1, j + 1) y D(i, j + 1). Esto se
consigue modicando las lneas 03-08 del algoritmo como sigue
Modicacion
03 D = y
0
;
04 for j=1:n
05 for i=n:-1:j
06 D(i) =
D(i) D(i 1)
x
0
(i) x
0
(i j)
07 end
08 end
245
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
Observa que las diferencias se sobrescriben en el vector pero de una forma tal que un
valor no es borrado hasta que ya ha sido utilizado. De ah que el bucle en 05 vaya hacia
atras. Con esta modicacion
D(i) =f[x
0
, x
1
, . . . , x
i
].
Ejercicio 11.5 Retoca el programa newtonp seg un las indicaciones anteriores.
Ejercicio 11.6 El algoritmo de Neville para la evaluacion del polinomio de interpolacion se
basa en la identidad (11.6). Dado el punto x donde evaluar el polinomio de interpolacion
y partiendo de n + 1 polinomios de grado cero que interpolan los datos (x
0
, x
1
, . . . , x
n
)
procede a calcular el valor que toman en x los polinomios de grado 1 que interpolan en
dos puntos (x
0
, x
1
, x
1
, x
2
, . . . , x
n1
, x
n
), seguidamente los de grado 2 interpolantes
en tres puntos, (x
0
, x
1
, x
2
, x
1
, x
2
, x
3
, . . . , x
n2
, x
n1
, x
n
), y as sucesivamente hasta
llegar al polinomio nal de grado n.
En todos los casos es la identidad (11.6) la que permite calcular el valor del polinomio de
grado k + 1 en funcion de dos de grado k. La evaluacion se puede representar en forma de
estructura en arbol, muy similar a la que se obtiene para las diferencias divididas. Podras
dise nar y programar este algoritmo?.
Nota. Observa que el metodo funciona a un cuando los puntos x
0
, . . . , x
n
no esten
ordenados, aunque para una evaluacion del polinomio mas estable es mejor que as sea.
Ademas la denicion de las diferencias divididas no depende del orden de los puntos
f[x
0
, . . . , x
i
, . . . , x
j
, . . . x
n
] = f[x
0
, . . . , x
j
, . . . , x
i
, x
n
].
De forma alternativa se puede escribir el polinomio de interpolacion mediante
f[x
n
] +f[x
n
, x
n1
](x x
n
) +. . . +f[x
n
, x
n1
, . . . , x
0
](x x
1
)(x x
2
) (x x
n
). (11.9)
En este caso se habla de diferencias regresivas, mientras que en el caso que hemos
tratado reciben el nombre de diferencias progresivas.
Ejercicio 11.7 Modicar los algoritmos anteriores para trabajar con las diferencias regresi-
vas.
Interpolacion en Matlab
La interpolacion polinomica esta implementada en Matlab con polyfit. La sintaxis es
>> p=polyfit(x0,y0,n)
donde x0 e y0 son los puntos a interpolar y n es el grado del polinomio utilizado. Si n se
toma igual a length(x0) 1, devuelve el polinomio de interpolacion mientras que para
n menor calcula el polinomio que mejor aproxima a los puntos por mnimos cuadrados
4
.
Para evaluar el polinomio se recurre a polyval.
El algoritmo que utiliza Matlab es el directo, construyendo simplemente la matriz de
Vandermonde y resolviendo el sistema mediante una descomposicion QR que es mas esta-
ble numericamente. Sin embargo, con un n umero (muy) elevado de puntos, la inestabilidad
numerica subyacente se hace palpable.
4
Es decir, calcular el polinomio de grado n, que minimiza
i
(p(x
i
) y
i
)
2
.
246
B
o
r
r
a
d
o
r
LECCI
ON V Cap
n
(x)
(11.10)
donde
x
[a, b] depende de x. Vemos que hay varias contribuciones al error nal:
el factor 1/(n + 1)! que tiende rapidamente a 0,
un factor que depende del crecimiento de la derivada n + 1,
un termino que depende de la colocacion de los nodos de interpolacion y que puede
ser muy oscilante.
En vista de lo anterior sera facil concluir que hay convergencia del polinomio de
interpolacion a la funcion si esta es suave. Dicho de otra manera, funcion y polinomio se
volveran indistinguibles si tomasemos un n umero elevado de puntos.
Desafortunadamente
5
, la conclusion anterior es falsa. Uno de los primeros (con-
tra)ejemplos lo encontro Carl Runge
6
a nales del siglo XIX
7
. Consista en interpolar la
funcion
f(x) =
1
1 + 25x
2
en el intervalo [1, 1] en un conjunto uniforme de puntos. El resultado (desastroso) se
muestra en la Figura 11.4.
Una forma de reducir el error es controlar la funcion
n
(x) para que sea lo mas peque na
posible. As, el problema se plantea en los siguientes terminos
8
Que eleccion de los nodos x
0
, x
1
, . . . , x
n
hace que max
x
[
n
(x)[ sea
mnimo?.
5
Y contraintuitivamente. Como entender si no que dos funciones regulares que coincidan en un n umero
cada vez mayor de puntos no acaben siendo muy similares?
6
Matematico aleman de nales del siglo XIX. Tambien es conocido por ser codesarrollador del Metodo
Runge-Kutta para la resolucion de problemas de valor inicial.
7
Este fue el siglo de la fundamentacion de las Matematicas. Se probo que multitud de resultados que se
tenan como evidentes eran falsos y fue necesario reconstruir las Matematicas desde su base. Por ejemplo,
en el mismo siglo se mostro la existencia de funciones no continuas en ning un punto, de funciones continuas
pero no derivables en ning un punto, as como de funciones con un n umero innito de maximos y mnimos
locales. Tambien se construyeron curvas que rellenaban el plano, curvas cerradas que englobando una area
nita tenan una longitud innita (fractales)... Algunas de estas construcciones, originarias esencialmente
en las Matematicas puras han encontrado en el siglo XX aplicaciones a problemas de ndole esencialmente
practico.
8
Un problema min-max: minimizar un maximo.
247
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
-4
-3
-2
-1
0
1
2
3
4
Error
1./(1+25.*x.
2
)
polinomio de grado 5
polinomio de grado 10
polinomio de grado 15
polinomio de grado 20
polinomio de grado 5
polinomio de grado 10
polinomio de grado 15
polinomio de grado 20
Figura 11.4: Ejemplo de Runge. Polinomio de interpolacion y error cometido.
Este es un problema clasico que fue resuelto por Pafnuty Lvovich Chebyshev
9
en
terminos de una familia de polinomios conocidos como polinomios de Chebyshev de primer
tipo.
Para un intervalo arbitrario [a, b], la disposicion de los n + 1 puntos de interpolacion
que minimizan el max
x[a,b]
[w
n
(x)[ es la dada por los puntos
x
k
:=
a + b
2
+
b a
2
cos
_
2n + 2
+
k
n + 1
_
, k = 0, . . . , n. (11.11)
Es facil comprobar que la distribucion de puntos no es en medida alguna uniforme sino
que tiende a concentrar puntos en los extremos.
La eleccion de estos puntos para la interpolacion no asegura la convergencia del
polinomio pero s permite controlar mejor uno de los terminos que mas rapido pueden
crecer con n, con lo que en la practica se traduce en mejores resultados
10
. De hecho con
esta elecci on,
max
x[a,b]
[
n
(x)[ =
1
2
n
9
Matematico ruso del siglo XIX. Estos polinomios surgieron en sus estudios en aproximacion de fun-
ciones por polinomios. Chebyshev hizo tambien importantes contribuciones en Teora de la Probabilidad.
10
Dicho de otra manera, es mas difcil dar con un ejemplo para el que esta disposicion de nodos de un
polinomio interpolante que no converja a la funcion original.
248
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
(Ayuda: El Teorema de Rolle establece que si g es derivable en [a, b] con g(a) = g(b) entonces
existe c (a, b) tal que
g
(c) = 0.
Aplicando este resultado, concluimos que existe
j
(x
j
, x
j+1
) (j = 0, . . . , n 1) tal que
f
(
j
) p
(
j
) = 0.
Se puede aplicar el mismo resultado para probar que existen n 2 puntos tales que f
(
j
) =
p
(
j
) y as sucesivamente.)
11.2. Extensiones adicionales
11.2.1. Interpolacion de Hermite
La interpolacion de Hermite incorpora las derivadas como datos adicionales. Concre-
tamente, partimos de este conjunto de datos
_
_
(x
0
, f(x
0
)), . . . , (x
0
, f
(m
0
)
(x
0
))
(x
1
, f(x
1
)), . . . , (x
1
, f
(m
1
)
(x
1
))
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(x
n
, f(x
n
)), . . . , (x
n
, f
(m
n
)
(x
n
))
Observa que estamos asumiendo que no hay huecos en los datos. Esto, si por ejemplo la
derivada de orden 2 es dato, tambien lo es el valor de la funcion y su primera derivada.
El n umero total de datos es
N := (m
0
+ 1) + (m
1
+ 1) + + (m
n
+ 1),
por lo que el polinomio debera tener grado N 1.
El analisis de este problema no tiene mayor dicultad que el ya realizado para la in-
terpolacion polinomica de Lagrange. La clave esta en la fuerte relacion entre diferencias
divididas y derivada, mostrada en el Ejercicio 11.10. As, se hace la siguiente interpreta-
cion:
f[ x
k
, . . . , x
k
. .
m + 1 veces
] := f
(m)
(x
k
).
La idea es ordenar los nodos y tomarlos repetidos seg un el n umero de datos que conside-
ramos en cada punto de forma que tomaremos los N nodos
x
0
, x
0
, . . . , x
0
. .
m
0
+1
, x
1
, x
1
, . . . , x
1
. .
m
1
+1
, . . . , x
n
, x
n
, . . . , x
n
. .
m
n
+1
.
Las diferencias divididas se denen de nuevo de forma recursiva
f[x
i
, x
i+1
, . . . , x
i+m
] :=
_
_
f
(m)
(x
i
)
m!
, si x
i
= x
i+m
,
f[x
i
, x
1
, . . . , x
i+m1
] f[x
i+1
, x
1
, . . . , x
i+m
]
x
i
x
m
, en otro caso,
250
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
devuelve de hecho el polinomio de Taylor de orden 5 de f(x) = exp(x) en el cero. La
orden
>> simple(hermitep(x0,y0))
hace mas evidente esta identidad.
11.2.2. Interpolacion de funciones periodicas
Si una funcion es periodica es natural reemplazar en el problema de interpolacion los
polinomios por funciones periodicas sencillas con el mismo periodo. Por simplicar, vamos
a suponer que estamos considerando unicamente funciones 2periodicas, aunque las ideas
que a continuacion expondremos se extienden facilmente a funciones con cualquier periodo.
Concretamente, si se trata de funciones 2periodicas podemos utilizar
sen(nx), cos(nx), n N 0
para interpolarlas, o bien,
exp(inx), n Z.
Ambas son equivalentes, como ya vimos en la Leccion 3 con la FFT, pero la utilizacion
de exponenciales complejas facilita tanto el analisis como la manipulacion as como la
extension de la interpolacion a funciones complejas
Supongamos que tomamos un n umero impar 2n + 1 de puntos de interpolacion equi-
distantes:
x
k
=
2k
2n + 1
, k = 0, . . . , 2n.
El problema queda as denido: calcular
p
2n+1
(x) :=
n
j=n
j
exp(ijx)
tal que
y
k
= p
2n+1
(x
k
) =
n
j=n
j
exp
_
2ijk
2n + 1
_
.
La resolucion de este problema se puede llevar a cabo con la transformada de Fourier
Discreta, y por tanto es aplicable la FFT.
Ejercicio 11.12 Comprueba que efectivamente se reduce todo a una transforma de Fourier
discreta.
(Ayuda: Observa que
exp
_
2ijk
2n + 1
_
= exp
_
2i(2n + 1 j)k
2n + 1
_
.
Por tanto el problema es equivalente a encontrar
j
tales que
y
k
= p
2n+1
(x
k
) =
n
j=0
j
exp
_
2ijk
2n + 1
_
+
2n
j=n+1
2n+1j
exp
_
2ijk
2n + 1
_
.
_
Ejercicio 11.13 Que pasa si se toma un n umero par de puntos de interpolacion?
252
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
segmentos obteniendose una curva poligonal. Sin embargo para las constantes a trozos no
podemos exigir continuidad y para las poligonales no podemos exigir derivabilidad en los
puntos de contacto (tiene picos).
Los splines c ubicos son probablemente los mas utilizados. Partiendo de una subdivision
del intervalo a = x
0
< x
1
< < x
n
= b, se trata de construir una funcion s
n
tal que
s
n
(x)[
[x
i
,x
i+1
]
P
3
, i = 0, . . . , n 1,
es decir, sea un polinomio de grado tres en cada subintervalo, cumpliendo que
s
n
(x
i
) = y
i
, , i = 0, . . . , n,
esto es, que tome unos valores prejados en los puntos de interpolacion y de modo que
tanto la funcion s
n
como sus derivadas primera y segunda sean continuas
13
en todo el
intervalo [a, b]. Por tanto tenemos que exigir que
lm
xx
+
j
s
(j)
n
(x) = lm
xx
j
s
(j)
n
(x), j = 0, 1, 2.
La continuidad de la primera derivada preserva la existencia de recta tangente (no hay
picos) y por tanto la velocidad de recorrido de la curva, mientras que con la continuidad
de la derivada segunda garantizamos que curvatura de la curva sea tambien continua en
todo el dominio de denicion.
Dado que tenemos n subintervalos, y cuatro parametros sobre cada intervalo (s
n
es un
polinomio de grado 3 en cada intervalo), disponemos de 4n variables. Por contra, los datos
de interpolacion jan n + 1 restricciones y las condiciones de continuidad del spline y de
sus dos primeras derivadas en las interfaces de los subintervalos dan otras 3n condiciones.
En total tenemos
n + 1 + 3(n 1) = 4n 2
restricciones, por lo que el problema precisa jar dos condiciones adicionales para poder
hablar, siquiera plantear, la unicidad del spline.
Estas son algunas de las elecciones habituales
s
n
(x
0
) = s
n
(x
n
) = 0, spline natural.
Datos adicionales s
n
(x
0
) = y
1
, s
n
(x
n
) = y
n+1
, spline grapado.
Condiciones de periodicidad: si los datos son periodicos se puede imponer s
n
(x
0
) =
s
n
(x
n
), s
n
(x
0
) = s
n
(x
n
), spline periodico.
No nos detendremos a detallar como se prueba la existencia y unicidad de tales splines,
ni la forma de calcularlos. Baste decir que se recurre a tecnicas mas ecientes, y por tanto
complejas, que la forma directa que se deduce de su denicion.
Entre las buenas propiedades de los splines destacamos que convergen a la funcion si
esta es continua. A un es mas, si la funcion f que se interpola es regular (de hecho basta
con que su derivada cuarta sea continua)
max
x
[s
n
(x) f(x)[ C max
j
(x
j+1
x
j
)
4
con C una constante dependiente de f pero independiente de los puntos.
13
Si forzaramos la continuidad de la tercera derivada tendramos globalmente un polinomio de grado
tres.
254
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
0 0.2 0.4 0.6 0.8 1
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
Figura 11.7: Interpolacion con splines c ubicos naturales
Tenemos as dos problemas de interpolacion desacoplados, esto es, cada uno se resuelve in-
dependiente del otro. Queda como cuestion pendiente la eleccion de T en (11.12) y de los
puntos t
j
en (11.13). Una buena eleccion es tomar
h
j
:=
_
(x
j+1
x
j
)
2
+ (y
j+1
y
j
)
2
,
que coincide con la longitud del segmento que une (x
j
, y
j
) y (x
j+1
, y
j+1
), y hacer luego
t
0
= 0, t
k
:= h
0
+ h
1
+ . . . + h
k1
, T = t
n
.
Una vez ya calculados, la curva se dibuja evaluando
x(t) := (cx(t), cy(t)), t [0, T].
Implementa un programa que siga este prototipo
01 SPLINE2D
02
03 SPLINE2D(X,Y) Traza una curva en el plano que pasa por
04 (X(i),Y(i)) utilizando splines cubicos
05
Ejercicio 11.15 El comando ginput permite introducir los puntos a traves del raton. Lee
bien la ayuda y modica el programa anterior para que haga posible la lectura de los datos
con el raton en caso de que se llame a la funcion sin argumentos.
Entre las posibilidades que ofrece esta la de controlar que tecla o boton del raton se ha
utilizado.
256
B
o
r
r
a
d
o
r
LECCI
ON V Cap
n
j=0
son una base de P
n
. Dicho de otra forma, cualquier polinomio se puede
escribir como una combinacion de estos polinomios.
257
B
o
r
r
a
d
o
r
11.3 Curvas Bezier LECCI
ON V
n
j=0
B
n
j
(t) = 1, t R.
A partir de unos puntos
x
i
= (x
i
, y
i
), con i = 0, . . . , n,
se construye ahora la curva de Bezier utilizando estos polinomios:
S(t) :=
n
j=0
B
n
j
(t)x
j
=
_
n
j=0
B
n
j
(t)x
j
,
n
j=0
B
n
j
(t)y
j
_
, t [0, 1].
El parametro t se mueve de forma que para t = 0 estamos en el punto inicial y para t = 1,
en el nal. Notese que los puntos utilizados para dibujar la curva estan ordenados: hay
un punto inicial x
0
, uno nal x
n
y a x
j
le sigue x
j+1
...
Podemos comprobar (vease la Figura 11.8), que la curva se adapta a la forma que mar-
can los puntos. Sin embargo, unicamente podemos garantizar que esta curva pasara por
el primer y ultimo punto ya que S(0) = x
0
y S(1) = x
n
pero en general S(t) ,= x
j
para
j ,= 0, n.
0 0.2 0.4 0.6 0.8 1
0
0.2
0.4
0.6
0.8
1
0 0.2 0.4 0.6 0.8 1
0
0.2
0.4
0.6
0.8
1
0 0.2 0.4 0.6 0.8 1
0
0.2
0.4
0.6
0.8
1
0 0.2 0.4 0.6 0.8 1
0
0.2
0.4
0.6
0.8
1
Figura 11.8: Curvas Bezier para algunas conguraciones de puntos.
258
B
o
r
r
a
d
o
r
LECCI
ON V Cap
x
j+2
j
Figura 11.9: Ordenacion de nodos para la curva Bezier.
Una forma de determinar
15
este orden es medir el angulo entre los vectores
u =
x
j
y, v =
x
j+1
y
y quedarse con aquel para el que angulo
j
sea mayor (vease la Figura 11.9). Para ello,
basta utilizar que
[ cos(
j
)[ =
[u v[
|u||v|
.
15
Gracias a Jon Garca por sugerirnos esta solucion.
259
B
o
r
r
a
d
o
r
11.3 Curvas Bezier LECCI
ON V
Escogeremos entonces j para que [ cos(
j
)[ sea mnimo, y construiremos la curva Bezier
con puntos
x
1
, . . . , x
j
, y, x
j+1
, . . . , x
n
x
j
, x
j+1
.
Nota. Las curvas Bezier fueron introducidas por los ingenieros Pierre Bezier y Paul
de Casteljau, que trabajaban entonces en Renault y Citroen. Concretamente, buscaban
herramientas para el dise no de parachoques de forma que la curva que diera su forma
fuera controlada por una serie de puntos y que tuviera buenas propiedades geometricas.
Los algoritmos iniciales (todava se utilizan en la practica hoy en da) seguan ideas muy
geometricas
16
, y se tardo alg un tiempo en darle la forma que hemos mostrado, mas ma-
tematica. Como resultado de este estudio surgieron las curvas B-spline, que reemplazaban
a los polinomios de Bernstein por splines de grados adecuados. Las curvas B-spline son
mas exibles que las curvas Bezier y en su caso lmite incluyen a estas. Por lo tanto pueden
interpretarse como una generalizacion de las mismas.
Por otro lado existen formas mucho mas ecientes de evaluar y calcular este tipo de
curvas que permiten en ultima media su implementacion en una forma mas interactiva,
de forma que el usuario mueva los puntos (cambie el polgono de control) y que la curva
se redibuje constantemente.
16
La version original ni siquiera hablaba de polinomios.
260
B
o
r
r
a
d
o
r
Bibliografa
[1] Atkinson, K. (1993): Elementary Numerical Analysis. Wiley.
[2] Burden, R.L. y Faires, J.D. (1998): Analisis Numerico. International THOMSON.
[3] Chapman, S.J. (1997): Fortran 90/95 for Scientists and Engineers. McGraw-Hill.
[4] Chapman, S.J. (2002): Matlab Programming for Engineers. Books/Cole.
[5] Cooper, J. (2001): A Matlab Companion for Multivariate Calculus.Academic Press.
[6] Eriksson, K.E., Step, D. y Johnson, C. (2004): Applied Mathematics: body and soul.
Springer Verlag.
[7] Garca de Jalon, J. (2004): Aprenda Matlab 6.5 como si estuviera en primero.
Publicacion electronica, disponible en
http://mat21.etsii.upm.es/ayudainf/aprendainf/varios.htm
[8] Gander, W. y Hrebcek, J. (2004): Solving problems in Scientic Computing using
Maple and Matlab. SpringerVerlag.
[9] Golub, G.H. y van Loan, C.F. (1989): Matrix Computations. University Press.
[10] Golub, G.H. y van der Vorst, H. (2000): Eigenvalue computation in the 20th cen-
tury en J. Comput. Appl. Math. 123 (2000), 3565.
[11] Greenbaum, A. (1997): Iterative Methods for Linear Systems. SIAM.
[12] Hanmerlin, G. y Homann, K.H. (1991): Numerical Mathematics. SpringerVerlag.
[13] Hanselman, D. y Littleeld, B.R. (2000): Mastering Matlab 6. Prentice Hall.
[14] Higham, D.J. y Higham, N.J. (2005): Matlab guide. SIAM.
[15] Homan, J., Johnson, C. y Logg, A. (2004): Dreams of Calculus. Springer.
[16] Infante, J.A. y Rey, J.M. (2002): Metodos numericos. Teora, problemas y practicas
con Matlab. Anaya.
[17] Kharab, A. y Guenther, R.B. (2001): An Introduction to Numerical Methods: A
MATLAB Approach. Chapman & Hall.
[18] Kincaid, D. y Cheney, W. (1994): Analisis numerico. Las matematicas del calculo
cientco. AddisonWesley Iberoamericana.
B
o
r
r
a
d
o
r
[19] Kress, R. (1988): Numerical Analysis. Springer Verlag.
[20] The MacTutor History of Mathematics archive, University of St. Andrew,
http://turnbull.mcs.st-and.ac.uk/ history/.
[21] Marchand, P. y Holland, T.O. (2003): Graphics and GUIs with Matlab, tercera edi-
cion. Chapman & Hall/CRC.
[22] Maron, M.J. (1987): Numerical Analysis. A practical approach. Macmillan.
[23] Mathews, J.H. y Fink, K.(2000): Metodos Numericos con Matlab. Prentice Hall.
[24] Mathworks, http://www.mathworks.com/products/.
[25] Meurant, G. (1999): Computer solution of Large Linear systems. North Holland.
[26] Moler, C. (2004): Numerical computing with Matlab. SIAM.
[27] Palm, W.J. (2004): Introduction to Matlab 7 for engineers. McGraw-Hill.
[28] Quarteroni, A., Sacco, R. y Salery, F. (2000): Numerical Mathematics. Springer.
[29] Quarteroni, A. y Salery, F. (2003): Scientic computing with Matlab. Springer.
[30] Wikipedia: the free enciclopedy, http://www.wikipedia.org.
[31] Saasd, Y. y van der Vorst, H.A. (2000): Iterative solution of linear systems in the
20th century en J. Comput. Appl. Math., 123, 1-33 (2000).
[32] Stewart, G.W. (1996): Afternotes in Numerical Analysis. SIAM.
[33] Stewart, G.W. (2001):Matrix Algorithms: Vol. I. Basic decompositions. SIAM.
[34] S uli, E. y Mayers, D. (2003): An Introduction to Numerical Analysis. Cambridge
University Press.
262
B
o
r
r
a
d
o
r
Indice de guras
2.1. Pantalla Principal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2. Pantalla de ayuda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3. Ayuda con helpwin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4. Ayuda on line. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1. Diagrama de un matriz sparse . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1. Resultado de reordenar las las y columnas con symrcm y symmmd. . . . . 71
5.2. Eliminacion gaussiana y su representacion como un grafo. . . . . . . . . . 73
5.3. Historial del residuo para el metodo del Gradiente. . . . . . . . . . . . . . 91
5.4. Historial del residuo para el metodo del Gradiente Conjugado . . . . . . . 96
5.5. Efecto del en el Gradiente Conjugado. . . . . . . . . . . . . . . . . . . . . 101
7.1. Reglas de cuadratura: punto medio y trapecio . . . . . . . . . . . . . . . 114
7.2. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
7.3. Diagrama del metodo de Romberg . . . . . . . . . . . . . . . . . . . . . . 126
7.4. Integracion adaptativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
7.5. Integracion adaptativa de
x . . . . . . . . . . . . . . . . . . . . . . . . 131
7.6. Primeras exponenciales trigonometricas. . . . . . . . . . . . . . . . . . . . 134
7.7. Coecientes de Fourier y transformada discreta de Fourier . . . . . . . . . 141
7.8. Ruido y su Transformada de Fourier Discreta . . . . . . . . . . . . . . . . 142
7.9. Filtrado del ruido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
9.1. Profile aplicado al metodo de Jacobi. . . . . . . . . . . . . . . . . . . . 182
9.2. Una web muy sencilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
10.1. Ventana graca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
10.2. Ventana graca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
10.3. Edicion de un dibujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
10.4. Una muestra de dibujos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10.5. Modicacion del entorno del dibujo. . . . . . . . . . . . . . . . . . . . . . 216
10.6. Ejemplo de numeracion con subplot. . . . . . . . . . . . . . . . . . . . . 217
10.7. Disposicion simultanea de gracas con subplot. . . . . . . . . . . . . . . 219
10.8. Un dibujo en 3D con plot3. . . . . . . . . . . . . . . . . . . . . . . . . . 220
10.9. Icono para rotar los dibujos. . . . . . . . . . . . . . . . . . . . . . . . . . 221
10.10. Ejemplo de una supercie creada con surf. . . . . . . . . . . . . . . . . . 222
10.11. Otro ejemplo de surf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
263
B
o
r
r
a
d
o
r
10.12. Utilizacion de nan en un dibujo. . . . . . . . . . . . . . . . . . . . . . . . 224
10.13. Algunas opciones con surf. . . . . . . . . . . . . . . . . . . . . . . . . . 226
10.14. Esferas en 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
10.15. Una supercie con surf y pcolor. . . . . . . . . . . . . . . . . . . . . . . 229
10.16. Lneas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
10.17. Campo de velocidades con quiver . . . . . . . . . . . . . . . . . . . . . . 231
10.18. Triangulacion no conforme. . . . . . . . . . . . . . . . . . . . . . . . . . . 233
10.19. Numeracion de triangulos . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
10.20. Un dominio mallado en triangulos. . . . . . . . . . . . . . . . . . . . . . . 235
11.1. Dos formas de escribir y evaluar un polinomio. . . . . . . . . . . . . . . . 238
11.2. Polinomios de interpolacion con diferentes grados y el error cometido. . . 241
11.3. Estructura del calculo de las diferencias dividas. . . . . . . . . . . . . . . 244
11.4. Ejemplo de Runge. Polinomio de interpolacion y error cometido. . . . . . 248
11.5. Ejemplo de Runge con otros nodos. . . . . . . . . . . . . . . . . . . . . . 249
11.6. Rigidez polinomica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
11.7. Interpolacion con splines c ubicos naturales . . . . . . . . . . . . . . . . . 256
11.8. Curvas Bezier para algunas conguraciones de puntos. . . . . . . . . . . . 258
11.9. Ordenacion de nodos para la curva Bezier. . . . . . . . . . . . . . . . . . 259
264
B
o
r
r
a
d
o
r
Indice general
1. Introduccion 1
1.1. Que es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Como trabaja? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Como aprenderemos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
I Primeros pasos en Matlab.
Metodos directos para sistemas de ecuaciones lineales 5
2. Matlab: Primeros pasos 9
2.1. Entorno de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Comandos de ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4. Ficheros script y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.1. Ficheros script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.2. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5. Vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.1. Denicion de matrices y vectores . . . . . . . . . . . . . . . . . . . 22
2.5.2. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.5.3. Detalles adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.4. Acceso a partes de matrices . . . . . . . . . . . . . . . . . . . . . . 27
2.6. Bucles y estructuras de decision . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6.1. Bucles: el comando for . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6.2. Operadores logicos y estructuras de decision . . . . . . . . . . . . . 32
3. Metodos directos para sistemas de ecuaciones lineales 37
3.1. Metodo de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.1. Metodo de Gauss sin pivotaje . . . . . . . . . . . . . . . . . . . . . 38
3.1.2. Metodo de Gauss con pivotaje parcial . . . . . . . . . . . . . . . . . 41
3.1.3. Metodo de Gauss con pivotaje parcial cticio . . . . . . . . . . . . 43
3.2. Descomposiciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.1. Descomposicion LU . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.2. Casos particulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.3. Comandos correspondientes en Matlab . . . . . . . . . . . . . . . . 48
265
B
o
r
r
a
d
o
r
II Programacion Avanzada. Metodos iterativos 51
4. Matlab: programacion avanzada 55
4.1. Retorno a las matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1.1. Acceso a partes estructuradas de una matriz . . . . . . . . . . . . . 55
4.1.2. Mas operaciones sobre matrices . . . . . . . . . . . . . . . . . . . . 60
4.1.3. Matrices sparse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2. Argumentos de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5. Matrices sparse en Matematicas. Metodos iterativos 69
5.1. Metodo de Gauss para matrices sparse . . . . . . . . . . . . . . . . . . . . 69
5.2. Metodos iterativos para sistemas lineales . . . . . . . . . . . . . . . . . . . 74
5.2.1. Denicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.2. Detalles sobre la implementacion . . . . . . . . . . . . . . . . . . . 76
5.2.3. Metodos iterativos clasicos . . . . . . . . . . . . . . . . . . . . . . . 77
5.2.4. Metodos de tipo gradiente . . . . . . . . . . . . . . . . . . . . . . . 86
III Funciones como argumento. Recursividad
Formulas de cuadratura. FFT 103
6. Matlab: Funciones como argumentos. Recursividad 107
6.1. Funciones inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.2. Funciones como argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.2.1. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
7. Formulas de cuadratura. FFT 113
7.1. Formulas de cuadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.1.1. Primeras nociones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.1.2. Reglas simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.1.3. Retorno a las reglas compuestas . . . . . . . . . . . . . . . . . . . . 120
7.1.4. Reglas gaussianas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.1.5. Extrapolacion de Richardson . . . . . . . . . . . . . . . . . . . . . . 124
7.1.6. Integracion adaptativa . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.2. Transformada rapida de Fourier . . . . . . . . . . . . . . . . . . . . . . . . 132
7.2.1. Transformada de Fourier discreta . . . . . . . . . . . . . . . . . . . 133
7.2.2. Calculo de la transformada de Fourier Discreta . . . . . . . . . . . . 138
7.2.3. Aplicaciones a la eliminacion de ruido . . . . . . . . . . . . . . . . . 140
7.2.4. Transformada rapida de Fourier . . . . . . . . . . . . . . . . . . . . 142
IV Calculo simbolico, arrays y celdas en Matlab. Valores y
vectores propios. Google. 151
8. Matlab: Calculo simbolico y estructuras de datos. 155
8.1. Polinomios y calculo simbolico . . . . . . . . . . . . . . . . . . . . . . . . . 155
8.1.1. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
266
B
o
r
r
a
d
o
r
8.2. Procesador simbolico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.3. Tensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
8.4. Vectores de celdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
9. Calculo numerico de valores y vectores propios. 169
9.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.2. Matrices semejantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
9.3. Metodo de potencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
9.3.1. Descripcion del metodo . . . . . . . . . . . . . . . . . . . . . . . . . 172
9.3.2. Variantes del metodo de potencias . . . . . . . . . . . . . . . . . . . 176
9.4. Metodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.4.1. Descripcion del metodo . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.4.2. Variantes del metodo de Jacobi . . . . . . . . . . . . . . . . . . . . 181
9.5. Metodo QR de Francis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
9.5.1. Factorizacion QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
9.5.2. Metodo QR de Francis . . . . . . . . . . . . . . . . . . . . . . . . . 190
9.5.3. Comentarios adicionales . . . . . . . . . . . . . . . . . . . . . . . . 191
9.6. Valores y vectores propios en Matlab . . . . . . . . . . . . . . . . . . . . . 193
9.7. Notas historicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
9.8. Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
V Salidas gracas en Matlab. Interpolacion 201
10.Matlab: Salidas gracas en Matlab 205
10.1. Dibujos bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
10.1.1. El comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
10.1.2. Comandos asociados a plot . . . . . . . . . . . . . . . . . . . . . . 211
10.1.3. Comandos get y set . . . . . . . . . . . . . . . . . . . . . . . . . . 213
10.1.4. El comando subplot . . . . . . . . . . . . . . . . . . . . . . . . . . 217
10.1.5. Otras salidas gracas . . . . . . . . . . . . . . . . . . . . . . . . . . 218
10.2. Gracas en 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.2.1. El comando plot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.2.2. El comando surf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
10.2.3. Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
10.2.4. Comandos faciles de usar . . . . . . . . . . . . . . . . . . . . . . . 231
10.3. Campos vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
10.4. Dibujos sobre dominios mallados en triangulos . . . . . . . . . . . . . . . . 232
11.Interpolacion. Curvas Bezier 237
11.1. Interpolacion polinomica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
11.1.1. Interpolacion polinomica de Lagrange . . . . . . . . . . . . . . . . . 237
11.1.2. Existencia del polinomio de interpolacion . . . . . . . . . . . . . . . 238
11.1.3. Formula de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
11.1.4. Analisis del error de interpolacion . . . . . . . . . . . . . . . . . . . 247
11.2. Extensiones adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
11.2.1. Interpolacion de Hermite . . . . . . . . . . . . . . . . . . . . . . . . 250
267
B
o
r
r
a
d
o
r
11.2.2. Interpolacion de funciones periodicas . . . . . . . . . . . . . . . . . 252
11.2.3. Interpolacion polinomica a trozos . . . . . . . . . . . . . . . . . . . 253
11.3. Curvas Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
268
B
o
r
r
a
d
o
r