Вы находитесь на странице: 1из 115

B

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

tulo 8. Matlab: Calculo simbolico y estructuras de datos.


En Matlab podemos utilizar roots para calcular de forma aproximada las races de un
polinomio:
>> pol=[2 -3 -17 30]; % 2*x^2-3*x^2-17*x+30
>> roots(pol)
ans =
-3.0000
2.5000
2.0000
>> pol2=[1 -2 2 -1];
>> roots(pol2). % un par complejas!!
ans =
1.0000 0.5000 + 0.8660i 0.5000 - 0.8660i
Recprocamente, dado un vector que contenga las races, podemos crear un polinomio
monico (el coeciente que acompa na a la mayor potencia de x es 1) cuyas races sean las
dadas:
>> poly([-3 5/2 2])
ans =
1 -3/2 -17/2 15
El comando poly puede emplearse tambien para construir el polinomio caracterstico de
una matriz cuadrada A, es decir, el polinomio
det(A xI)
donde I es la matriz identidad de orden n. Por ejemplo,
>> A=[3 -2 2;-1 2 2;-1 1 3];
>> p=poly(A) %pol caract. (monico)
p =
1 -8 19 -12
>> roots(p).
ans =
4 3 1
157
B
o
r
r
a
d
o
r
8.1 Polinomios y calculo simbolico LECCI

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

tulo 8. Matlab: Calculo simbolico y estructuras de datos.


de los valores propios de una matriz, simplemente construyendo la matriz compa nera
7
x
n
+ a
n1
x
n1
+ . . . a
0

_

_
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

tulo 8. Matlab: Calculo simbolico y estructuras de datos.


Nota. La derivacion e integracion de un polinomio se puede hacer tambien con polyder
y polyint que trabaja directamente sobre el vector que almacena el polinomio, es decir,
no es simbolico:
>> polyder([1 4 2]) % derivada de x^2+4*x-2
ans=
2 4

Ejercicio 8.2 Los siguientes comandos inciden en la simplicacion y manipulacion de expre-


siones
simplify factor expand collect simple
Consulta la ayuda de Matlab y aplcalos sobre diferentes expresiones algebraicas susceptibles
de ser simplicadas.
Para la resolucion de ecuaciones y sistemas de ecuaciones mediante metodos simbolicos,
con las limitaciones que esto implica, podemos utilizar el comando solve:
>> solve(x*log(x^2+4*x-4)=0)
ans =
0
1
-5
Cuando el termino independiente es cero puede omitirse:
>> solve(x*log(x^2+4*x-4))
De forma analoga, dsolve busca las soluciones de ecuaciones y sistemas diferenciales:
>> dsolve(D3y-D2y-2*Dy-cos(s),s) % y-y-2y-cos(s)=0
ans =
-3/10*sin(s)+1/10*cos(s)+C1+C2*exp(2*s)+C3*exp(-s)
>> dsolve(D3y-D2y-2*Dy-cos(s),y(0)=1,Dy(0)=2, D2y(0)=3,s)
ans =
-3/10*sin(s)+1/10*cos(s)+1/2+9/10*exp(2*s)-1/2*exp(-s)
Ejercicio 8.3 Utiliza solve para hallar las cuatro races de la ecuacion de cuarto grado
x
4
+ ax
3
+ bx
2
+ cx + d.
161
B
o
r
r
a
d
o
r
8.3 Tensores LECCI

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

tulo 8. Matlab: Calculo simbolico y estructuras de datos.


a2(:,:,2) =
7 8 9
10 11 12
>> size(a)
ans =
2 3 2
>> length(a) %maximo de las dimensiones
ans =
3
Observa la diferencia
>> a1=a(1,:,:)
a1(:,:,1) =
1 2 3
a1(:,:,2) =
7 8 9
>> a2=a(:,1,:)
a2(:,:,1) =
1
4
a2(:,:,2) =
7
10
>> a3=a(:,:,1)
a3 =
163
B
o
r
r
a
d
o
r
8.3 Tensores LECCI

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

tulo 8. Matlab: Calculo simbolico y estructuras de datos.


Las funciones que operan sobre escalares, tales como sin, cos, etc., funcionan con
tensores exactamente del mismo modo que con vectores o matrices, realizando las opera-
ciones elemento a elemento. Si se aplica una funcion de las que operan sobre los elementos
de un tensor como por ejemplo b usqueda de maximos o mnimos (max, min) o la suma y
producto (sum, prod), devuelve un tensor de una dimension menos, resultado de realizar
la operacion sobre la primera dimension:
>> a=zeros(2,3,2);
>> a(:,:,1)=[1 2 8; 4 5 6]; a(:,:,2)=[6 2 14; 3 5 1]
a(:,:,1) =
1 2 8
4 5 6
a(:,:,2) =
6 2 14
3 5 1
>> max(a) % 1x3x2
ans(:,:,1) =
4 5 8
ans(:,:,2) =
6 5 14
>> max(max(a)) % 1x1x2
ans(:,:,1) =
8
ans(:,:,2) =
14
>> max(max(max(a))) % 1x1x1, un numero
ans =
6
165
B
o
r
r
a
d
o
r
8.4 Vectores de celdas LECCI

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

tulo 8. Matlab: Calculo simbolico y estructuras de datos.


o visualizar todas ellas mediante
>> celldisp(celda)
celda{1} =
7
celda{2} =
1 2 3
4 5 6
celda{3} =
una cadena de caracteres
celda{4} =
Inline function:
(x,y) = x+y
Este tipo de estructura, aunque muy exible a la hora de almacenar informacion, es
sin embargo manejada con menor eciencia por Matlab, por lo que debe hacerse un uso
mesurado de ella. Los comandos varargin y varargout proporcionan un buen ejemplo
de una utilizacion apropiada de esta estructura.
Ejercicio 8.4 Otra manera de agrupar distintos tipos de datos es utilizar estructuras (struct).
Una estructura es un tipo de dato del que luego se pueden asignar campos distintos. Por ejem-
plo, la estructura Libro podra contener los campos Titulo y Autor que seran cadenas de
caracteres y A~noPublicacion y NumeroPaginas que seran n umeros.
Utiliza la ayuda de Matlab para averiguar como pueden denirse estos tipos de datos
mediante la orden struct.
167
B
o
r
r
a
d
o
r
Captulo 9
Calculo numerico de valores y
vectores propios.
9.1. Introduccion
El estudio de los valores y vectores propios de una matriz surge ligado a una gran
cantidad de problemas que se plantean en ambitos de muy diversa ndole, tales como la
Ingeniera, Fsica, Economa, Estadstica o Biologa. Algunos ejemplos los encontramos
en el calculo de los modos de vibracion de algunas estructuras, el estudio de la evolucion
de sistemas dinamicos, compresion de datos, el analisis de redes (grafos),...
El problema que abordamos es el siguiente: dada una matriz A de tama no n n
queremos encontrar los escalares y vectores v ,= 0 que cumplan
Av = v.
Se dice entonces que es un valor propio de A y que v es un vector propio asociado
a . Se trata por tanto de buscar las direcciones invariantes bajo los productos por la
matriz.
Equivalentemente, los valores propios de A son aquellos valores para los que el
sistema lineal homogeneo
(A I)v = 0,
tiene soluciones no nulas, y estas soluciones son los vectores propios asociados a . Esta
expresion nos da una manera de calcular : los valores propios son los valores, reales o
complejos, para los que AI no es invertible, o equivalente, para los que det(AI)=0.
Concluimos de esta manera que los valores propios son las races del polinomio
p() := det(A I) = 0.
conocido como polinomio caracterstico. Dado que p() tiene grado n, habra exactamente
n valores propios (aunque alguno de ellos puede estar repetido o ser complejo).
Historicamente los metodos numericos comenzaron trabajando sobre el polinomio ca-
racterstico para hallar los valores propios, pero pronto se comprobo que este camino
no era el mas indicado. Uno de los hechos que motivaron este abandono radicaba en la
inestabilidad numerica:
169
B
o
r
r
a
d
o
r
9.1 Introduccion LECCI

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

tulo 9. Calculo numerico de valores y vectores propios.


Nota.

Este y otros detalles no eran conocidos en los inicios del calculo cientco. James
Hardy Wilkinson relata la siguiente anecdota
2
. Cuando estaba programando en uno de los
primeros ordenadores electronicos el metodo de Newton para la resolucion de ecuaciones
no lineales, decidio testarlo con el siguiente polinomio
(x 20)(x 19) (x 1).
El metodo fallaba de forma reiterada, a pesar de las sucesivas revisiones del codigo, hasta
que Wilkinson cayo en la cuenta de que el error no radicaba en su programa sino que
las races eran tan sensibles numericamente que se vean afectadas por los errores de
redondeo. Wilkinson demostro que al cambiar el coeciente de x
19
en p, que es 210,
por 210 2
23
, las races 16 y 17 se transforman
3
en el par complejo 16.73 2.81i.
El polinomio en cuestion paso a la historia del Numerico con el nombre de el perdo
polinomio de Wilkinson.
9.2. Matrices semejantes
Dos matrices A y B son semejantes si existe una matriz P invertible tal que
B = PAP
1
.
En este caso,
det(B I) = det(PAP
1
I) = det(P(A I)P
1
) =
= det(P) det(A I) det(P
1
) = det(A I),
es decir, A y B tienen el mismo polinomio caracterstico y por tanto los mismos valores
propios.
Este resultado sugiere una estrategia para encontrar los valores propios de A: buscar
matrices semejantes para las que el calculo de los valores propios sea sencillo. En particular,
cuando B es triangular sus valores propios son simplemente los elementos diagonales.
Si podemos tomar los n vectores propios linealmente independientes, la matriz P :=
[v
1
[v
2
[ . . . [v
n
] (su iesima columna es el vector v
i
) es invertible. Entonces
AP = PD P
1
AP = D,
donde D es una matriz diagonal con los valores propios sobre la diagonal. Si una matriz
es semejante a una matriz diagonal se dice que es diagonalizable.
Particularmente interesante es el caso en que P se puede tomar ademas ortogonal.
Esto es, P
1
= P

, 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

AQ = D con D diagonal con


los valores propios de A. En particular, los valores propios de una matriz simetrica son todos
reales.
En las Secciones 9.4 y 9.5 de esta leccion se estudiaran dos metodos basados en trans-
formaciones de semejanza (producto por matrices ortogonales) que tratan de llevar una
matriz simetrica a una forma diagonal como forma de calcular los valores propios. Estos
metodos se pueden adaptar, con mas o menos exito, a matrices arbitrarias llevando en
este caso la matriz a una forma triangular o cuasitriangular.
9.3. Metodo de potencias
En esta seccion presentaremos el metodo de potencias y algunas variantes del mismo
que proporcionan un valor propio de la matriz. Estos metodos combinados con tecnicas
de deacion, que consisten en construir una nueva matriz con los mismos valores propios
que la original salvo el ya el calculado, permiten calcular unos pocos valores propios.
9.3.1. Descripcion del metodo
Asumiremos para empezar que la matriz A tiene un valor propio dominante, es decir,
sus valores propios pueden ordenarse en la forma
[
1
[ > [
2
[ [
3
[ . . . [
n
[.
Supongamos ademas que tenemos una base formada por vectores propios, esto es pode-
mos tomar v
i

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

tulo 9. Calculo numerico de valores y vectores propios.


Proposicion 9.2 Bajo las hipotesis anteriores

(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

tulo 9. Calculo numerico de valores y vectores propios.


>> [lb,v]=potencias(a,[],[],v0); % especifico el vector inicial

Ejercicio 9.3 Compara la velocidad de convergencia y el n umero de iteraciones requerido


para distintas tolerancias y vectores iniciales al tomar las matrices
A =
_
_
1 3 0
4 9 4
2 1 5
_
_
, B =
_
_
1 3 0
3 9 4
0 4 5
_
_
, C =
_
_
1 4 2
4 9 1
2 1 5
_
_
.
Nota. Cuando no se conoce una aproximacion del vector propio asociado al valor propio
dominante, se suele iniciar el algoritmo partiendo de un vector generado aleatoriamente.
Podra ocurrir que para el vector inicial
1
= 0, pero la probabilidad de que se de es-
te problema es (practicamente) nula. En este caso, si [
2
[ > [
3
[, salvo por errores de
redondeo
4
, el metodo proporcionara el valor propio subdominante
2
y su vector propio
asociado normalizado.
No es necesario que la matriz sea diagonalizable para que el metodo de potencias
converja. Tampoco que el subespacio asociado al valor propio dominante este generado
por un unico vector. En este caso, que solo puede darse si
1
es un valor propio repetido, el
metodo puede converger a distintos vectores propios normalizados dependiendo del vector
inicial considerado.
Si [
1
[ = [
2
[, es decir,
1
=
2
o
1
y
2
son n umeros complejos conjugados, entonces
el metodo de potencias falla.
Ejercicio 9.4 Consideremos la matriz
A =
_

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

son vectores propios


asociados a los valores propios 1 y 2 respectivamente, que crees que ocurrira si se toma
como vector inicial v
1
3v
2
= (12, 31, 15, 2)

?
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

tulo 9. Calculo numerico de valores y vectores propios.


donde es una constante conocida, podemos obtener el valor propio de A mas alejado
de . Mas interesante desde el punto de vista practico es aplicar el metodo de potencias
a (A I)
1
, que nos proporcionara el valor propio de A mas proximo a .
Ejercicio 9.7 Modica el programa del Ejercicio 9.6 para implementar el metodo de poten-
cias desplazado. Los argumentos obligatorios de entrada seran ahora A y alpha.
Comentarios nales
El metodo de potencias tiene una ventaja evidente: su simplicidad. Ni siquiera nece-
sitamos la matriz en s, solo saber multiplicar por ella.
El algoritmo de la potencia desplazada se puede utilizar para el calculo de un vector
propio si se conoce , el valor propio asociado. Basta para ello aplicar el metodo con
= + con << 1. Puede plantearse si esto tiene efectos perniciosos habida cuenta
de que AI esta muy cerca de ser singular. Wilkinson probo sin embargo que el efecto
de esta inestabilidad se da precisamente en la direccion del vector propio, que a n de
cuentas es lo que nos interesa.
Se puede sugerir una version alternativa del metodo de potencias desplazada consis-
tente en tomar un nuevo en cada iteracion, por ejemplo el ultimo valor calculado
(m)
.
Aunque esto acelera enormemente la convergencia del metodo, dispara el costo por itera-
cion, ya que en cada paso hay que resolver un sistema lineal nuevo, por lo que salvo en
contados casos no es recomendable.
Si se conoce un valor propio de una matriz A de tama no n, puede construirse una
nueva matriz de tama no n 1 que tiene exactamente los mismos valores propios que A
salvo . Podra aplicarse ahora el metodo de potencias (o cualquiera de sus variantes) a la
nueva matriz para determinar un nuevo valor propio de A. Este tipo de tecnica, en la que
no entraremos en estos apuntes, se conoce como deacion. Debemos se nalar que mediante
esta tecnica los errores de redondeo se van acumulando, de modo que solo es factible para
calcular unos cuantos valores propios. El n umero nal depende obviamente de la propia
matriz y de la precision con que se van calculando los valores propios.
9.4. Metodo de Jacobi
En esta seccion estudiaremos un metodo que nos proporcionara todos los valores pro-
pios de una matriz simetrica (todos son reales) mediante un esquema iterativo basado
en transformaciones de semejanza.
9.4.1. Descripcion del metodo
El metodo de Jacobi transforma en cada paso una matriz simetrica A en otra semejante
con estructura mas diagonal mediante el producto a izquierda y derecha por matrices
apropiadas. Una matriz de Givens, tambien llamada de rotacion, es una matriz de la
177
B
o
r
r
a
d
o
r
9.4 Metodo de Jacobi LECCI

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

tulo 9. Calculo numerico de valores y vectores propios.


El metodo ya se vislumbra en este estado: se trata de repetir el mismo argumento
con A
1
para obtener una segunda matriz A
2
resultado de cancelar el mayor elemento
extradiagonal de A
1
. De esta forma, reiterando este proceso llegamos a una sucesion de
matrices A
m
que cumplen
A
m
D :=
_

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

tulo 9. Calculo numerico de valores y vectores propios.


42 else
43 theta=(a(q,q)-a(p,p))/(2*a(p,q));
44 t=sign(theta)/(abs(theta)+sqrt(theta^2+1));
45 c=1/sqrt(t^2+1);
46 s=c*t;
47 end
48 r=[c s ;-s c];
49 %La rotacion solo afecta a las filas y col. p y q
50 a([p q],:)=r*a([p q],:);
51 a(:,[p q])=a(:,[p q])*r;
52 Q(:,[p q])=Q(:,[p q])*r; % guardamos Q
53 end
54 disp(numero maximo de iteraciones sobrepasado);
55 return
Observa bien las lneas 32-33 que sirven para encontrar la posicion del maximo elemento
extradiagonal.

9.4.2. Variantes del metodo de Jacobi


Aunque el metodo de Jacobi ofrece la posibilidad de calcular de forma rapida todos
los valores propios, tiene una convergencia lenta incluso para matrices de tama no mo-
derado. Vamos a introducir algunas mejoras desde el punto de vista computacional, que
no matem atico. Concretamente vamos a realizar una peque na modicacion que aunque
eleva el n umero de iteraciones necesarias para converger (peor desde el punto de vista
matematico) cada iteracion se ejecuta en menos tiempo, de forma que al nal se consigue
reducir el tiempo de calculo (mejora computacional).
Para ello vamos a identicar primero donde se nos va el tiempo de calculo. Con este
n utilizaremos una de las herramientas mas utiles en Matlab: profile.
Comenzamos creando una matriz simetrica de tama no moderado:
>> a=rand(120); a=a+a;
y activamos el prole de Matlab con
>> profile on
Ahora Matlab va a llevar un control sobre el tiempo que consume cada lnea de codigo
9
.
A continuacion ejecuta el programa jacobi para a con un n umero maximo de iteraciones
sucientemente alto de forma que asegures convergencia. La instruccion
>> profile report
despliega un informe donde puedes ver el tiempo que ha consumido cada parte del pro-
grama. Se observa claramente que las lneas mas costosas son aquellas empleadas en la
b usqueda del maximo elemento extradiagonal (observa la Figura 9.1). Es precisamente
181
B
o
r
r
a
d
o
r
9.4 Metodo de Jacobi LECCI

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

tulo 9. Calculo numerico de valores y vectores propios.


en estas lneas donde debemos proponer nuestra mejora, reemplazando la b usqueda por
alg un proceso mas economico.
La variante que proponemos es la siguiente: recorreremos uno por uno todos los ele-
mentos situados debajo de la diagonal (como la matriz es simetrica esto es suciente).
Si el tama no de un elemento es peque no, no hacemos nada y pasamos al siguiente. Si es
grande, se procede anularlo. Para dilucidar si es grande o peque no compararamos con
el tama no de la diagonal de forma semejante a como se hace en el programa original
(lnea 09). Una vez recorridos todos los elementos, esto es, una vez realizado un barrido
en la terminologa habitual, volvemos a empezar. Cada cierto n umero de iteraciones, por
ejemplo tras cada barrido, podemos medir el tama no de los elementos extradiagonales que
quedan para ver si se da por nalizada la ejecucion del programa. Si comprobamos que
hay todava elementos diagonales muy grandes, empezamos de nuevo.
Ejercicio 9.9 Implementa la modicacion sugerida en el parrafo de arriba. Ejecuta el profile
de Matlab y compara tiempos de ejecucion con el programa original. Que observas?. Fjate
tambien en el n umero de iteraciones que necesita para converger. Que te parece?.
Nota. La instruccion profile es muy util a la hora de depurar codigo dado que permite
controlar que partes del programa vale la pena optimizar y cuales no. La instruccion tiene
varios argumentos opcionales y comandos relacionados que puedes consultar en la ayuda.
Los comandos tic y toc son mas simples pero proporcionan menos informacion. El
primero activa el reloj y el segundo nos informa sobre el tiempo trascurrido desde que se
ejecuto tic.
9.5. Metodo QR de Francis
El metodo QR y sus variantes son sin lugar a dudas la eleccion mas apropiada para el
calculo de todos los valores propios de una matriz llena.
El metodo es muy facil de entender y sencillo de implementar. Sin embargo, es difcil
de comprender por que funciona (el analisis no es nada trivial).
Ya hemos visto descomposiciones matriciales del tipo A = LU con L (permutacion
de) triangular inferior con 1s en la diagonal y U triangular superior. Una descomposicion
alternativa es
A = QR
con Q ortogonal (Q

= 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

tulo 9. Calculo numerico de valores y vectores propios.


Generalmente se suele escoger con el signo opuesto al de la primera componente de x
para que |u|
2
no sea demasiado peque na.
Para obtener una descomposicion A = QR podemos proceder del siguiente modo:
1. Construimos la matriz de Householder Q
1
como en la proposicion anterior tomando
como vector x la primera columna de A. Entonces
Q
1
A =
_

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.

Ejercicio 9.12 Adapta el programa para calcular la factorizacion QR de matrices rectangu-


lares, es decir, matrices generales de m las y n columnas.
(Ayuda: el for de la lnea 11 es ahora for k=1:min([m,n]). El resto de cambios son inmediatos
sin mas que tener en cuenta los tama nos de las matrices implicadas.)
Si Q = I 2 uu

es nn y B nm, entonces el producto QB puede calcularse como


QB = (I 2 uu

)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

tulo 9. Calculo numerico de valores y vectores propios.


llenas el tiempo de calculo es practicamente el doble comparado con el requerido al utilizar
matrices de Householder.
Es muy facil comprobar que para crear un cero en la posicion (p, q) al multiplicarla a
izquierda por una matriz de Givens R
p,q
() basta elegir de modo que
cos =
a
qq
_
a
2
qq
+ a
2
pq
, sin =
a
pq
_
a
2
qq
+ a
2
pq
.
Notemos que las matrices R
pq
()A y A solo dieren en las las p y q.
El metodo consistira entonces en ir transformado la matriz original (de tama no n) en
una matriz triangular superior del siguiente modo: en primer lugar se hacen ceros en las
posiciones de la primera columna por debajo del elemento de la diagonal multiplicando
por n 1 matrices como (9.2), de modo que
A
1
:= R
1n
(
1n
) . . . R
13
(
13
)R
12
(
12
)
. .
Q
1
A =
_

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

Ejercicio 9.15 Adapta el metodo para trabajar con matrices rectangulares.


Ejercicio 9.16 Compara el tiempo de calculo requerido al utilizar matrices de Householder
y de Givens, con matrices llenas y matrices tridiagonales.
(Ayuda: Recuerda los comandos tic y toc.)
Factorizacion QR con Matlab
En Matlab podemos obtener una factorizacion QR mediante el comando qr. Por ejem-
plo,
>> a=rand(4);
>> [q,r]=qr(a)
q =
-0.3685 0.7147 -0.2407 -0.5436
-0.7715 -0.4099 0.4388 -0.2102
-0.3858 -0.2967 -0.8391 0.2429
-0.3466 0.4829 0.2131 0.7754
r =
-1.2078 -1.0282 -0.7184 -1.1168
0 0.6539 0.5720 0.3849
0 0 -0.6839 -0.4834
0 0 0 -0.0530
La matriz a no tiene por que ser cuadrada:
>> a=rand(3,2);
>> [q2,r2]=qr(a)
188
B
o
r
r
a
d
o
r
LECCI

ON IV Cap

tulo 9. Calculo numerico de valores y vectores propios.


q2 =
-0.6815 0.6346 -0.3644
-0.6680 -0.7428 -0.0444
-0.2989 0.2132 0.9302
r2 =
-1.3726 -0.7532
0 0.5993
0 0
Comentarios sobre la descomposicion QR
Si A es mn, y Q, R es la descomposicion dada por Householder o Givens
11
, tomando
(con notacion de Matlab)
Q
1
= Q(:, 1 : m), R
1
= R(1 : m, :),
entonces R
1
es cuadrada, Q
1
tiene las columnas ortonormales y A = Q
1
R
1
.
La factorizacion QR se puede utilizar para resolver sistemas lineales compatibles inde-
terminados mediante la aproximacion por mnimos cuadrados. Especcamente, se trata
de asignar como solucion de Ax = b la dada por
A

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

tulo 9. Calculo numerico de valores y vectores propios.


Ejercicio 9.19 Que modicacion haras del algoritmo anterior para que tambien devolviera
los vectores propios?.
Ejercicio 9.20 Implementa el algoritmo QR de Francis utilizando cualquiera de las descom-
posiciones QR vistas.
Ayuda: Que calculamos mediante las ordenes tril(a,-1) y norm(a,fro)?
Si A no es simetrica pero es diagonalizable, el metodo converge, tambien bajo condi-
ciones muy generales a una matriz quasitriangular, es decir, a una matriz de la forma
T =
_

_
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

tulo 9. Calculo numerico de valores y vectores propios.


Entonces
HAH =
_
_
b

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

9.6. Valores y vectores propios en Matlab


Para determinar todos los valores y vectores propios de una matriz podemos utilizar
el comando eig. Esta funcion es de hecho una compilacion de funciones que se aplican
dependiendo de la forma de la matriz. Este comando tambien sirve para resolver el pro-
blema de valores propios generalizados: dadas dos matrices cuadradas A y B encontrar
escalares y vectores v ,= 0 tales que
Av = Bv.
En ocasiones requerimos unos pocos valores propios. El comando eigs, proporciona
los valores propios mas relevantes, siendo el propio usuario el que especique si estos son
los mayores o menores en valor absoluto, los de mayor o menor parte real,etc. La ayuda
de Matlab es bastante extensa y desde aqu animamos a su consulta. Como detalle curioso
este comando se puede llamar de forma que uno de los argumentos sea una funcion que
devuelva el producto por la matriz. Es decir, solo necesita saber multiplicar por la matriz
y por tanto no es necesario disponer de ella
13
. El uso de este comando es indispensable
en matrices sparse no simetricas dado que, a un reduciendola a forma de Hessenberg, las
necesidades de memoria son gigantescas
14
. Para este tipo de problemas se utilizan otros
tipos de metodos no relacionados con QR.
Asociado al calculo de valores propios, se encuentra el calculo de los valores singulares,
esto es, buscar P y Q ortogonales de forma que
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

tulo 9. Calculo numerico de valores y vectores propios.


Figura 9.2: Una web muy sencilla.
Concretamente, la cuestion sobre la que se basa este sistema de evaluacion es la que
sigue:
Si una persona navega de forma continuada durante un largo periodo de tiempo,
c ual es la probabilidad de que llegue a una pagina web determinada?
Esta probabilidad es la que se utiliza para evaluar las paginas. A priori hay dos formas
de llegar a una pagina:
i) a traves de un enlace desde otra pagina (probabilidad p),
ii) directamente (probabilidad (1 p)).
Un valor habitual es p = 0.85.
En la gura 9.2 vemos un (muy) simple ejemplo de una web representada como un
grafo dirigido. Una echa de i a j indica que la pagina i tiene un enlace (un link) a la
pagina j.
En este ejemplo n = 6 es el n umero de paginas que cuenta con 9 enlaces. Este grafo
se puede representar matematicamente mediante la matriz 6 6
G = (g
ij
) =
_

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

a las probabilidades de estar en una pagina web determinada en el paso m, obtenemos la


relacion
x
m+1
= Ax
m
.
La idea es hacer evolucionar el sistema hasta que se estabilice.
196
B
o
r
r
a
d
o
r
LECCI

ON IV Cap

tulo 9. Calculo numerico de valores y vectores propios.


Proposicion 9.5 Existe un unico x de componentes no negativas tal que
x = Ax, x

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]

Por orden de preferencia nos encontramos los nodos


2, 3, 1 y 4, 5, 6.
A pesar de que el nodo 3 solo se enlaza a traves del 2, la importancia de este nodo inuye
en su buena puntuacion.
En problemas reales, las matrices son enormes, en Febrero de 2006 google haba ca-
talogado 9.680.000.000 paginas
20
. Despues de la evaluacion hay que hacer un ltrado de
acuerdo a las palabras clave con las que se hace la b usqueda.
Es posible hacer subir la evaluacion de una pagina mediante la creacion de paginas web
que se enlacen entre ellas y especialmente sobre una. Este tipo de tecnicas, denominada
google bombing ha sido utilizado reiteradas veces por objetivos de diversa naturaleza,
economicos, polticos, de protesta.... Los algoritmos del buscador tratan de detectar este
tipo de trampas y reconstruir la evaluacion para que sea mas imparcial.
Nota historica
Google fue fundado en 1995 por Sergey Brin y y Larry Page, el primero ingeniero
electrico y el segundo licenciado en matematicas y que contaban entonces con 23 y 24
a nos. El nombre proviene del n umero 10
100
que, aunque no ocialmente, se llama Googol
21
El ambiente desenfadado y el origen matematico del buscador tuvo un curioso reejo
en la primera oferta p ublica de acciones que tuvo lugar a principios del 2004. Brin y Page
sacaron al mercado una participacion de la compa na cuyo valor era 2.718.281.828$, el
n umero e con 10 cifras decimales
22
.
20
Basta hacer la b usqueda de una palabra inexistente precedida de un - para obtener el n umero de
paginas catalogadas.
21
As lo denomino el matematico Edward Kasner. En ingles existe la palabra goggles que son unas gafas
de natacion (?).
22
Muy pocos se dieron cuenta de este gui no. Se hizo de nuevo palpable la escasa cultura cientca
198
B
o
r
r
a
d
o
r
Leccion V
Salidas gracas en Matlab. Interpolacion
201
B
o
r
r
a
d
o
r
Introduccion
...but it had no pictures or conversations in it,
and what is the use of a book, thought Alice
without pictures or conversation?
Lewis Carroll, Alice in Wonderland
Trataremos en este proyecto uno de los aspectos mas potentes de Matlab: las salidas
gracas. Ciertamente exponer con cierto detalle todo lo relacionado con este campo es
una tarea ardua y extensa. Sin embargo, y este es nuestro objetivo, s es asumible alcanzar
un conocimiento base de forma que sea el usuario quien, con la ayuda de Matlab o con
manuales especcos, profundice en los aspectos puntuales que necesite.
En la segunda parte estudiaremos el problema de la interpolacion polinomica como
una buena piedra de toque para testar las salidas gracas. Como aspectos relacionados
hablaremos someramente de la interpolacion por splines y las curvas Bezier, que nos
ofrecen un ejemplo muy sencillo de las Matematicas aplicadas al dise no graco.
203
B
o
r
r
a
d
o
r
Captulo 10
Matlab: Salidas gracas en Matlab
10.1. Dibujos bidimensionales
10.1.1. El comando plot
Ya hemos observado que los comandos de Matlab cuentan con varios niveles de ma-
nipulacion. Los niveles iniciales son basicos y por tanto faciles de utilizar. El acceso a
niveles nos exige trabajar con argumentos nuevos, mas instrucciones y el manejo de una
sintaxis m as complicada.
Esta caracterstica se destaca mas, si cabe, en los comandos relacionados con las salidas
gracas. Es por ello que, empezando por la instruccion plot, recorreremos los diferentes
niveles de forma gradual. No trataremos el nivel superior, que conlleva un control absoluto
del dibujo, dado que requerira una exposicion demasiada larga. Lo que aqu expondremos
es suciente en un 99 % de los casos, y en ultima medida, se puede acceder a todos los
aspectos de un dibujo desde la ventana graca a golpe de raton.
Primer nivel
El primer comando que trataremos es plot. Es una instruccion muy versatil y la mas
indicada para dibujar gracas de funciones y curvas en el plano. Su sintaxis basica es
>> plot(x,y)
que dibuja el vector y versus el vector x. Mas en concreto une los puntos (x(i), y(i))
mediante segmentos. Tomando un n umero sucientemente elevado de puntos trazamos
con ello una graca suave, sin esquinas visibles.
Al ejecutar este comando se abre una ventana, gure en el vocabulario de Matlab,
donde se traza la correspondiente gura.
Si y es real, plot(y) toma x=1:n donde n es la longitud de y. Si, por otro lado, y es
un vector de n umeros complejos, dibuja la parte imaginaria versus la parte real. Es decir,
es equivalente a plot(real(y),imag(y)).
Ejercicio 10.1 Que hacen las siguientes lneas de codigo?
>> clear i
>> t=linspace(0,2*pi,9);
>> plot(exp(i*t));
205
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


< triangulo (izquierda)
> triangulo (derecha)
p estrella pentagonal
h estrella hexagonal
La primera columna especica el color utilizado, la segunda la marca sobre cada punto y
la tercera el patron que siguen las lneas utilizadas para unir los puntos.
Por ejemplo el siguiente chero script
x=linspace(0,4,100);
y=exp(-x).*cos(2*pi*x);
figure(1); plot(x,y,.)
figure(2); plot(x,y,r-.)
figure(3); plot(x,y,sm--)
figure(4); plot(x,y,hg)
figure(5); plot(x,y,kv:)
genera (tras el reordenamiento manual de las ventanas) la pantalla mostrada en la Figura
10.2.
El comando figure abre una ventana graca asignandole un n umero. Si la ventana
ya esta abierta, la coloca como la ventana de salida por defecto. En particular, figure
permite manejarse con varias ventanas de forma simultanea.
Para superponer varios dibujos sobre una misma ventana podemos
Utilizar plot de la siguiente forma
2
>> plot(x1,y1,x2,y2,x3,y3,x4,y4)
mediante el cual dibujaremos y1 vs. x1, y2 vs. x2, etc., o si queremos dar un formato
personalizado a cada dibujo podemos usar
>> plot(x1,y1,r-,x2,y2,b:,x3,y3,m-.,x4,y4,k--)
Utilizar la instruccion hold on que activa la superposicion en pantalla. Por ejemplo,
>> hold on %activamos superposicion
>> plot(x1,y1,r-)
>> plot(x2,y2,r:)
>> plot(x3,y3,m.-)
>> plot(x4,y4,k--)
Esta opcion es mas versatil dado que permite superponer gracas construidas con
diferentes comandos. La superposicion se desconecta con hold off, de forma que
un nuevo dibujo borrara los anteriores.
2
Se asignan distintos colores a cada una de las gracas de forma automatica.
207
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


el estandar RGB
4
.
Por ejemplo
>>x=0.01:0.2:2; y=sin(x)./x;
>>plot(x,y,o-.,color,[0.2 0.4 0.6],linewidth,2,...
markeredgecolor,k,markerfacecolor,[0.9 0.6 0.4],...
markersize,9)
Ejercicio 10.2 Dibuja las funciones seno y coseno en [2, 2], la primera en rojo y la
segunda en azul. El ancho de lnea debe ser de dos puntos y deben seguir dos estilos diferentes,
a tu eleccion.
Puedes empaquetar las instrucciones en un chero script. Sera mas comodo para editar y
cambiar lo que desees.
La ventana graca
Las propiedades anteriores se pueden editar directamente en la ventana graca. Para
ello, hay que seleccionar edit plot (vease la Figura 10.3) y pulsar sobre la graca con
un doble click. Se desplegara una ventana adicional con varias pesta nas que informan y
permiten modicar las diferentes caractersticas del objeto. Si se procede igual sobre el
fondo de la pantalla controlaremos mas aspectos del propio entorno, como la escala, el ratio
entre el eje OX y OY, las marcas sobre los ejes..., aspectos que trataremos seguidamente.
No entraremos a explicar estos detalles en profundidad.

Este es un buen ejemplo
donde la prueba, la experimentacion y el ensayoerror permiten aprender mejor y mas
rapidamente que cualquier manual que podamos redactar.
La ventaja principal de trabajar a traves de comandos es que podemos dotar de un as-
pecto determinado a nuestros dibujos sin necesidad de retocarlos en cada paso y para cada
ejemplo. Esto es especialmente importante si necesitamos un n umero elevado de gracas
o bien necesitamos rehacerlas constantemente. En contrapartida deberemos manejar una
mayor galera de instrucciones.
Ejercicio 10.3 Ejecuta
>> t=linspace(-2*pi, 2*pi,200);
>> y1=cos(t);
>> y2=sin(t);
>> plot(t,y1,t,y2)
Desde la ventana graca modica su aspecto para que tenga el que le habas dado en el
Ejercicio 10.2.
4
Red, Green, Blue. Crea un color a nadiendo partes de rojo, verde y azul (de 0 a 1) especicado por
un vector de tres componentes.
209
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

ON V
Figura 10.3: Edicion de un dibujo.
210
B
o
r
r
a
d
o
r
LECCI

ON V Cap

tulo 10. Matlab: Salidas gracas en Matlab


10.1.2. Comandos asociados a plot
Hay una serie de comandos que controlan el entorno donde se despliega la graca.
Entre los mas elementales (o al menos, mas faciles de utilizar), podemos destacar:
clf: borra la ventana actual (gure) de gracos.
cla: borra el axes actual. El axes es la parte de la ventana utilizada para
dibujar. Una ventana puede contener varios axes (vease el comando
subplot tratado mas adelante).
hold: hold on permite que sucesivas gracas se vayan solapando; hold off
desconecta esta opcion (es la que esta por defecto).
axis: un comando algo complejo. Puede controlar entre otros detalles el ratio
entre los ejes OX y OY, la parte del dibujo que se muestra por pantalla,
las coordenadas utilizadas, el ajuste del marco al dibujo...
xlim, ylim: especican los lmites del dibujo. Se puedn utilizar para centrar el
dibujo.
grid: grid on muestra una malla en pantalla; grid off la desconecta.
legend: despliega una leyenda, esto es, un cuadro explicativo sobre las gracas
presentes.
text: a nade un texto en las coordenadas especicadas.
xlabel, ylabel: a nade ttulos (etiquetas) a los ejes OX y OY.
title: coloca un ttulo en la cabecera del dibujo.
whitebg: asigna un color al fondo del dibujo.
A modo de ejemplo, el siguiente conjunto de instrucciones (empaquetado en un chero
script) despliega las gracas mostradas en la Figura 10.4
figure(1) % desplegamos ventana 1
clf % borramos todo
x=linspace(0,5,100);
f=inline(exp(-n*x).*cos(x),n,x); % funciones vectorizadas
hold on % solapamiento de graficas
y=f(1/3,x);
plot(x,y,k--,linewidth,2)
y=f(1,x);
plot(x,y,r-.,linewidth,2)
y=f(3,x);
plot(x,y,:,color,[0.0,0.0,0.5],linewidth,2)
y=f(9,x);
211
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


Estos atributos estan disponibles para cualquier comando que se ocupe de desplegar
textos en la pantalla graca. Por ejemplo, xlabel, ylabel, title,...
Quizas lo mas difcil sea saber que fuentes tenemos instaladas y su correspondiente
nombre. La solucion mas sencilla a esta cuestion es ir a la venta graca, y editar las
caractersticas del dibujo
5
. All podremos ver que fuentes estan a nuestra disposicion y su
nombre correspondiente.
Ejercicio 10.4 En este ejercicio trataremos de visualizar el efecto del comando axis con
diferentes opciones sobre el aspecto nal de un dibujo.
Teclea
>> clf
>> x = 0:.025:pi/2; plot(x,tan(x),-ro)
La funcion tangente presenta una asntota vertical
6
en /2. Teclea los siguientes comandos y
observa el aspecto nal de la gura.
>> axis equal
>> axis image
>> axis normal % vuelta al formato original
>> axis([0 pi/2 0 5]) % especificamos el rango de salida
>> axis tight
Podras decir que hace cada comando?.
10.1.3. Comandos get y set
Los comandos get y set permiten acceder y cambiar los atributos de cualquier graca.
Todo objeto graco, desde una simple curva hasta la propia ventana donde se despliega
el dibujo tiene asociado un puntero, un handle al que se encuentra enlazado. Los valores
de cada uno de los parametros se pueden visualizar (get) y editar (set) desde la lnea de
comandos o desde una funcion.
Nos limitaremos de momento a dar unas ideas a grandes trazos para el comando plot.
Ejecuta
>> x=0:0.01:pi;
>> h=plot(x,x.*cos(4*x));
La variable h es un puntero que enlaza con el dibujo desplegado sobre la ventana. Ahora
se puede recabar informacion sobre este:
>> get(h,linestyle)
ans =
-
5
Seleccionar editar dibujo, doble click sobre el fondo, seleccionar la pesta na style e ir al men u desple-
gable font name
6
Tiende a innito.
213
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


Parent = [101.001]
Selected = off
SelectionHighlight = on
Tag =
Type = line
UIContextMenu = []
UserData = []
Visible = on
De forma similar
h= legend(x*cos(x));
devuelve en h, despues de desplegar la leyenda correspondiente en el dibujo, una variable
que permite a continuacion la manipulacion de muchas de sus propiedades. Para ello se
utiliza la instruccion set
>> set(h,fontsize,11,fontname,arial,fontangle,...
oblique,color,[0.8 0.8 0.8])
cambia alguno de los atributos de la leyenda, como la fuente y su tama no, la inclinacion
y el color de fondo.
Otro ejemplo lo da el siguiente codigo:
01 x=linspace(0,4,1000);
02 y=x.*log(x);
03 figure(1);
04 clf % borramos
05 plot(x,y,--,linewidth,3);
06 h2=gca; % accedemos al handle de la grafica
07 set(h2,xtick,[0 0.25 0.5 1 2 4],fontsize,16,ygrid,...
08 off,xgrid,on,linewidth,2,gridlinestyle,-.)
09 title(x*log(x),fontangle,oblique,fontname,...
10 Comic Sans ms ,fontweight,bold,fontsize,20)
que accede a la estructura de la graca (gca), que esencialmente es el marco donde des-
plegamos los dibujos. Las lneas 07-08 edita los atributos xtick, que se nala los puntos
donde se colocan las marcas en el eje OX, la fuente utilizada en el dibujo, activa la malla
unicamente en la direccion OX, especica la anchura de la lnes y el patron que sigue. El
resultado se puede ver en la Figura 10.5.
Todas las propiedades anteriores se pueden modicar mas facilmente en la ventana
graca. Su manejo es facil e intuitivo (seleccionar, doble click, boton derecho del raton....).
Con helpwin line y helpwin axes obtenemos la informacion de las diferentes op-
ciones para la instruccion plot (y similares) y para la gura.
Finalmente gca y gcf devuelven el puntero al axis y gure utilizado en ese momento
(get current axis y get current gure). Si quieres ver todos sus atributos, ejecuta
>> get(gca), get(gcf)
215
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


10.1.4. El comando subplot
Este comando permite la visualizacion de diferentes subventanas gracas (axes) en
una misma ventana. A modo de ejemplo,
subplot(231)
dene en la gure seis zonas para volcar las salidas gracas dispuestas en 2 3 (dos las,
tres columnas) y accede a la primera de ellas. La numeracion es la desplegada en la gura
10.6.
1 2 3
4 5 6
Figura 10.6: Ejemplo de numeracion con subplot.
Por ejemplo, las instrucciones
x=linspace(0,2*pi,150);
subplot(321)
plot(x,sin(x),linewidth,2);
title(sin(x),fontsize,14)
axis tight
subplot(322)
plot(x,cos(x),linewidth,2);
title(cos(x),fontsize,14)
axis tight
subplot(323)
plot(x,sin(2*x),linewidth,2);
title(sin(2x),fontsize,14)
axis tight
subplot(324)
plot(x,cos(2*x),linewidth,2);
title(cos(2x),fontsize,14)
axis tight
217
B
o
r
r
a
d
o
r
10.1 Dibujos bidimensionales LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


0 2 4 6
-0.5
0
0.5
sin(x)
0 2 4 6
-0.5
0
0.5
1
cos(x)
0 2 4 6
-0.5
0
0.5
sin(2x)
0 2 4 6
-0.5
0
0.5
1
cos(2x)
0 2 4 6
-0.5
0
0.5
sin(4x)
0 2 4 6
-0.5
0
0.5
1
cos(4x)
Figura 10.7: Disposicion simultanea de gracas con subplot.
ezplot ezpolar
La ayuda de Matlab es, en nuestra opinion, suciente para hacernos con su manejo.
10.2. Gracas en 3D
Comenzaremos con curvas en el espacio para pasar y tratar con mayor profundidad
las supercies en 3D. Hemos decidido incluir en este apartado las instrucciones relativas
a curvas de nivel aunque hablando propiamente son dibujos bidimensionales. Su origen y
su posterior interpretacion nos conducen de nuevo al entorno espacial.
10.2.1. El comando plot3
Este comando sirve, grosso modo, para dibujar curvas en el espacio. Su manejo es muy
similar a plot, por lo que no nos detendremos demasiado en su explicacion.

Esta es su
sintaxis
plot3(x,y,z,opciones)
Las opciones son esencialmente las mismas que aparecan en plot. He aqu un ejemplo
sencillo
219
B
o
r
r
a
d
o
r
10.2 Gracas en 3D LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


Figura 10.9: Icono para rotar los dibujos.
10.2.2. El comando surf
Primer nivel
El comando surf dibuja esencialmente supercies en el espacio. En su forma mas
simple se puede identicar con el dibujo de funciones de dos variables en el espacio. En
este caso, el formato es
surf(x,y,z)
donde x e y especican una malla en el plano y z la altura correspondiente. El color que
se da a cada punto esta asignado por defecto seg un la altura en el eje Z.
Queda pendiente, no obstante, como construir una malla. Aunque se puede hacer a
mano (Matlab ofrece en su ayuda informacion detallada de como hacerlo), es mejor utilizar
los comandos propios de Matlab, en este caso, meshgrid. As, si queremos representar una
supercie z = f(x, y) en un dominio rectangular utilizando los puntos de coordenadas
x = (x
1
, . . . , x
n
) e y = (y
1
, . . . , y
m
), deberemos generar primero la malla formada por los
puntos (x
i
, y
j
). En Matlab simplemente tenemos que utilizar la orden
[X,Y]=meshgrid(x,y)
que crea las matrices de tama no mn
X =
_

_
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

tulo 10. Matlab: Salidas gracas en Matlab


Figura 10.11: Otro ejemplo de surf.
despliega la graca de la Figura 10.11. El comando colorbar muestra la barra de colores
de la derecha que informa sobre el valor numerico que corresponde a cada color.
Tambien es posible dibujar supercies denidas sobre partes de un rectangulo. Para
ello, cualquier punto cuya coordenada z sea un nan (not a number), no se dibuja. Por
ejemplo
>> x=linspace(-1,1,101); y=x;
>> [X,Y]=meshgrid(x,y);
>> Z=-X.^2-Y.^2;
>> Z(sqrt(X.^2+Y.^2)<0.5)=nan;
>> surf(X,Y,Z)
despliega la supercie de la Figura 10.12). La cuarta lnea merece un comentario aunque
instrucciones parecidas han sido tratadas ya en la Leccion 1. Al hacer la comparacion
sqrt(X.^2+Y.^2)<0.5, Matlab devuelve una matriz logica, de 1s y 0s seg un el punto
correspondiente este cerca del cero o no. La instruccion Z(sqrt(X.^2+Y.^2)<0.5)=NaN,
hace que los puntos situados dentro del crculo de radio 1/

2 (que es donde la expresion


logica es 1), tomen como valor NaN. De todos modos se observa la deciente aproximacion
de los cuadrados, propios de surf, del crculo interior. Al nal de esta leccion veremos
una forma mas elaborada para trabajar con supercies denidas sobre conjuntos mas
generales.
Comandos del entorno 3D
Nos limitaremos a hablar de cinco comandos que controlan las propiedades del entorno
3D, aunque estos no son los unicos disponibles en Matlab:
223
B
o
r
r
a
d
o
r
10.2 Gracas en 3D LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


pbaspect: similar al anterior pero relacionado con la caja que enmarca el dibujo.
view: especica el punto desde el que se ve el dibujo. Tiene dos parametros:
view(az,el)
El primero es el azimuth (angulo de rotacion horizontal) y el segundo
es el angulo de elevacion vertical. Ambos deben especicarse en grados.
Por defecto en dibujos tridimensionales az = 37.5 y el = 30.
El comando surf: segundo y tercer nivel
En un segundo nivel de utilizacion del comando anterior podemos acceder a algunas
opciones adicionales entre las que podramos destacar:
7
EdgeAlpha: se especica un valor entre 0 y 1 que dene la transparencia que
tiene la rejilla o red en el dibujo (con 0 la red es transparente
y por tanto no se ve).
FaceAlpha: como la opcion anterior pero relativa a las caras.
LineStyle: indica el formato de la rejilla: -, --, :,.... Igual que en
plot. Con none desaparece del dibujo.
MeshStyle tiene tres opciones posibles both (por defecto), row y column.
Especica como despliega la red: entera, solo las las o solo
columnas, respectivamente.
EdgeColor: toma cuatro posible valores: un color (en el formato habitual),
none, flat, interp. Especica que color utilizar en la
rejilla. Por defecto es negro, pero se puede eliminar la rejilla
(none), se puede utilizar el color marcado por el primer verti-
ce (flat) o bien utilizar un color denido por los colores de
los dos vertices de cada eje (interp).
FaceColor: con los mismos valores que en la opcion anterior. La opcion
interp ja un color interpolado sobre la cara, eliminan-
do as el aspecto de mosaico que en ocasiones adoptan las
supercies.
LineWidth: anchura de las lneas utilizadas en el dibujo de la red.
Marker: indica que marca colocar en cada punto del dibujo. Sigue el mis-
mo formato que plot (por defecto no coloca ninguna marca).
MarkerEdgeColor
MarkerFaceColor
MarkerSize
: igual que en plot.
Por ejemplo, la Figura 10.13 se obtiene con
7
siempre a nuestro juicio...
225
B
o
r
r
a
d
o
r
10.2 Gracas en 3D LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


En un tercer nivel de dicultad (y de precision), se puede manipular el dibujo va el
handle que devuelve, de forma similar a como hacamos en plot. Como ejemplo ilustrativo,
>> x1=linspace(-2,2,60); y1=linspace(-2,2,60);
>> [X1,Y1]=meshgrid(x1,y1);
>> h=surf(X1,Y1,exp(-X1.^2-Y1.^2).*cos(pi*(X1.^2-Y1.^2)/2),...
facecolor,interp,edgecolor,none);
devuelve en h, despues de dibujar, un puntero al dibujo. Podemos leer una propiedad
determinada mediante get:
>> get(h,facecolor)
ans =
interp
o bien ver todas con
>> get(h)
AlphaData = [1]
AlphaDataMapping = scaled
CData = [ (60 by 60) double array]
CDataMapping = scaled
EdgeAlpha = [1]
EdgeColor = none
EraseMode = normal
FaceAlpha = [1]
FaceColor = interp
LineStyle = -
LineWidth = [0.5]
Marker = none
MarkerEdgeColor = auto
MarkerFaceColor = none
MarkerSize = [6]
MeshStyle = both
XData = [ (60 by 60) double array]
YData = [ (60 by 60) double array]
ZData = [ (60 by 60) double array]
FaceLighting = flat
EdgeLighting = none
................
................
Observaramos as algunas de las opciones que hemos comentado y otras muchas mas que
no hemos estudiado.
Para cambiar una propiedad utilizamos de nuevo el comando set:
>> set(h, edgecolor,[0.2 0 0],linewidth,1);
>> set(h, facaalpha,.5);
227
B
o
r
r
a
d
o
r
10.2 Gracas en 3D LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


>> cylinder(0:0.1:1,40)
dibuja un cono.
Ejercicio 10.6 Lee bien la ayuda de cylinder. Podras dibujar una semiesfera utilizando
este comando?.
10.2.3. Otros comandos
Comentaremos a continuacion otras instrucciones relacionadas con gracas de objetos
tridimensionales.
pcolor
Proporciona un dibujo bidimensional de una supercie vista desde arriba. Es equiva-
lente a dibujar primero la supercie con la orden surf y posteriormente cambiar el punto
de vista mediante view(0,90). Puedes ver un ejemplo en la Figura 10.15.
Figura 10.15: Una supercie con surf y pcolor.
contour y contourf
Despliegan las lneas de nivel del dibujo. Propiamente generan una graca en 2D. La
diferencia entre ellas es que la primera instruccion solo traza las curvas de nivel mientras
que la segunda colorea el espacio entre ellas.
Es posible a nadir un texto sobre cada lnea de nivel utilizando clabel. Para ello basta
hacer como en el ejemplo siguiente
229
B
o
r
r
a
d
o
r
10.2 Gracas en 3D LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


como mesh pero a nade un efecto de caida en los bordes del dibujo
8
.
10.2.4. Comandos faciles de usar
Los comandos
ezplot3 ezmesh ezmeshc ezsurf ezsurfc
ezcontour ezcontourf
permiten trazar, de forma muy sencilla, curvas y supercies en el espacio. Su sencillez de
uso (consulta la ayuda) queda lastrada con el inconveniente de que apenas se tiene control
sobre el aspecto nal.
10.3. Campos vectoriales
Los comandos quiver y quiver3 despliegan en 2D y 3D campos de velocidades. Esto
es, a cada punto se le asigna un vector y se dibuja.
-2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
Figura 10.17: Campo de velocidades con quiver
Por ejemplo, la Figura 10.17 se ha obtenido con
>>x=-2:0.25:2; y=x;
>>[X,Y]=meshgrid(x,y); % malla del cuadrado [-2,2] x [-2,2]
>>ind=logical(zeros(size(X))); % matriz logica de dimensi\{o}n la de X
>>ind(X.^2+Y.^2<0.5^2)=1; % si (x,y) esta cerca de (0,0) vale 1
>>X(ind)=[]; Y(ind)=[]; % eliminamos estos puntos
8
Es mas facil verlo que explicarlo...
231
B
o
r
r
a
d
o
r
10.4 Dibujos sobre dominios mallados en triangulos LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


Figura 10.18: Triangulacion no conforme.
se admite que un lado de un triangulo pueda ser parte de dos lados de dos triangulos
diferentes (vease la Figura 10.18). Por otro lado, una familia de triangulaciones se dice
regular si los triangulos no se aplanan, es decir, los angulos de los triangulos no se hacen
muy peque nos.
La siguiente cuestion es como almacenar la informacion de una triangulacion. Si
optaramos por guardar cada triangulo, con sus correspondientes vertices, guardaramos
informacion redundante. Por ejemplo, un vertice compartido por 6 triangulos sera alma-
cenado 6 veces.
En lugar de ello se opta por una estructura mas elaborada pero mas economica. Se
empieza almacenando las dos coordenadas de los vertices en dos vectores que denotaremos
por x e y. En segundo lugar, apuntamos los vertices que corresponden a cada triangulo.
Esto se hace mediante una matriz, que llamaremos en lo que sigue t, de tres columnas y
n umero de las igual al n umero de triangulos. Para saber los vertices que corresponden
al triangulo i basta leer la correspondiente la de t y sus coordenadas seran
[x(t(i,1)),y(t(i,1))], [x(t(i,2)),y(t(i,2))], [x(t(i,3)),y(t(i,3))]
A modo de ejemplo, el mallado expuesto en la Figura 10.19 se guarda en las siguientes
variables
Triangulos
8 3 16
7 2 15
9 5 21
11 6 20
10 1 14
12 4 17
16 9 21
4 8 17
1 7 14
15 11 20
233
B
o
r
r
a
d
o
r
10.4 Dibujos sobre dominios mallados en triangulos LECCI

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

tulo 10. Matlab: Salidas gracas en Matlab


0.5033 -0.3584
0.5033 0.2378
-0.4967 -0.3584
-0.4967 0.2378
0.0033 -0.4603
0.0033 0.3397
0.5033 -0.0603
-0.4967 -0.0603
-0.2523 -0.4363
0.2590 -0.4363
0.2590 0.3157
-0.2523 0.3157
-0.0716 -0.1050
0.2924 -0.1866
0.2820 0.0614
-0.2806 -0.1991
-0.2641 0.0537
0.1204 -0.0707
0.0838 -0.2577
0.0113 0.1306
-0.1031 -0.2912
La informacion anterior es suciente para construir la malla, la triangulacion del domi-
nio. Si ademas se desea construir una supercie denida sobre ese dominio, basta a nadir
un vector adicional z de forma que z(j) sea el valor de la funcion en el nodo j.
Figura 10.20: Un dominio mallado en triangulos.
235
B
o
r
r
a
d
o
r
10.4 Dibujos sobre dominios mallados en triangulos LECCI

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

tulo 11. Interpolacion. Curvas Bezier


un polinomio de grado n. Obviamente, p
n
cuenta con n + 1 parametros libres que son
simplemente sus coecientes a
j
. Si exigimos que
p
n
(x
j
) = y
j
, j = 0, . . . , n,
nos encontramos con que los coecientes satisfacen el sistema lineal
_

_
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

Hemos testado el programa anterior para interpolar la funcion exp(sen(6x)) en [0, ]


en diversos puntos uniformemente distribuidos (a igual distancia). El resultado, junto con
el error cometido se muestra en la Figura 11.2.
Ejercicio 11.2 Implementa la construccion del polinomio de interpolacion mediante la re-
solucion directa del sistema dado en (11.1). Que observas cuando el grado del polinomio
crece?.
11.1.3. Formula de Newton
Es facil comprobar que la formula de Lagrange tiene un costo computacional elevado.
Por ello es necesario explorar formas alternativas de construir el polinomio de interpolacion
y de proceder a su evaluacion.
2
Observa el for de la lnea 20
240
B
o
r
r
a
d
o
r
LECCI

ON V Cap

tulo 11. Interpolacion. Curvas Bezier


0 0.5 1 1.5 2 2.5 3 3.5
-1
-0.5
0
0.5
1
1.5
2
0 0.5 1 1.5 2 2.5 3 3.5
-1.5
-1
-0.5
0
0.5
1
1.5
Error
polinomio de grado 5
polinomio de grado 9
polinomio de grado 13
exp(-x).*sin(6.*x)
polinomio de grado 5
polinomio de grado 9
polinomio de grado 13
Figura 11.2: Polinomios de interpolacion con diferentes grados y el error cometido.
Observa que la formula de Lagrange se basa en tomar como base de P
n
la dada por
L
0
(x), L
1
(x), . . . , L
n
(x).
En esta base, las coordenadas del polinomio de interpolacion son simplemente los valores
que toma la funcion en los puntos donde se interpola. Es decir, no es necesario resolver
ning un sistema de ecuaciones lineales (la matriz del sistema sera la matriz identidad).
El precio que se paga como contrapartida es una evaluacion mas cara del polinomio de
interpolacion.
Podemos explorar otras bases que, aumentando el costo de la resolucion del sistema,
ofrezcan formulas del polinomio de interpolacion cuya evaluacion sea menos costosa.
Planteamos as utilizar la base
1, (x x
0
), (x x
1
)(x x
0
), . . . , (x x
n1
)(x x
n2
) (x x
0
).
Es inmediato probar que es una base de los polinomios de grado n. Dicho de otra forma,
cualquier polinomio de grado n se puede escribir (de forma unica) como

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

tulo 11. Interpolacion. Curvas Bezier


Como
f[x
j
] = f(x
j
)
(simplemente porque el polinomio de grado 0 que pasa por (x
j
, f(x
j
)) es la constante
f(x
j
)), obtenemos una forma recursiva de calcular los coecientes del polinomio de in-
terpolacion. El algoritmo resultante se puede representar esquematicamente mediante el
diagrama de la Figura 11.3.
En la literatura, f[x
k
, . . . , x
k+r
] recibe el nombre de diferencia dividida de order
r, mientras que la forma de escribir el polinomio expuesta en (11.2) y (11.5) recibe el
nombre de formula de Newton
3
.
Obviamente, a partir de la formula de Newton podemos expresar el polinomio que
interpola a f en los puntos x
0
, . . . , x
n
en la forma
f[x
0
] + (x x
0
)
_
f[x
0
, x
1
] + (x x
1
)
_
f[x
0
, x
1
, x
2
] + (x x
2
)
_
. . .
+(x x
n1
)f[x
0
, x
1
, . . . , x
n
]
___
, (11.8)
que es mucho mas apropiada desde el punto de vista computacional que la forma clasica.
En forma de pseudocodigo podemos proceder del siguiente modo para evaluar el poli-
nomio de interpolacion utilizando la formula de Newton:
Diferencias divididas
01 x
0
, y
0
% datos
02 n = length(x
0
) 1
03 D(:, 0) = y
0
;
04 for j=1:n
05 for i=0:n-j
06 D(i, j) =
D(i + 1, j 1) D(i, j 1)
x
0
(i + j) x
0
(i)
07 end
08 end
09
10 % Evaluacion del polinomio
11 y=D(0,n)
12 for i=n-1:-1:0
13 y = (x x
0
(i)) y + D(0, i)
14 end
Con la notacion anterior
D(i, j) = f[x
i
, x
i+1
, . . . , x
i+j
]
de forma que j es el orden de la diferencia e i el nodo donde empieza.
3
De nuevo los nombres utilizados dan idea de la antig uedad de estas tecnicas. Newton hallo esta forma
de escribir el polinomio cuando estudiaba las formulas de cuadratura de Newton-Cotes.
243
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI

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

tulo 11. Interpolacion. Curvas Bezier


14 return
15 end
16 if nargin>2
17 x=varargin{1}; % evaluamos x
18 else
19 syms x; % x es una variable simbolica
20 end
21 % calculo de las diferencias divididas
22 D=zeros(n+1); % matriz n+1 x n+1 de ceros
23 D(:,1)=y0.;
24 for j=2:n+1
25 for i=1:n-j+2
26 D(i,j)=(D(i+1,j-1)-D(i,j-1))/(x0(i+j-1)-x0(i));
27 end
28 end
29 % evaluacion del polinomio
30 D=D(1,:); % tomamos las diferencias que vamos a usar
31 y=x.^0.*D(n+1); % asi y tiene la longitud de x
32 for i=n:-1:1
33 y=(x-x0(i)).*y+D(i);
34 end
35 return

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

tulo 11. Interpolacion. Curvas Bezier


Ejercicio 11.8 Interpola la funcion cos(8x) en [0, 1] con 20,40, 80 y 160 puntos utilizando
el comando polyfit y las funciones lagrangep y newtonp y dibuja el resultado. Que obser-
vas?.
11.1.4. Analisis del error de interpolacion
El error entre la funcion y el polinomio de interpolacion se puede estudiar utilizando
algunas propiedades de las diferencias divididas que detallaremos mas adelante. En cual-
quier caso, el resultado relevante es el siguiente: si f es la funcion regular que interpolamos
en x
0
, x
1
, . . . , x
n
[a, b], entonces el error en cada punto se puede escribir
f(x) p
n
(x) =
1
(n + 1)!
f
(n+1)
(
x
) (x x
0
)(x x
1
) (x x
n
)
. .

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

tulo 11. Interpolacion. Curvas Bezier


de forma que
n
(x) 0 cuando n (ademas esta convergencia es rapida). En la
Figura 11.5 observamos como ahora el polinomio interpolante para el ejemplo de Runge
converge a la funcion.
-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.5: Ejemplo de Runge con otros nodos.
Ejercicio 11.9 Elege un intervalo arbitrario [a, b] y crea un chero script que muestre la
disposicion de los puntos dados por (11.11). Dibuja los puntos obtenidos para diferentes
valores de n. Dibuja tambien el polinomio
n
(x). A que funcion te recuerda?.
Ejercicio 11.10 (teorico) Se trata de probar una serie de propiedades de las diferencias
divididas de las que nalmente se deduce la estimacion del error del polinomio de interpolacion
dada en (11.10).
(1) Prueba que f
(j)
(x) p
(j)
(x) se anula en n + 1 j puntos para j = 0, . . . , n + 1.
(2) Utilizando (1), prueba que existe tal que
f[x
0
, . . . , x
n
] =
f
(n)
()
n!
.
(3) Fijemos y [a, b]. Entonces
f(x) = p
n
(y) + f[x
0
, . . . , x
n
, y](x x
0
)(x x
1
) (x x
n
).
Utiliza ahora (2) para probar la estimacion del error dada en (11.10).
249
B
o
r
r
a
d
o
r
11.2 Extensiones adicionales LECCI

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

tulo 11. Interpolacion. Curvas Bezier


y el polinomio de interpolacion se construye exactamente como antes, es decir, utilizando
la formula (11.8) con las nuevas deniciones de los nodos y de las diferencias divididas.
El calculo de las diferencias y la evaluacion del polinomio en un punto en el caso de
la interpolacion de Hermite puede describirse en lenguaje de pseudocodigo de la siguiente
forma:
Diferencias divididas para la interpolacion Hermite
01 x
0
, y
0
datos
02 n = length(x
0
) 1
03 D = y
0
;
04 for j=1:n
05 for i=n:-1:j
06 if x
0
(i) == x
0
(i j)
07 D(i) = D(i)/j
08 else
09 D(i) =
D(i) D(i 1)
x
0
(i) x
0
(i j)
10 end
11 end
12 end
13
14 % Evaluacion del polinomio
15 y=D(n);
16 for i=n-1:-1:0
17 y = (x x
0
(i)) y + D(i)
18 end
En este algoritmo la tabla de diferencias divididas se almacena de forma compacta,
como se sugirio en el Ejercicio 11.5. Observa que desde el punto de vista computacional
las diferencias con respecto a la interpolacion de Lagrange son mnimas.
Ejercicio 11.11 Entiende bien el algoritmo anterior. Implementa la interpolacion de Hermite
seg un el siguiente prototipo
01 HERMITEP
02
03 Y=HERMITEP(X0,Y0) Devuelve en Y el polinomio de interpolacion de
04 Hermite X0 debe estar ordenados. Los nodos
05 repetidos se interpretan como derivadas sucesivas
06 en ese punto
07
08 Y=HERMITE(X0,Y0,X) Devuelve en Y la evaluacion del polinomio en X
Observa que, una vez implementada esta funcion,
>> x0=[0 0 0 0 0 0]; y0=[1 1 1 1 1 1];
>> p=hermitep(x0,y0)
251
B
o
r
r
a
d
o
r
11.2 Extensiones adicionales LECCI

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

tulo 11. Interpolacion. Curvas Bezier


Nota. El interpolante converge a la funcion bajo hipotesis mucho mas debiles que en
el caso no periodico. Por ejemplo, basta con que la funcion tenga derivada continua. No
existen por tanto fenomenos como el de Runge para funciones periodicas con condiciones
mnimas de regularidad.
11.2.3. Interpolacion polinomica a trozos
Los polinomios tienen un importante inconveniente que desaconseja su utilizacion para
la interpolacion en un n umero elevado de puntos. La Figura 11.6 ilustra esta problemati-
ca con un problema de interpolacion para el que el polinomio correspondiente exhibe
un comportamiento ciertamente irracional. Ello se debe a que se obliga a que el polino-
mio sea practicamente constante en dos zonas con un salto en medio. El polinomio es
excesivamente rgido
11
que en ultima medida provoca que este se rompa.
0 0.2 0.4 0.6 0.8 1
-0.5
0
0.5
1
1.5
2
Figura 11.6: Rigidez polinomica
Como forma de solventar estos problemas se opta por utilizar elementos mas compli-
cados pero que sean mas exibles.
Uno de los elementos mas populares son los splines. Un spline
12
es una funcion po-
linomica a trozos que cuenta con cierta regularidad. Es decir, diferentes polinomios sobre
diferentes subintervalos se unen exigiendo ademas que la funcion resultante sea continua
y derivable hasta cierto orden. Los representantes mas sencillos son las constantes a tro-
zos y las poligonales. En este ultimo caso, se trata sencillamente de unir los puntos por
11
Es un smil con lo que sucede si se dobla una vara muy rgida. El problema al utilizar polinomios es
que basta modicar un solo dato para que el polinomio se cambie en todo el dominio, en muchas ocasiones
sin ning un control. Sin embargo, en un interpolante uno debera esperar que la modicacion de un punto
afectara solo al entorno de dicho punto.
12
aceptaremos el anglicismo a partir de ahora.
253
B
o
r
r
a
d
o
r
11.2 Extensiones adicionales LECCI

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

tulo 11. Interpolacion. Curvas Bezier


Nota. Los splines tienen un origen muy natural. Exista una herramienta de dibujo,
ya anticuada, que reciba el nombre de spline, o trazador en castellano. Consista en
una especie de regla hecha de un material exible que se moldeaba para hacer coincidir
el trazado por una serie de puntos. La curva as trazada es fsicamente equivalente a
resolver el problema de construir una curva que pase por una serie de puntos y que
minimice la energa elastica. La solucion matematica a este problema es un spline natural
(polinomio c ubico a trozos con derivada segunda nula en los extremos) lo que justica su
denominacion.
Se pueden denir splines de mayor grado, siguiendo exactamente la idea anterior, esto
es, pegando polinomios a trozos y dando la mayor regularidad posible.
Splines en Matlab
Matlab dispone de dos comandos encargados de esta tarea:
ppval spline
El primero (piecewise polynomial value) eval ua una funcion polinomica a trozos. Uno
de sus argumentos es la propia estructura de la funcion seg un una sintaxis propia de
Matlab. La segunda instruccion devuelve una estructura de este tipo que contiene el spline
que interpola a datos.
A modo de ejemplo, he aqu el spline natural que interpola a los datos desplegados en
la Figura 11.7
14
>> x0=linspace(0,1,21);
>> y0=[zeros(1,6) ones(1,15)];
>> p1=spline(x0,y0); % spline natural
>> x=linspace(0,1,200);
>> h=plot(x0,y0,o,x,ppval(p1,x),r,linewidth,2);
Por otro lado Matlab tiene implementada una serie de funciones para trabajar con
splines mas generales en una toolbox. Al ejecutar splinetool podemos acceder a un
entorno graco donde testar las capacidades de Matlab en este campo.
Ejercicio 11.14 Se plantea el siguiente problema: dada una serie de puntos en el plano
_
(x
0
, y
0
), (x
1
, y
1
), . . . , (x
n
, y
n
)
_
construir una curva en parametricas
x(t) := (x(t), y(t)), t [0, T] (11.12)
tal que
x(t
j
) = (x
j
, y
j
). (11.13)
Una buena eleccion es utilizar splines. Para ello se trata de calcular dos splines cx(t) y cy(t)
que satisfagan, obviamente,
cx(t
j
) = x
j
, cy(t
j
) = y
j
.
14
Los splines siguen conservando cierta rigidez pero se adaptan mucho mejor a los datos.
255
B
o
r
r
a
d
o
r
11.2 Extensiones adicionales LECCI

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

tulo 11. Interpolacion. Curvas Bezier


Ayuda. Deduce que realiza el siguiente codigo...
x0=[]; y0=[]; n=length(x0);
salir=0;
cla
xlim([0,1]); ylim([0,1])
while salir==0
[xi,yi,b]=ginput(1);
if b==3 % boton derecho del raton
cla
if n>0 % borramos el ultimo punto
x0(n)=[]; y0(n)=[];
plot(x0,y0,ro)
xlim([0,1]); ylim([0,1])
n=n-1;
end
elseif isempty(b) % Se ha pulsado return: finalizamos lectura
salir=1;
elseif b==2 % boton central: finalizamos la lectura
salir=1
else % introducimos el punto
x0=[x0 xi]; y0=[y0 yi];
plot(x0,y0,o)
n=n+1;
axis([0 1 0 1])
end
end
Nota. El comando gtext es similar a ginput. Despliega un texto en el punto seleccio-
nado con el raton.
11.3. Curvas Bezier
Las curvas Bezier son curvas en el plano que quedan determinadas por un conjunto
de puntos que marcan su recorrido, aunque estas curvas no pasan necesariamente por
todos los puntos.

Estos forman un polgono de control en el siguiente sentido: la curva
esta contenida en el polgono formado por esos puntos e imita con cierta libertad la
poligonal que dibujan.
La curva se construye utilizando los polinomios de Bernstein de orden n:
B
n
j
(t) =
_
n
j
_
t
j
(1 t)
nj
, j = 0, 1, . . . , n.
Es un simple ejercicio comprobar que los polinomios cumplen las siguientes propiedades:
B
n
j

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

tulo 11. Interpolacion. Curvas Bezier


Ejercicio 11.16 Utilizando el codigo mostrado en el Ejercicio 11.15, programa las curvas
Bezier. Compara con las curvas que denen la interpolacion por splines y la polinomica.
Ejercicio 11.17 Implementa la siguiente extension del programa anterior: permitir que el
usuario seleccione puntos y pueda moverlos o borrarlos (por ejemplo, con el boton derecho del
raton) y as comprobar la sensibilidad de la curva al polgono de control.
Una sugerencia: una vez ledos los puntos, y dibujada la correspondiente curva nos situamos
de nuevo en la ventana graca con ginput y leemos la seleccion hecha por el raton. Ahora
hay tres opciones
Si pulsamos cerca de un punto, entendemos que hemos seleccionado dicho punto.
Si se ha pulsado con el boton derecho lo eliminamos del dibujo, redibujamos la
curva y esperamos de nuevo.
Si pulsamos cerca de un punto con el boton izquierdo entendemos que vamos a
mover ese punto. Esperamos otra seleccion del raton (otro ginput), reemplazamos
el punto seleccionado por el nuevo y redibujamos.
Si pulsamos lejos de todos los puntos, entendemos que a nadimos un nuevo punto.
Llamemoslo y. En este punto hay un tema no trivial: como ordenamos el nuevo punto
y respecto a los puntos anteriores x
j
.
y
x
x
j+1
j

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

Indice de comandos de Matlab


[], 30
%, 10
|, 32
&, 32
, 57
., 58
./, 24
/, 24
<, 32
<=, 32
==, 32
>, 32
>=, 32
@, 110
\, 24
\., 24
~=, 32
:
def. de vectores, 27
seleccion de submatrices, 28
abs, 13
acos, 15
acosh, 15
acot, 15
acsc, 15
angle, 13
ans, 11
area, 218
asec, 15
asin, 15
asinh, 15
atan, 15
atanh, 15
axis, 211, 213
bar, 218
bar3, 218
barh, 218
blkdiag, 57
break, 31
ButtonDownFcn, 216
celldisp, 167
chol, 49
cholinc, 100
cla, 211
clabel, 230
clear, 18
clf, 211
collect, 161
colorbar, 223
colormap, 223
cond, 63
continue, 31
contour, 229
contourf, 229
conv, 150, 155
cos, 10, 15
cosh, 15
cot, 15
csc, 15
cylinder, 228
daspect, 223
dblquad, 132
dct, 147
deconv, 155
det, 24
diag, 55
dot, 60, 63
dsolve, 161
dst, 147
edit, 19
eig, 193
eigs, 193
ellipsoid, 228
269
B
o
r
r
a
d
o
r
else, 33
elseif, 34
end
con for, 30
con if, 33
con while, 35
en arrays, 35
eps, 20
exp, 15
expand, 161
eye, 26
ezcontour, 231
ezcontourf, 231
ezmesh, 231
ezmeshc, 231
ezplot, 218
ezplot3, 231
ezpolar, 218
ezsurf, 231
ezsurfc, 231
factor, 161
factorial, 111
feval, 109
fft, 147
figure, 207
fill, 218
fontangle, 212
fontname, 212
fontsize, 212
fontweight, 212
for, 30
format, 12
fourier, 160
full, 65
function, 20
gca, 215
gcf, 215
get, 213
ginput, 256
grid, 211
gtext, 257
help, 14
helpwin, 14
hess, 193
hilb, 26
hold, 207
i,j, 13
idct, 147
idst, 147
if, 33
ifft, 147
ifourier, 160
ilaplace, 160
inf, 12
initmesh, 236
inline, 107
input, 110
inv, 24
invhilb, 26
isempty, 91, 174
laplace, 160
legend, 211
length, 25
limit, 160
line, 218
linspace, 27
load, 18
log, 15
log10, 10, 15
log2, 15
logical, 33
loglog, 218
lookfor, 14
lu, 49
maple, 162
max, 42, 61
mesh, 230
meshc, 230
meshgrid, 221
meshz, 230
mhelp, 162
min, 61
mldivide, 25
mod, 146
mrdivide, 25
NaN, 12
en dibujos, 223
270
B
o
r
r
a
d
o
r
nargin, 66
nargout, 66
nnz, 65
norm, 62
num2str, 149
ones, 26
pascal, 26
patch, 218
pbaspect, 223
pcg, 100
pcolor, 229
pdetool, 236
pi, 12
plot, 110, 205
color, 208
LineWidth, 208
Marker, 208
MarkerEdgeColor, 208
MarkerFaceColor, 208
MarkerSize, 208
plot3, 219
plotyy, 218
polar, 218
poly, 157
polyder, 161
polyfit, 246
polyint, 161
polyval, 156
power, 15
ppval, 255
profile, 181
qr, 49, 188
quad, 132
quadl, 132
quiver, 231
quiver3, 231
rank, 63
rcond, 63
realmax, 20
realmin, 20
refinemesh, 236
reshape, 60
return, 20
roots, 157
rotate, 212
save, 18
schur, 191
sec, 15
semilogx, 218
semilogy, 91, 218
set, 213
sign, 15
simple, 161
simplify, 161
sin, 10, 14, 15
sinh, 15
size, 25
solve, 161
spalloc, 65
sparse, 64
spdiags, 66
speye, 66
sphere, 228
spline, 255
splinetool, 255
spones, 66
sprand, 66
sprandn, 66
spy, 65
sqrt, 11
stairs, 218
stem, 218
str2num, 149
subplot, 217
sum, 61
surf, 221
EdgeAlpha, 225
EdgeColor, 225
FaceAlpha, 225
FaceColor, 225
LineStyle, 225
LineWidth, 225
Marker, 225
MarkerEdgeColor, 225
MarkerSize, 225
MeshStyle, 225
surfc, 230
surfl, 230
271
B
o
r
r
a
d
o
r
svd, 194
switch, 35
symamd, 72
symmmd, 70
symrcm, 70
symsum, 160
tan, 15
tanh, 15
taylor, 160
text, 211
tic, 183
title, 211
toc, 183
tril, 55
trimesh, 236
triplequad, 132
trisurf, 236
triu, 55
varargin, 66
varargout, 66
vectorize, 108
view, 223
vpa, 160
waterfall, 230
while, 35
whitebg, 211
who, 17
whos, 17
xlabel, 211
xlim, 211
ylabel, 211
ylim, 211
zeros, 23, 26
zlabel, 220
zlim, 220
272