Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Métodos Numéricos
Métodos Numéricos
ON I
Figura 2.1: Pantalla Principal.
Todos los comandos de Matlab se escriben en min usculas y los argumentos se envan
entre parentesis separados por comas.
El caracter % se utiliza para insertar comentarios. Todo lo que sigue (en la misma
lnea) es ignorado por Matlab.
Si se teclea al nal de una instruccion ; esta se ejecuta pero el resultado no se
visualiza por pantalla.
Dos comandos se pueden insertar en la misma lnea separados por , o por ;. La
diferencia entre los dos es que con , se muestran los resultados de las operaciones
mientras que con ; la operacion se ejecuta pero no se visualiza.
Ejercicio 2.1 Ejecuta las instrucciones
>> 4+4 % mi primera operacion
>> 3^4, 4/9
>> 3^4; 4/9
>> 3^4, 4/9;
>> 3^4; 4/9;
10
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
Por ejemplo
0.005 5e 3 115 10
12
115e12
1201200000 1.2012e009 0.00031415 3.1415e 004
Existen ademas dos n umeros especiales: inf y NaN. El primer signo representa la can-
tidad innita (). El segundo es una abreviatura de no es un n umero (Not a Number)
y es el resultado que se devuelve ante una operacion indenida como 0/0. Este smbolo
se puede utilizar en ambitos, en principio tan extra nos, como en el dibujo de supercies
(ver la Leccion V).
En general los resultados numericos se presentan con cuatro cifras decimales correctas,
aunque todas las operaciones se ejecutan en doble precision
1
. Si se desean las salidas con
toda la precision disponible se debe insertar la instruccion
>> format long
A partir de este punto, el resultado de cualquier operacion se mostrara con 16 cifras
signicativas. La instruccion
>> format short
devuelve a la forma estandar con cuatro cifras decimales. Existen mas opciones con format.
Las siguiente lneas muestran algunas de ellas:
>> pi % el numero pi
ans =
3.1416
>> format long % mayor precision
>> pi
ans =
3.14159265358979
>> format compact % compacto
>> pi
ans =
3.14159265358979
>> format bank %No fijo de cifras decimales
>> pi
ans =
3.14
1
Aproximadamente 16 cifras decimales correctas. En el momento de redactar estas lneas, los proce-
sadores de 32 bits dominan todava el parque de ordenadores. Las nuevas generaciones, con procesadores
con 64 bits, duplican la precision de trabajo.
12
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
34.00
ans =
-0.20
+
>> conj(3e-3+2e-4i) % conjugado
ans =
0.0030 - 0.0002i
>> abs(3+4i), angle(2i) % modulo y argumento
ans =
5
ans =
1.5708
2.2. Comandos de ayuda
La ayuda de Matlab es ciertamente muy clara y completa. Los comandos siempre
dispuestos a echarnos una mano son:
help: muestra una ayuda por pantalla, en la ventana de comandos, con la informa-
cion esencial sobre un comando concreto.
helpwin: similar a help pero despliega la ayuda en una ventana auxiliar, permitien-
do as una navegacion, estilo web, muy comoda.
lookfor: permite buscar una cadena en la primera lnea de todos los cheros de
ayuda.
Por ejemplo, si deseamos ayuda sobre la funcion sin, podemos ejecutar
>> help sin
SIN Sine.
SIN(X) is the sine of the elements of X.
Overloaded methods
help sym/sin.m
14
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
Figura 2.3: Ayuda con helpwin. Comprueba si aparece la opcion Go to online doc...
>> help +
se pueden ademas visualizar las operaciones elementales seg un Matlab.
2.3. Variables
Matlab no necesita la declaracion de variables como en un lenguaje tradicional. En prin-
cipio todas las variables son reales, y basta hacer uso de ellas para que queden declaradas:
>> a=1; b=2; c=3;
>> a-b
ans =
-1
>> a*b*c
ans =
16
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
>> a=4;
>> whos a
Name Size Bytes Class
a 1x1 8 double array
Grand total is 1 element using 8 bytes
>> clear a
>> whos a
>>
borra la variable (es decir, whos no devuelve nada). Con la orden
>> clear all
se borran todas las variables declaradas hasta el momento.
Nota. En Matlab es correcto declaraciones de este tipo
>> sin=1;
>> sin+1
ans=
2
De esta forma sin pasa a ser una variable que sobrescribe el valor original que tena como
funcion seno. Para recuperar el valor original basta ejecutar
>> clear sin
ON I Cap
ON I
>> edit mifuncion
En el editor puedes insertar este simple ejemplo:
01 % MIFUNCION
02 %
03 % Y=MIFUNCION(X) devuelve
04 %
05 % Y=X^2-COS(X)
06 %
07 function y=mifuncion(x)
08
09 y=x^2-cos(x);
10
11 return
La funcion se declara con function, la variable de entrada es x y se declara como variable
de salida y. Se termina la ejecucion de la funcion cuando se ejecuta un return o bien se
llega al nal de la funcion
6
.
Ahora, para calcular el valor de
2
cos() podemos ejecutar la orden:
>> mifuncion(pi)
ans =
10.8696
Nota. Los n umeros correlativos situados a la izquierda no forman parte del codigo
de la funcion. Han sido insertados con el n de numerar las lneas y as facilitar los
comentarios que podamos hacer sobre el programa.
Una funcion puede no tener salidas, por ejemplo,
01 % INFORMACION
02 %
03 % INFORMACION devuelve informacion sobre
04 % la precision de la maquina
05 %
06 function informacion
07
08 disp(precision de la maquina)
09 disp(eps)
10 disp (mayor numero real)
11 disp(realmax)
12 disp (menor numero real)
13 disp(realmin)
14 return
6
En este sentido, el return del ejemplo anterior es superuo.
20
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
Aunque muy recomendables
7
, su inclusion en una funcion es opcional. La ayuda puede
estar antes o despues de la declaracion de la funcion. En cualquiera de los dos casos,
Matlab despliega como ayuda todas las lneas que esten precedidas con % hasta que se
encuentra con la primera lnea no comentada.
Nota. Para ser consecuentes, lo correcto es denominar de igual modo a la funcion y
al archivo que la contiene. Sin embargo esto no es obligatorio, es decir, se pueden dar
nombres distintos, pero en este caso Matlab da preferencia al nombre del archivo.
Aunque Matlab distingue entre may usculas y min usculas en sus comandos, esto no es
extensible para funciones programadas en m-les, al menos en Windows. Es decir, para
ejecutar una funcion en un archivo, digamos, operaciones, se puede utilizar OPERACIONES,
Operaciones y cualquier combinacion con may usculas y min usculas. Esto es debido a que
el sistema de archivos de Windows tampoco hace esa distincion
8
. Versiones mas avanzadas
de Matlab, 7.0 en adelante, muestran sin embargo un aviso si no existe una concordancia
exacta min usculas-may usculas entre el nombre del chero y el comando utilizado para
llamarlo.
Todas las variables se envan por valor, no por referencia. Es decir, si una funcion
modica una variable de entrada, esta modicacion se pierde cuando nalice su ejecucion,
recuperando el valor original.
Por ultimo, en un chero se pueden incluir varias funciones. En este caso solo la primera
funcion es accesible desde el exterior (lnea de comandos, otras funciones,...) mientras que
el resto de funciones presentes en ese chero son internas, es decir, utilizables unicamente
por las funciones presentes en el archivo. Esto es importante a la hora de realizar una
programacion modular. Si un conjunto de funciones son solo utilizadas por una funcion
principal, se pueden insertar en el mismo chero que esta. Evitamos as llenar la carpeta
de trabajo, o de nuestro proyecto, con cheros y mas cheros.
2.5. Vectores y matrices
Dado que principalmente trabajaremos solo con arrays de una y dos dimensiones
hablaremos en lo que sigue de los objetos matematicos correspondientes: vectores y ma-
trices. Todo lo que sigue se puede adaptar a arrays con mas dimensiones, aunque por
simplicar, nos centraremos ahora en el manejo de vectores y matrices y dejaremos pen-
diente para la Leccion IV el uso de arrays multidimensionales (tensores).
2.5.1. Denicion de matrices y vectores
Un vector o una matriz se puede denir dando sus elementos entre corchetes y sepa-
rando las mediante ;. Por ejemplo, las instrucciones
7
No hay que subestimar nunca la capacidad de olvido de uno mismo: el codigo claro y legible de hoy
es ilegible semanas despues. Las ayudas facilitan la edicion de los programas no solo para un usuario
externo sino para el propio programador.
8
Es decir, si existe un chero llamado operaciones.m no es posible crear otro con nombre
Operaciones.m
22
B
o
r
r
a
d
o
r
LECCI
ON I Cap
.
Matlab distingue entre vectores la y columna por lo que habra que tenerlo en cuenta por
ejemplo cuando se desee hacer operaciones como sumas o productos.
Desde una vertiente practica, si se va a trabajar con una matriz grande, por ejemplo
de tama no 20 10, y sus valores se van a introducir mas adelante, se puede empezar con
>> a=zeros(20,10);
A partir de este instante se pueden insertar los elementos, accediendo a cada posicion
mediante parentesis
>> a(4,5)=9; a(2,1)=6; a(1,1)=-3.4;
>> a(4,5)
ans=
9
En cualquier caso, si tratamos de introducir un valor en una posicion no denida de la
matriz, Matlab ira adaptando el tama no seg un juzgue apropiado
9
, y no dara ning un
error. El siguiente ejemplo ilustra esta caracterstica
>> clear c % c esta borrado
>> c(1,2)=4 % c es ahora 1 x 2
c =
0 4
>> c(3,3)=2 % c pasa a ser 3 x 3
c =
0 4 0
0 0 0
0 0 2
Esta habilidad, aunque permite una programacion muy exible y descuidada, debe uti-
lizarse con mesura dado que puede provocar errores de ejecucion muy difciles de detectar.
9
Ello obliga a que haya que redimensionar constantemente la memoria otorgada a la variable a. Esto
supone un costo adicional, inapreciable con ejemplos peque nos, pero importante para grandes cantidades
de memoria. Por tanto es mejor declarar primero las dimensiones de la matriz e informar as a Matlab de
cuanta memoria tiene que reservar.
23
B
o
r
r
a
d
o
r
2.5 Vectores y matrices LECCI
ON I
2.5.2. Operaciones
Todas las operaciones habituales entre matrices, tales como la suma, producto, poten-
ciacion, calculo de determinantes, inversas..., estan ya implementadas en Matlab. No hay
por tanto necesidad de programarse estas tareas. Por ejemplo, si a y a2 son matrices de
tama nos compatibles, las instrucciones
a*a2 a^2 a+a2
devuelven el producto matricial de a y a2, el cuadrado de a (es decir, a*a) y la suma de
a y a2.
Es importante observar la diferencia con estas lneas
a.*a2 a.^2
En el primer caso, se devuelve la matriz resultado de multiplicar elemento a elemento
a y a2 (por tanto deben tener el mismo tama no) y en el segundo, una matriz cuyas
entradas son el cuadrado de las de a. Esto es una constante en Matlab: el signo .
indica que la operacion (un producto, una potencia o una division) se hace elemento a
elemento, mientras que en caso contrario se calcula la operacion matematica, en este
caso el producto matricial.
Ejercicio 2.4 Introduce en a y a2 dos matrices de igual tama no. Observa el resultado de
ejecutar
a+a2 a*a2 a.*a2
Dene un vector b la o columna y ejecuta
b.^3 b
Comprueba si estas operaciones estan bien denidas
a*2 a+1
Que hacen exactamente? Por que crees que no es necesario . en la primera instruccion?.
Otros comandos importantes son
det inv / \ /. \.
Los dos primeros son el determinante y la inversa de una matriz cuadrada. Los operadores
/ y \ (slash y backslash) son ciertamente especiales:
a/a2 es equivalente a a*inv(a2), a\a2 es equivalente a inv(a)*a2
En cuanto a su relacion con ./ y \. es la misma que ha surgido antes, esto es, aplicado
sobre matrices procede a realizar los cocientes elemento a elemento. Requiere por tanto
que ambas matrices tengan el mismo tama no.
Ejercicio 2.5 Ejecuta las instrucciones
>> 3/5
>> 3\5
y observa el resultado. Tiene sentido desde el punto de vista anterior?.
Ejercicio 2.6 Dado b una matriz, que hace 1/b?.
24
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
ans =
3
>> a3=a3; % cambiamos la forma de a3
>> size(a3)
ans =
2 3
>> [m,n]=size(a3); % m son las filas y n las columnas
>> m
ans =
2
>> n
ans =
3
>> length(a3)
ans =
3
El comando size devuelve un vector de tama no 21 con el n umero de las y columnas
del vector/matriz. El resultado es diferente seg un se aplique a vectores la o columna. La
orden length devuelve la longitud de una matriz o vector. Su signicado en el caso de un
vector esta clara mientras que para matrices devuelve el maximo entre el n umero de las
y el n umero de columnas.
Matrices especiales
Matlab dispone de una serie de comandos que permiten construir matrices con una
estructura particular. Cabe se nalar las siguientes ordenes:
eye(n) es la matriz identidad de orden n;
ones(m,n) es una matriz m x n de 1s;
zeros(m,n) es una matriz m x n de 0s, esto es, igual que ones pero con ceros;
y algunas mas exoticas como hilb, invhilb, pascal, magic.
26
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
adapte a la nueva sintaxis, tan diferentes a la de un lenguaje tradicional, y pueda utilizarlo
en sus codigos.
Comencemos viendo un ejemplo:
>> a=[1 2 3; 4 5 6; 7 8 9; 10 11 12];
>> a(2,3) % elemento (2,3) de a
ans =
6
>>a(2,:) % fila 2 de a
ans =
4 5 6
>>a(:,1) % columna 1
ans =
1
4
7
10
>>a(:,2)=0 % columna 2 es ahora 0
a =
1 0 3
4 0 6
7 0 9
10 0 12
Podemos acceder a partes de una la o columna:
>> a(1,2:3) % vector [a(1,2) a(1,3)]
ans =
0 3
>> a(2:4,3) % vector columna [a(2,3); a(3,3); a(4,3)]
ans =
28
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
1 2 3 4
5 6 7 8
1 -1 2 4
>> a=[a [0; 2; 4] ] % una nueva columna
a =
1 2 3 4 0
5 6 7 8 2
1 -1 2 4 4
Si se desea eliminar una la o columna se puede utilizar el smbolo vaco []. Por
ejemplo,
>> a(:,2)=[] % suprime la segunda columna
a =
1 3 4 0
5 7 8 2
1 2 4 4
Ejercicio 2.8 Programa una funcion cuyas entradas sean una matriz cuadrada y un termino
independiente compatible y que devuelva la matriz ampliada del sistema de ecuaciones lineales.
Esto es, una matriz con la matriz original y una ultima columna con el termino independiente.
2.6. Bucles y estructuras de decision
Claves en cualquier lenguaje de programacion, Matlab dispone de varias de ellas entre
las que sobresalen for e if, un estandar en el mundo de la informatica.
2.6.1. Bucles: el comando for
En Matlab, la estructura
for j=inicio:paso:final
.....
end
implementa un bucle donde las lneas de codigo entre for y end son ejecutadas repetida-
mente con j tomando los valores del vector inicio:paso:final (vease la Seccion 2.5.3)
Por ejemplo,
>> for j=1:3; disp(j); end
1
30
B
o
r
r
a
d
o
r
LECCI
ON I Cap
_
1
1
2
1
n
1
2
1
3
1
n+1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
n
1
2n2
1
2n1
_
_
Construye la matriz anterior mediante un chero script y el uso de dos for anidados.
2.6.2. Operadores logicos y estructuras de decision
Los operadores logicos mas basicos en Matlab son
== igualdad, ~= desigualdad, > mayor, < menor,
>= mayor o igual, <= menor o igual, & y logico, | o logico
31
B
o
r
r
a
d
o
r
2.6 Bucles y estructuras de decision LECCI
ON I
El resultado de una comparacion es 1 si es verdadero, 0 si es falso:
>> a=1; b=2; c=3;
>> a>0
ans =
1
>> a>0 & b<3
ans =
1
>> a<0 | b<1
ans =
0
>> test= (a~=0)
ans =
1
>> whos test
Name Size Bytes Class
test 1x1 1 logical array
Grand total is 1 element using 1 bytes
Estos 0 y 1 no son valores numericos sino logicos como se comprueba con la ultima
instruccion
10
. Cuando se aplica a un vector, devuelve un vector de verdadero/falso de la
misma longitud que el vector original:
>> b=[1 2 -3 -1 2 -4]; p=(b>=1) % entradas de b>=1
p=
1 1 0 0 1 0
En el ejemplo anterior, p(i)==1 si b(i)1 y cero en caso contrario. Ahora, podemos
aislar los elementos mayores o iguales que 1 simplemente con
10
Ocupan un unico byte mientras que un n umero real utiliza ocho bytes.
32
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
if de decision m ultiple:
if (x<0)
f=x.^2;
disp(x menor que cero)
elseif (x<sqrt(pi))
f=sin(x^2);
disp(x en [0,sqrt(pi)))
elseif (x<2*sqrt(pi))
f=(x-sqrt(pi))^2;
disp(x en [sqrt(pi),2*sqrt(pi)))
else
f=pi*cos(x^2);
disp(x en [2*pi,infinito))
end
Esta ultima instruccion es equivalente a anidar diferentes estructuras if, de la sigu-
iente forma
if (x<0)
f=x.^2;
disp(x menor que cero)
else
if (x<sqrt(pi))
f=sin(x^2);
disp(x en [0,sqrt(pi)))
else
if (x<2*sqrt(pi))
f=(x-sqrt(pi))^2;
disp(x en [sqrt(pi),2*sqrt(pi)))
else
f=pi*cos(x.^2);
disp(x en [2*pi,infinito))
end
end
end
Obviamente, la primera forma es mas clara y concisa.
Nota. Con la instruccion switch se puede implementar una estructura de decision que
es esencialmente equivalente a un if anidado.
Esta disponible tambien el bucle while que procede a ejecutar un bucle (que se cierra
tambien con un end) mientras una condicion sea verdadera. Por tanto, es algo mas exible
que un for.
En general todos los bucles y estructuras que requieran cerrarse, lo hacen con end. El
uso de break y continue es exactamente el mismo.
34
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
p =
Columns 1 through 5
0.1000 0.3000 0.1000 0.6000 0.1000
Columns 6 through 7
0.2000 0.4000
Otra posible implementacion (mucho mas elaborada y mas propia de Matlab) es la sigu-
iente
01 % FINDNONZEROS
02 %
03 % [N,P]=FINDNONZEROS(X) devuelve
04 %
05 % N el numero de elementos no nulos en el vector X
06 % P un vector con los elementos no nulos de X
07 %
08 function [n,p]=findnonzeros(x)
09
10 p=x(x~=0);
11 n=length(p);
12 return
Haz un esfuerzo en entender bien los comandos anteriores. Tras la suciente practica,
esta version se ve mas clara y natural que la anterior. Observa como se toman los elementos
no nulos del vector x (lnea 10).
36
B
o
r
r
a
d
o
r
Captulo 3
Metodos directos para sistemas de
ecuaciones lineales
3.1. Metodo de Gauss
El metodo de Gauss, tambien conocido como eliminacion gaussiana, es el algoritmo
mas sencillo para la resolucion de sistemas de ecuaciones lineales. Consta de dos partes
bien diferenciadas:
i) Transformacion del sistema lineal en otro equivalente, es decir, con la misma solu-
cion, donde la matriz es triangular superior.
ii) Resolucion del sistema triangular por sustitucion regresiva.
El paso i) se acomete va dos operaciones elementales:
(a) Sumar a una ecuacion otra multiplicada por un n umero.
(b) Intercambiar dos ecuaciones.
Si solo utilizamos la operacion (a) hablaremos del metodo de Gauss sin pivotaje, y
con pivotaje parcial si tambien realizamos las operaciones (b)
1
cuando la eleccion de
las las que se conmutan sea una muy particular.
Representando el sistema de ecuaciones en la forma matricial, todo lo anterior se
reescribe en terminos de operaciones matriciales (sumar a una la otra la e intercambiar
las
2
). En lo que sigue expresaremos el sistema en la forma
Ax = b, A R
nn
, x, b R
n
,
donde A es la matriz de coecientes, b el termino independiente y x el vector de soluciones.
Los elementos de A se denotaran por a
ij
, y con b
i
los de b.
1
Existe una tercera operacion (c), que consiste simplemente en multiplicar las por constantes no
nulas. Esta operacion recibe el nombre de reescalado (de las) y en problemas practicos se suele utilizar
con el n de mejorar la estabilidad del sistema frente a errores de redondeo.
2
Otra posibilidad es intercambiar columnas, que se corresponde con reordenar las incognitas). En este
caso se habla de pivotaje total.
37
B
o
r
r
a
d
o
r
3.1 Metodo de Gauss LECCI
ON I
3.1.1. Metodo de Gauss sin pivotaje
El pseudocodigo se expone a continuacion
Metodo de Gauss
01 for i = 1 : n 1
02 for k = i + 1 : n
03
ki
= a
ki
/a
ii
04 for j = i + 1 : n
05 a
kj
= a
kj
ki
a
ij
06 end
07 b
k
= b
k
ki
b
i
08 end
09 end
10
11 x
n
= b
n
/a
nn
12 for i = n 1 : 1 : 1
13 x
i
=
_
b
i
j=i+1
a
ij
x
j
_
/a
ii
15 end
Las lneas 01--09 se corresponden con la reduccion a la forma triangular de la matriz
y las lneas 11--15 con la resolucion del sistema triangular resultante. El elemento a
ii
se
denomina pivote y debe ser distinto de cero para que el algoritmo funcione, dado que en
caso contrario la operacion en 03 esta mal denida.
El algoritmo efect ua O(n
3
/3) productos
3
y otras tantas sumas para la reduccion a la
forma triangular y O(n
2
/2) sumas y productos para la resolucion del sistema triangular.
Por tanto el costo se concentra en la primera fase del algoritmo y duplicar la dimension
del sistema exige multiplicar por ocho el tiempo de calculo (y por cuatro el costo en
memoria).
Ejercicio 3.1 Implementa una funcion cuyas entradas sean la matriz de coecientes y el
termino independiente y devuelva la solucion del sistema por el metodo de Gauss.
Solucion. El siguiente programa es una solucion del ejercicio
01 % GAUSS
02 %
03 %
04 % X=GAUSS(A,B) Solucion del sistema Ax=b con el metodo
05 % de Gauss sin pivotaje
3
es decir, el n umero de multiplicaciones es n
3
/3 + n
2
+ n + , donde , y son constantes
adecuadas. Con n creciente, el primer termino es el dominante.
38
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
De forma analoga, el sumatorio de las lneas 25-29 del codigo (13 del algoritmo del
metodo de Gauss) es simplemente el producto escalar, y de hecho tambien matricial, de
dos vectores, el vector la a(i,i+1:n) y el vector columna x(i+1:n). Esto es el codigo
de las lneas 25--29 se puede sustituir por
x(i)=(b(i)- a(i,i+1:n)*x(i+1:n))/a(i,i);
1
d
1
A
11
_
, b =
_
b
1
b
1
_
donde c
1
, d
1
son vectores (n 1) 1 y A
11
una matriz (n 1) (n 1). Entonces, el primer
paso del metodo de Gauss se puede escribir
_
a
11
c
1
0 A
11
(a
11
)
1
c
1
d
1
_
, b =
_
b
1
b
1
a
1
11
b
1
d
1
.
_
. .
A
(1)
. .
b
(1)
El segundo paso del metodo de Gauss se aplica ahora sobre la matriz A
(1)
(de tama no (n1)
(n1)) y el vector b
(1)
(de tama no (n1) 1) y as se procede sucesivamente. Implementa
esta resolucion alternativa del metodo de Gauss.
(Ayuda. Observa estas tres instrucciones
l=a(i+1:n,i)/a(i,i) a(i+1:n,i+1:n)-l*a(i,i+1:n) b(i+1:n)-l*b(i)
Que hacen?)
Nota sobre la vectorizacion
La nocion de vectorizacion, trabajar con vectores y matrices en lugar de elemento a ele-
mento, no es nueva ni en el Analisis Numerico ni en la computacion a alto nivel. El objetivo
que se persigue es que las todas las operaciones se reduzcan a operaciones matematicas
sencillas, como productos escalares, productos matriciales, b usqueda de maximos y mni-
mos en un vector/matriz, suma de vectores y matrices... cuya implementacion se opti-
miza tomando en consideracion el entorno en el que se trabaja, tanto en software como
en hardware. Este conjunto de instrucciones se conocen como BLAS (basic linear algebra
subprograms). Se distinguen tres niveles. El nivel uno esta formada por operaciones entre
vectores, tales como la suma o el producto escalar de dos vectores, de O(n) operaciones, el
nivel dos se ocupa de operaciones matriz-vector con O(n
2
) operaciones y el nivel tres son
operaciones entre matrices, O(n
3
) operaciones. En maquinas con m ultiples procesadores
estos subprogramas deben adaptarse a dividir la tarea entre los procesadores disponibles
de forma optima y a buscar algoritmos que soporten este tipo de trabajo
5
.
5
Se deben buscar en primer lugar algoritmos que permitan dividir la tarea principal en subtareas
equiparables, y de forma que nalicen en tiempos similares puesto que basta con que una de las subtareas
se retrase respecto a las demas para que el conjunto de procesadores deba parar a esperar al rezagado
con la consiguiente perdida de tiempo (y dinero).
40
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
Metodo de Gauss con pivotaje parcial
01 for i = 1 : n 1
02
03 Encontrar k i, . . . , n tal que [a
ki
[ = max
j=,...,n
[a
i
[
04 for j = i : n
05 a
ij
a
kj
%intercambio las y termino independiente
08 end
07 b
i
b
k
08
09 for k = i + 1 : n
10
ki
= a
ki
/a
ii
11 for j = i + 1 : n
12 a
kj
= a
kj
ki
a
ij
13 end
14 b
k
= b
k
ki
b
i
15 end
16 end
Ejercicio 3.4 Implementa una funcion con el metodo de Gauss con pivotaje a partir de la
funcion denida en el Ejercicio 3.2.
Para este n la instruccion max te puede resultar util. Especcamente,
>> [m,i]=max(v)
devuelve en m el mayor valor del vector v y en i su posicion, esto es, m = v(i). A nade tambien
un control sobre el tama no de a(i, i) de forma que si este es proximo a cero
7
se termine la
ejecucion y se devuelva un mensaje de error.
(Ayuda. La instruccion [m,r]=max(abs(a(i:n,i))) te devolvera en r la posicion del maximo
en el vector columna abs(a(i:n,i)). Por tanto, la la en la matriz a con el mayor valor en la
columna i es i+r-1.)
El intercambio de las de las lneas 04--08 se puede implementar de varias formas.
La primera es simplemente con un bucle que recorra las las y proceda a intercambiar los
valores elemento a elemento. En la segunda forma se hace de forma global mediante
aux=a(i,i:n); a(i,i:n)=a(k,i:n); a(k,i:n)=aux;
La tercera forma probablemente sera la que resulte mas extra na pero vuelve a ser natural
en Matlab. Basta hacer
a([i,k],i:n)=a([k,i],i:n)
Fjate que tiene perfecto sentido sintactico de acuerdo a las reglas de manipulacion de
vectores y matrices expuestas en la primera parte de esta leccion.
7
Cuando se decide que un n umero es cero? En la practica depende de los tama nos del resto de
elementos de la matriz.
42
B
o
r
r
a
d
o
r
LECCI
ON I Cap
ON I
entonces
Aa
i
= e
i
=
_
_
0
.
.
.
1
.
.
.
0
_
_
i.
Utilizando alguna de las diferentes versiones del metodo de Gauss, implementa el calculo de la
inversa mediante la resolucion de los n sistemas de ecuaciones. Observa que los n comparten
la misma matriz de coecientes.
3.2. Descomposiciones matriciales
Uno de los aspectos que mejores resultados dio a lo largo del siglo XX, en los albores del
Analisis Numerica, fue la constatacion de que numerosos algoritmos del
Algebra Lineal,
podan reescribirse como factorizaciones de matrices en producto de otras matrices con
caractersticas muy particulares.
Este es el caso del algoritmo de Gram-Schmidt, la matriz
original escrita como el producto de una ortogonal por una triangular, o el caso que nos
ocupa, el metodo de Gauss, visto como la b usqueda de la factorizacion de A como el
producto de una matriz triangular inferior por una superior.
La utilidad que se concedio a este tipo de factorizaciones fue en un primer momen-
to mas bien teorica pero rapidamente se encontro aplicaciones practicas y su uso en la
actualidad es profuso.
Estudiaremos en lo que sigue la factorizacion LU y variantes y dejaremos para mas
adelante (Leccion IV) otro tipo de factorizaciones.
3.2.1. Descomposicion LU
Supongamos que se dispone de una descomposicion
A = LU
donde L y U son matrices triangulares inferior y superior respectivamente. En este caso, la
resolucion del sistema lineal Ax = b es equivalente a resolver dos sistemas de ecuaciones
triangulares
Ly = b, Ux = y.
el primero triangular superior y el segundo triangular inferior. Puesto que el costo de
resolucion de cada sistema es O(n
2
) operaciones (total de sumas y productos) obtenemos
una ventaja decisiva en la resolucion del sistema.
Ejercicio 3.8 Implementa la resolucion de un sistema de ecuaciones Lx = b donde L es
triangular inferior con 1s en la diagonal.
Si abordamos directamente la resolucion de la ecuacion A = LU, nos encontramos
con un sistema no lineal con n
2
+ n incognitas (las entradas de L y U) y n
2
ecuaciones
(una por cada elemento de a). Por tanto, el sistema resultante no debera admitir solucion
44
B
o
r
r
a
d
o
r
LECCI
ON I Cap
_
1
21
1
.
.
.
.
.
.
.
.
.
n1
n2
1
_
_
, U =
_
_
u
11
u
12
u
1n
u
22
u
2n
.
.
.
.
.
.
u
nn
_
_
,
y tales que A = LU.
El calculo de esta descomposicion se puede llevar a cabo sin mas que exigir que el
producto LU sea igual al de A. As empezamos despejando la primera la de U (que es
igual que la de A por ser
11
= 1). Una vez conocida esa la, se puede despejar la primera
columna de L, utilizando que el producto de L por la primera columna de U (que consta
de un unico elemento no nulo y ya es conocido del paso anterior) da la primera columna de
A. Procedemos sucesivamente de esta forma, construyendo U por las y L por columnas.
Descomposicion LU (Metodo de Doolittle)
01 for k = 1 : n
02 for j = k : n
03 u
kj
= a
kj
k1
p=1
kp
u
pj
04 end
05
kk
= 1
06 for i = k + 1:n
07
ik
=
_
a
ik
k1
p=1
ip
u
pk
_
/u
kk
08 end
09 end
El n umero de operaciones del algoritmo resulta ser igual al del metodo de Gauss,
con lo cual no hemos conseguido una ventaja signicativa. Sin embargo, disponer de esta
descomposicion es especialmente util si se requiere resolver varios sistemas de ecuaciones
lineales con la misma matriz pero con terminos independientes diferentes. Las operaciones
que conllevan un mayor coste son las correspondientes al calculo de las matrices L y
U, pero unicamente hay que realizar esta descomposicion una vez para posteriormente
resolver en cada caso dos sistemas triangulares.
Ejercicio 3.9 Implementar la descomposicion LU en Matlab mediante una funcion cuya
entrada sea una matriz cuadrada y su salida sean las matrices L y U correspondientes.
(Ayuda: la funcion por tanto devuelve dos valores.)
45
B
o
r
r
a
d
o
r
3.2 Descomposiciones matriciales LECCI
ON I
Al observar el algoritmo del metodo, las operaciones recuerdan a las efectuadas por el
metodo de Gauss. Esto no es tan sorprendente cuando se analizan con detenimiento los
calculados realizados. Se puede ver entonces que en el calculo de la descomposicion LU se
estan haciendo exactamente las mismas operaciones que al aplicar el metodo de Gauss.
En efecto, denamos
_
a
(1)
ij
= a
ij
i, j = 1, . . . , n
a
(k+1)
ij
= a
(k)
ij
ik
a
(k)
kj
, k 1, 1 i, j n k
donde
ki
viene dada por el algoritmo de Doolitle (lnea 07).
Entonces, de acuerdo con el algoritmo de la factorizacion LU, los elementos de la
primera la de U y de la primera columna de L vienen dados por
u
1j
= a
(1)
1j
,
i1
=
a
(1)
i1
a
(1)
11
.
En el siguiente paso, se observa que
u
2j
= a
2j
21
u
1j
= a
(1)
2j
21
a
(1)
1j
= a
(2)
2j
i2
=
a
i2
i1
u
12
u
22
=
a
(1)
i2
i1
a
(1)
12
a
(2)
22
=
a
(2)
i2
a
(2)
22
.
Reiterando el mismo razonamiento concluimos que
u
ij
= a
(i)
ij
, i j,
ij
=
a
(j)
ij
a
(j)
jj
, i > j.
Por tanto U es de hecho la matriz triangular que queda al aplicar el metodo de Gauss
mientras que L esta formada por los elementos que se han utilizado para hacer ceros en
el proceso. Esto es, el elemento i, j de L, denotado por
ij
, coincide con la constante
ij
calculado en la lnea 03 del metodo de Gauss y por tanto no hay una contradiccion de
notaciones.
En particular, la propiedad anterior propone una forma alternativa de calcular la de-
scomposici on LU de una matriz es la siguiente modicacion del programa del Ejercicio 3.1:
11 for i=1:n-1}
12 a(i,i+1:n)=0; %hacemos cero la columna i
13 for k=i+1:n}
14 l(k,i)=a(k,i)/a(i,i);
15 a(k,i+1:n)=a(k,i+1:n)-l(k,i)*a(i,i+1:n);
16 end
17 end
La matriz U estara entonces almacenada en a.
Ejercicio 3.10 Una forma compacta de devolver la descomposicion LU es insertar L en la
parte triangular inferior de a. De esta forma, tras aplicar el metodo, a tiene en la parte superior
la matriz U, mientras que por debajo de la diagonal encontramos L (exceptuando su diagonal
de 1s). Implementa esta modicacion.
46
B
o
r
r
a
d
o
r
LECCI
ON I Cap
donde
L =
_
11
21
22
.
.
.
.
.
.
.
.
.
n1
n2
nn
_
_
.
Gracias a la simetra de la matriz, tanto el n umero de operaciones como de posiciones
de memoria requeridos pueden reducirse a la mitad. El algoritmo resultante es conocido
como el metodo de Cholesky.
Metodo de Cholesky
01 for k = 1:n
02
kk
=
_
a
kk
k1
r=1
2
kr
03 for j = k + 1:n
04
jk
=
_
a
jk
k1
r=1
jr
kr
_
/
kk
05 end
06 end
Ejercicio 3.11 Implementa una funcion que tenga como entrada una matriz A y devuelva
la matriz L correspondiente. Debe avisar si la descomposicion no ha podido llevarse a cabo.
Implementa tambien una segunda funcion que tenga como entradas la matriz L triangular
y un termino independiente b y que devuelva la solucion del sistema
(LL
)x = b.
Para ello se requiere la resolucion de los sistemas triangulares
Ly = b, L
x = y.
LU con permutacion
El metodo de Gauss con pivotaje parcial es equivalente a la decomposicion
PA = LU
47
B
o
r
r
a
d
o
r
3.2 Descomposiciones matriciales LECCI
ON I
donde P es el resultado de permutar las las (o columnas) de la identidad. Alternativa-
mente, equivale a una descomposicion de la forma
A =
LU
donde
L = P
1
L, de forma que
L es una permutacion de la matriz triangular inferior
9
.
La siguiente subrutina devuelve esa descomposicion.
01 % LUPERMUTACION
02 %
03 % [L,U]=LUPERMUTACION(A)
04 %
05 % devuelve U triangular superior, L permutacion
06 % por filas de una matriz triangular inferior con
07 % 1s en la diagonal de forma que A=L*U
08
09 function [l,u]= LUPermutacion(a)
10 n=length(a);
11 p=1:n;
12
13 for i=1:n-1
14 [maximo,r]=max(abs(a(p(i:n),i)));r=r+i-1;
15 p([i r])=p([r i]);
16 for k=i+1:n
17 l(p(k),i)=a(p(k),i)/a(p(i),i);
18 a(p(k),i:n)=a(p(k),i:n)-l(p(k),i)*a(p(i),i:n);
19 end
20 end
21 for i=1:n
22 l(p(i),i)=1;
23 end
24 u=a(p,:);
25 return
3.2.3. Comandos correspondientes en Matlab
Todas las factorizaciones vistas con anterioridad estan, por supuesto, implementadas
en Matlab. Algunos de los comandos relacionados son
9
Esto es, es el resultado de reordenar las las de L.
48
B
o
r
r
a
d
o
r
LECCI
ON I Cap
Q = I
n
) y R triangular superior de forma que A = QR. El comando encargado de esta
tarea es qr.
Con estas instrucciones la solucion de un sistema utilizando la descomposicion LU se
ejecuta con las siguientes lneas
[l,u]=lu(a); x=u\(l\b);
La colocacion de los parentesis es esencial. Con ulb se calcula (u
1
l)
1
b que obvia-
mente no tiene nada que ver con la solucion del sistema. No hay que preocuparse por el
hecho de que las matrices sean triangulares (o permutacion de una triangular). Matlab, y
en concreto la instruccion \ detecta esto y resolvera el sistema por sustitucion progresiva
(o regresiva), sin intentar realizar la eliminacion gaussiana.
Nota historica
11
Ideas similares a la eliminacion gaussiana pueden encontrarse muchos siglos atras, con
referencias que se remontan a las matematicas babilonicas y chinas. Carl Friedreich Gauss
introdujo el metodo que lleva su nombre entorno a 1800 cuando trataba de resolver un
problema de ajuste por mnimos cuadrados relacionado con el calculo de la orbita del
asteroide Palas. Parece ser que Joseph Louis Lagrange haba utilizado ideas similares 50
a nos antes para dilucidar si una forma cuadratica (hoy diramos matriz) era denida pos-
itiva. El matematico aleman Carl Gustav Jacob Jacobi extendio la idea de la eliminacion
gaussiana a matrices arbitrarias.
Es rese nable que la nocion de matriz tal como la conocemos ahora era desconocida
para Gauss y Lagrange. El concepto de matriz, y el algebra asociada (esto es, las opera-
ciones) habran de esperar a los trabajos de James J. Sylvester (que en 1848 introdujo el
termino matriz) y de Arthur Cayley (que siete a nos despues denio el producto matricial
identicandolo con el calculo de la composicion de aplicaciones lineales y denio la in-
versa de una matriz). Importantes fueron tambien las contribuciones del fsico Hermann
10
Veremos dos algoritmos para obtener esta descomposicion en la Leccion IV. Aunque para la resolucion
de sistemas de ecuaciones lineales la descomposicion QR es mas estable numericamente que la LU, se
suele optar por esta ultima por tener un menor coste computacional (aproximadamente la mitad).
11
Las principales referencias utilizadas para esta nota han sido Very Early Days of Matrix Compu-
tations, Beresford Parlett en SIAM News, 3, no 9; Matrix Algorithms, G.W. Stewart; Computer
solutions of large system of equations, G. Merant y An introduction to Numerical Analysis, E. S uli y
D. Mayers. Estas referencias estan completamente detalladas en la bibliografa.
49
B
o
r
r
a
d
o
r
3.2 Descomposiciones matriciales LECCI
ON I
Grassmann (introdujo la primera algebra vectorial no conmutativa, basada en el producto
vectorial de dos vectores; considero tambien el producto de un vector la por un vector
columna que daba lugar a una matriz de rango uno), Willard Gibbs y Paul A. Dirac.
La equivalencia entre la descomposicion LU y la eliminacion gaussiana parece que fue
probada por primera vez por Paul S. Dwyer en 1944. Curiosamente, la descomposicion
de Cholesky es anterior. Publicado postumamente en 1924 en una revista de Geodesia
(Andre-Louis Cholesky murio en 1918). El trabajo original trataba sobre la resolucion
de un problema de ajuste por mnimos cuadrados y paso desapercibido hasta que fue
rescatado por John Todd a nales de los a nos 1940.
Los primeros analisis sobre la estabilidad numerica de la eliminacion gaussiana, es
decir la viabilidad de su programacion, se remontan a los trabajos de Harold Hotelling,
Alan Turing
12
, John von Neumann y Herman Heine Goldstine. Los resultados iniciales
eran descorazonadores. Harold Hotelling probo en torno a 1940 que el error de redondeo
podra crecer como 4
n
donde n era el orden de la matriz. Este resultado colocaba al metodo
de Gauss como un metodo inviable para la resolucion de grandes sistemas lineales. Turing
llego a resultados similares de manera informal. El analisis de Neumann y Goldstine ya
probaba que el metodo era estable para matrices denidas positivas
13
. James H. Wilkinson,
reconocido universalmente como el padre del analisis moderno de estabilidad (frente a los
errores de redondeo), extendio el analisis a matrices generales y mostro que el pivotaje
mejoraba enormemente la estabilidad del metodo. Lo mas curioso es que el analisis inicial
estaba enfocado mas hacia el calculo de la inversa de la matriz que al metodo de Gauss.
Como curiosidad nal, Cleve Moler, programador original de Matlab, cita
14
a Wilkinson
y Todd entre las personas que tuvieron una gran inuencia en su formacion y por ende
en los orgenes de Matlab.
12
La vida de Alan Turing es una de las mas tragicas en historia de las matematicas. Dotado de una in-
teligencia precoz, realizo contribuciones importantes en logica y computacion. Trabajo durante la segunda
guerra mundial en Bletchley Park en el descifrado de los codigos alemanes encriptados con la maquina
Enigma mediante la utilizacion del primer ordenador electronico en el mundo (Colossus). El papel que
este trabajo anonimo tuvo en la victoria aliada, los alemanes siempre estuvieron seguros de que su codigo
era indescifrable, solo ha empezado a reconocerse en fechas recientes. La presion y aislamiento a la que
Turing fue sometido por su homosexualidad, llegando incluso a ser detenido por ello, le llevo al suicidio
en 1954 despues de haberse sometido a un tratamiento con bromuro para curarle de su enfermedad.
13
En los primeros a nos se sugirio incluso resolucion de un sistema Ax = b mediante las ecuaciones
normales A
Ax = A
b (A
ON II
>> triu(a)
ans =
11 12 13
0 22 23
0 0 33
>> tril(a)
ans =
11 0 0
21 22 0
31 32 33
El usuario puede especicar que diagonal se escoge, o a partir de que diagonal se toma
la matriz triangular. La diagonal principal es la cero y las subdiagonales inferiores (respec-
tivamente superiores) estan numeradas consecutivamente con n umeros enteros negativos
(respectivamente positivos). El siguiente ejemplo ilustra estas caractersticas.
>> diag(a,-1)
ans =
21
32
>> tril(a,-1)
ans =
0 0 0
21 0 0
31 32 0
>> triu(a,0)
ans =
11 12 13
0 22 23
0 0 33
Ejercicio 4.1 Programa una funcion que dada una matriz a devuelva un vector d con los
elementos de la diagonal, una matriz triangular superior u con todos los elementos de a situados
56
B
o
r
r
a
d
o
r
LECCI
ON II Cap
Trasposicion de matrices
Dada una matriz A, la matriz traspuesta A
.
Esta operacion se denota en Matlab con :
>> a=[1 2 3; 0 2 4];
>> a
ans =
57
B
o
r
r
a
d
o
r
4.1 Retorno a las matrices LECCI
ON II
1 0
2 2
3 4
Obviamente, tambien se aplica sobre vectores:
>> b=[1;2;3]; % vector COLUMNA con tres elementos
>> b % vemos ahora un vector FILA
ans =
1 2 3
De nuevo nos encontramos con esta propiedad sobre la que ya hemos incidido: Matlab
distingue entre vectores las y columnas, y esta diferencia se hace especialmente palpable
(y en ocasiones molesta) a la hora de realizar operaciones como productos matriz-vector.
Nota. En Matlab existe tambien el operador .. Sobre matrices reales funciona exac-
tamente igual que el comando anterior, pero no as sobre n umeros complejos. Ademas de
trasponer, , conjuga todas las entradas. Es decir, cambia el signo a la parte imaginaria
de cada elemento. Matematicamente hablando, este es el operador de trasposicion o con-
jugacion, denotado habitualmente en matematicas con A
Dada una matriz a, si ejecutamos a(:), obtenemos el vector columna que se con-
struye concatenando las columnas de a. Tecnicamente hablando, nos esta mostrando la
matriz tal como se guarda en memoria. Por ejemplo,
58
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
1 5 9
2 6 10
3 7 11
4 8 12
>> a2=zeros(2,6);
>> a2(:)=a(:)
a2=
1 3 5 7 9 11
2 4 6 8 10 12
Nota. El comando reshape permite modicar las dimensiones de una matriz (o array
en general). Es mas exible que el comando :.
4.1.2. Mas operaciones sobre matrices
Hasta ahora las operaciones matriciales que han centrado nuestra atencion son las fun-
damentales: suma y producto. En Matlab estan tambien implementadas otras operaciones
comunes en el
Algebra Lineal. Entre todas ellas destacamos
dot: Calcula el producto escalar de dos vectores:
>> dot([1 2 3],[4 5 6])
ans =
32
Devuelve el produto 1 4+2 5+3 6 = 32. Este comando no distingue entre vectores
las y columnas, y es aplicable siempre que tengan la misma longitud.
La funcion se puede aplicar a matrices bien por columnas, esta es la forma estandar
2
,
o por las.
>> a=[1 2 3; 4 5 6]; a2=[1 1 1; 1 1 1];
>> dot(a,a2) % producto por columnas
ans =
5 7 9
2
Recuerda la predileccion de Matlab por las columnas.
60
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
ans =
5 2
>> max(a)
ans =
2 3 9
>> max(a,[],2) % busqueda por filas
ans =
8
9
>> [m,p]=max(a,[],2); p % posicion del maximo
ans=
1
1
La razon por la que se utiliza [] en la lnea anterior es que esta instruccion tambien
se puede utilizar para comparar dos arrays del mismo tama no
>> a1=[3 1 2; 5 3 2]; a2=[4 2 1; 1 2 3];
>> max(a1,a2)
ans =
4 2 2
5 3 3
Al insertar el vaco indicamos a Matlab que no existe un segundo vector y que debe
proceder a buscar el maximo de a en su segunda dimension, esto es, el maximo por
las.
min: Calcula el mnimo procediendo exactamente igual que max.
norm: norma de una matriz o vector. Se puede escoger entre varias normas.
>> v=[1 2 3];a=[1 2; 3 4];
>> [norm(v) norm(v,1) norm(v,inf)] % norma 2, 1 e infinito de v
ans =
62
B
o
r
r
a
d
o
r
LECCI
ON II Cap
i=1
u
i
v
i
.
As,
>> u=[1+i 2+2i]; v=[2 1];
>> dot(u,v)
ans =
4.0000 - 4.0000i
>> dot(v,u)
ans =
4.0000 + 4.0000i
Ejercicio 4.4 Como sumaras los elementos de una matriz?. Como encontraras el mnimo
y el maximo?. Y su posicion?
3
Una matriz tiene, en general, rango maximo por los errores de precision de la maquina. Este comando
hace una estimacion del rango, eliminando este factor.
4
En realidad no construye la inversa de la matriz por ser costoso.
63
B
o
r
r
a
d
o
r
4.1 Retorno a las matrices LECCI
ON II
4.1.3. Matrices sparse
Las matrices sparse son una importante clase de matrices que surge en diferentes
ambitos del Analisis Numerico y de las Matematicas y ciencias en general (elementos
nitos, teora de grafos,...).
En la Figura 4.1 se puede ver un ejemplo de una matriz sparse simetrica donde los
puntos indican las entradas diferentes de cero. Desde una optica puramente computacional
hace falta desarrollar sistemas de almacenamiento especiales dado que la inmensa mayora
de las entradas no deben ser almacenadas porque son nulas.
Figura 4.1: Diagrama de un matriz sparse 400 400 con 2690 elementos no nulos.
Matlab provee de forma muy sencilla ese almacenamiento. Con
>>a=sparse(100,100); b=sparse(100,1);
declaramos a como una matriz sparse 100100 y un vector columna b de 100 elemen-
tos. Todas las entradas son inicialmente ceros, pero se guarda la estructura basica para
introducir los elementos no nulos
>> a=sparse(100,100)
a =
All zero sparse: 100-by-100
>> a(4,4)=1; a(8,9)=-4; a(80,45)=-1; a(99,100)=4;
>> a
a =
64
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
4
>> spy(a)
La graca se despliega en una ventana separada.
Todas las operaciones que hemos visto estan adaptadas al nuevo entorno. As, los
operadores
: triu tril diag
devuelven vectores/matrices sparse. Las operaciones
* + .* dot
estan asimismo optimizadas. El problema de generar codigo eciente no es tan simple
como pudiera parecer. Por ejemplo, si se aplica la funcion dot a dos vectores sparse es
preciso saber antes que entradas hay que multiplicar. De otra forma podramos estar
dedicando un alto porcentaje de nuestro esfuerzo en simplemente calcular productos por
cero. Afortunadamente, Matlab hace ese trabajo por nosotros.
Por otro lado, aparecen una nueva serie de comandos, que devuelven matrices sparse,
entre los que merece la pena destacar
spdiags maneja las diagonales de una matriz de forma analoga a diag;
speye devuelve una matriz diagonal con unos, o similar (analoga a eye);
spones matriz de 1s, similar a ones;
sprand, sprandn construyen una matriz sparse con entradas aleatorias (similar a
rand);
Ejercicio 4.5 Con la ayuda de Matlab averigua la sintaxis concreta de los comandos ante-
riores y comprueba con alg un ejemplo como funcionan.
4.2. Argumentos de funciones
Veremos a continuacion como se pueden programar funciones en las que tanto el
n umero de argumentos de entrada como de salida sean variables. Esta caracterstica dota
de una mayor exibilidad a la programacion en Matlab.
Los comandos esenciales que precisamos son
varargin nargin varargout nargout
La instrucciones nargin y nargout informan respectivamente sobre el n umero de variables
de entrada y el n umero de variables de salida (number of input arguments y number of
output arguments).
Una funcion puede aceptar una serie de argumentos jos, al estilo de las funciones que
programamos en la leccion anterior, y un conjunto de argumentos opcionales, que pueden
66
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
2 4
0 1
>> [l,u,x]=DescomposicionLU(a,[1 2].)
l =
0.5000 1.0000
1.0000 0
u =
2 4
0 1
x =
1
0
>> [l,u]=DescomposicionLU(a,[1 2]) %falta un arg. de salida
??? Error using ==> DescomposicionLU
Too many output arguments.
>> [l,u,x]=DescomposicionLU(a) %faltan arg. de entrada
??? Error using ==> DescomposicionLU
Too many output arguments.
Ejercicio 4.6 A partir de la funcion anterior implementa una funcion que opere seg un la
siguiente cabecera
% DESCOMPOSICIONLU2
%
% R = DESCOMPOSICIONLU2(A)
% Si A es simetrica definida positiva devuelve
% R triang superior tal que A=RR
% [R,X] = DESCOMPOSICIONLU2(A,B)
% Si A es simetrica definida positiva devuelve
% R triang superior tal que A=RR y la solucion
% del sistema AX=B
% [L,U] = DESCOMPOSICIONLU2(A)
% Devuelve U triang superior, L permutacion de
% una triang. inferior con 1s en la diagonal
% tal que A=LU
% [L,U,X]= DESCOMPOSICIONLU2(A,B)
% Devuelve U triang superior, L permutacion de
68
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
70
B
o
r
r
a
d
o
r
Captulo 5
Matrices sparse en Matematicas.
Metodos iterativos para sistemas de
ecuaciones lineales
5.1. Metodo de Gauss para matrices sparse
Esta seccion se centra en el estudio del metodo de Gauss para matrices sparse. Mostraremos
los problemas que presenta la aplicacion de este algoritmo a este tipo de matrices, espe-
cialmente el efecto relleno y algunas estrategias de reordenamiento que mitigan estos
efectos adversos. Sirve asimismo para ahondar en la problematica de los metodos directos
y allanar y fundamentar los metodos iterativos que se tratan en las siguientes secciones.
Recordemos que en Matlab la resolucion de sistemas de ecuaciones utilizando
>> x=a\b;
se basa en el metodo de Gauss (o alguna de sus variantes). Puede plantearse la cuestion de
si es adecuado utilizar \ para matrices con formas especiales como por ejemplo matrices
triangulares o permutaciones de estas, para las que la eliminacion gaussiana no es nece-
saria puesto que las variables se pueden despejar de forma progresiva. Afortunadamente
Matlab detecta estas estructuras basicas y resuelve de una manera optima el sistema. Si
se consulta la ayuda para este comando se puede leer que se reconoce si una matriz es,
por ejemplo, sparse o llena, simetrica o no simetrica, triangular o permutacion de esta,
bandeada (los elementos concentrados en torno a la diagonal), de Hessenberg
1
(con todos
los elementos por debajo de la subdiagonal principal nulos), etc., y aplica el metodo di-
recto mas conveniente en cada caso. Testar si una matriz pertenece a uno de estos tipos
se puede realizar en un n umero de operaciones despreciable respecto a las del metodo de
Gauss.
Hemos visto al nal de la Leccion I que el metodo de Gauss es matematicamente
equivalente a calcular dos matrices L y U triangular inferior y superior respectivamente
con 1s en la diagonal de L de forma que
A = LU.
1
Ver Leccion IV
71
B
o
r
r
a
d
o
r
5.1 Metodo de Gauss para matrices sparse LECCI
ON II
Si se dispone de esta descomposicion, la resolucion del sistema de ecuaciones se reduce a
la resolucion de dos sistemas triangulares,
Ax = b, Ly = b, Ux = y,
o en codigo de Matlab
2
[l,u]=lu(a); x=u\(l\b);
Una caracterstica muy habitual del metodo de Gauss para matrices sparse es el efecto
relleno (en ingles ll in), esto es, la insercion de nuevos elementos en el proceso. Por
ejemplo, tras un unico paso del metodo de Gauss
_
_
x x x x x x
x x
x x
x x
x x
x x
_
_
x x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
_
_
y la matriz es ahora llena. Sin llegar a esos extremos, es habitual que las necesidades
de memoria se multipliquen al aplicar la eliminacion gaussiana. En la descomposicion
LU esto se reeja en un incremento en el n umero de entradas no nulas de la matriz con
los problemas que ello lleva consigo (mayores requerimientos de memoria, mayor costo
computacional,...).
Vamos a ver como podemos reducir este molesto comportamiento con un reorde-
namiento adecuado de las (ecuaciones) y columnas (incognitas). Dado que en aplica-
ciones practicas las matrices simetricas son muy comunes
3
nos restringiremos en lo que
sigue a esta familia de matrices. Con el n de preservar la simetra, cualquier intercambio
de las debe ser seguido por el intercambio de columnas correspondientes:
_
_
x 0 0 x x
0 x x 0 0
0 x x 0 x
x 0 0 x 0
x 0 x 0 x
_
_
1 3
_
x x 0 0 x
x x 0 0 0
0 0 x x x
0 0 x x 0
x 0 x 0 x
_
_
En los comandos
symrcm symmmd
estan implementados dos algoritmos de reordenacion muy populares: el algoritmo de
Cuthill-McKee inverso y el algoritmo de mnimo grado. El primero reordena de forma
que los terminos no nulos de la matriz tienden a estar concentrados cerca de la diagonal.
El algoritmo de mnimo grado por su parte tiende a mover los elementos no nulos hacia el
nal de la matriz de forma que la estructura inicial de la matriz es esencialmente diagonal
y el efecto relleno surge cuando el metodo de Gauss esta ya muy avanzado.
2
Recuerda la colocacion de los parantesis.
3
O al menos matrices con estructura simetrica, esto es, a(i, j) ,= 0 a(j, i) ,= 0. Todo lo que sigue es
igualmente valido para este tipo de matrices.
72
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
el pivote y el resto de elementos de la columna sea muy acusado. Surge seguidamente la
cuestion de estabilidad del metodo sin pivotaje. Afortunadamente para matrices denidas
positivas o diagonal dominantes, el metodo de Gauss sin pivotaje es estable numerica-
mente. La solucion del (o de los) sistemas se lleva a cabo con
Solucion con reordenamiento...
01 p=symmmd(a); % permutacion. vale tb p=symrcm(a);
02 [l,u]=lu(a(p,p)); % l y u son ahora "mas sparse"
03 x=l\b(p); x=u\x; % resolvemos los dos sistemas triangulares
04 x(p)=x; % reordenamos las incognitas
En la lnea 01, el vector p recoge una permutacion de 1:n (n es el n umero de las y
columnas de a) que reduce el efecto relleno de L y U. La matriz a(p,p) es el resultado
de reordenar ecuaciones e incognitas. La lnea 04 reordena las incognitas para recuper-
arlas en su orden original. Observa que la lnea 03 podra sustituirse simplemente por
x=u\(l\b(p));
Nota. A partir de la version 7.0, el comando symmmd que contiene el algoritmo de mnimo
grado se ha declarado obsoleto y sera eliminado en futuras versiones. Se recomienda
utilizar symamd.
Comentarios nales
Si la matriz es ademas simetrica denida positiva podemos utilizar la descomposicion
de Cholesky,
A = LL
x = y.
La instruccion correspondiente en Matlab es chol, que devuelve R triangular supe-
rior de forma que
A = R
R
(es decir, en la notacion de estos apuntes, L = R
ON II Cap
.
Queda mas alla de los contenidos de este curso explicar como funcionan los algorit-
mos implementados en symrcm y symmmd. Se puede se nalar no obstante que ambos
se basan en identicar la estructura de una matriz con la de un grafo no dirigido,
donde dos nodos i y j estan conectados si y solo si a(i,j),=0. El proceso de elim-
inaci on gaussiana se ve como la eliminacion sistematica de nodos y la creacion de
nuevos enlaces entre los nodos restantes. Concretamente, si hacemos un cero con la
la i en la la j, aparecen nuevos enlaces entre los nodos que estaban unidos con el
nodo i y los conectados con j. El problema se reescribe ahora en terminos de retirar
los nodos en el orden adecuado de forma que se minimice el n umero de nuevos ejes
creados (Figura 5.2).
Los gracos de la Figura 5.1 han sido creados a traves del siguiente chero script.
% Calculamos la matriz de elementos finitos para
% un problema sobre un dominio en forma de L
[p,e,t]=initmesh(lshapeg,Hmax,0.2); % malla inicial
75
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
[p,e,t]=refinemesh(lshapeg,p,e,t); % refinamiento
[a,b]=assempde(lshapeb,p,e,t,1,0,1);
% a es la matriz (sparse) y b el termino independiente
% Primera fila de dibujos
[l,u]=lu(a,0); % no pivotaje
figure(1)
subplot(331); spy(a); title(matriz original)
subplot(332); spy(l); title(matriz L)
subplot(333); spy(u); title(matriz U)
% Segunda fila de dibujos
p=symrcm(a); % reordenamiento filas y columnas
[l,u]=lu(a(p,p),0);
figure(1)
subplot(334); spy(a(p,p)); title(matriz permutada con symrcm)
subplot(335); spy(l); title(matriz L)
subplot(336); spy(u); title(matriz U)
% Tercera fila de dibujos
p=symmmd(a); % reordenamiento filas y columnas
[l,u]=lu(a(p,p),0);
figure(1)
subplot(337); spy(a(p,p)); title(matriz permutada con symmmd)
subplot(338); spy(l); title(matriz L)
subplot(339); spy(u); title(matriz U)
5.2. Metodos iterativos para sistemas lineales
Cuando un sistema de ecuaciones lineales es de tama no moderado
4
, casi nadie duda
en utilizar el metodo de Gauss en alguna de sus m ultiples variantes (incluidas las de-
scomposiciones matriciales). Sin embargo, la utilizacion de metodos iterativos se torna
imprescindible en problemas con matrices grandes, especialmente si son sparse, donde el
metodo de Gauss presenta las siguientes dicultades:
Es caro: O(4n
3
/3) operaciones
Es destructivo: retoca la matriz del sistema, y esto puede tener consecuencias muy
poco deseables, como hemos visto con matrices sparse. Ademas requieren en muchas
ocasiones guardar una copia de la matriz.
4
Es difcil denir que se entiende por tama no moderado. Ciertamente, tama nos enormes en la decada
de los a nos 70 son ahora perfectamente manejables en un peque no PC.
76
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
5.2.2. Detalles sobre la implementacion
En un metodo iterativo no podemos esperar calcular la solucion exacta, sino hallar
una aproximacion con una tolerancia prejada. Por tanto debemos jar un criterio de
parada que de por terminado el metodo cuando la solucion se considere sucientemente
buena. Esto no es grave. Los sistemas de ecuaciones lineales suelen provenir de metodos
que calculan soluciones aproximadas de problemas fsicos e ingenieriles. No tiene pues
sentido obcecarse en calcular la solucion exacta de un problema aproximado.
As hemos de elegir un criterio de parada que termine la ejecucion cuando la solucion
es sucientemente buena. Una posibilidad es medir la diferencia entre dos iteraciones
consecutivas
|x
m+1
x
m
|
en alguna norma que queda a eleccion del programador o del usuario. Si la diferencia es
peque na, se considera que estamos cerca de la solucion y se naliza el metodo.
De nuevo nos encontramos con el problema de denir peque no. Por ejemplo, una
diferencia de 1.4 entre dos iteraciones puede ser grande si la solucion tiene un tama no
|x| 10
1
o peque na si |x| 10
10
.
Por ello se puede hacer un promedio entre el error absoluto y el relativo. Concreta-
mente, si x e y son dos iteraciones consecutivas, se puede jar el criterio
01 aux=norm(x-y); % norma 2 entre x e y
02 if (aux<eps1+eps2*norm(x))
03 disp(Convergencia alcanzada...
04 ..........
05 end
En la lnea 02 tenemos en cuenta tanto el error absoluto (eps1) como el error relativo
(eps2). Estos valores son parametros que jan el criterio de parada y pueden ser dados
por el usuario.
Otros criterios se basan en calcular r = bAx y calcular el tama no. Es decir, medimos
cuanto le falta a x para ser solucion del sistema. El vector r recibe el nombre de residuo.
Nos encontramos de nuevo con dos componentes del residuo, el primero relacionado
con su tama no relativo, con respecto al termino independiente, y otra absoluta. Ambos
se pueden controlar con
01 aux=norm(b-a*x); % residuo
02 if (aux<eps1+eps2*norm(b))
03 disp(Convergencia alcanzada...
04 ..........
05 end
Este criterio puede ser preferible si se dispone ya del residuo y no hay que calcularlo ex
profeso. En muchos casos se toma simplemente eps1= 0.
Por otro lado, y desde un punto de vista computacional, debemos evitar que el metodo
entre en un bucle innito. Es decir, jar un n umero maximo de iteraciones de forma que
si se supera, se termine el metodo con un mensaje de error
6
. Que un residuo sea peque no
6
Existe otro problema: que la solucion crezca de forma que supere la cantidad maxima representable
en coma otante (overow). Matlab devolvera inf o -inf.
78
B
o
r
r
a
d
o
r
LECCI
ON II Cap
R
n
consideramos las normas
|x|
1
:= [x
1
[ +[x
2
[ +. . . +[x
n
[, |x|
2
:=
_
x
2
1
+x
2
2
+. . . +x
2
n
,
|x|
:= max
i=1,...,n
[x
i
[.
Es facil ver que efectivamente las tres expresiones denen una norma en R
n
. Las relaciones
entre ellas vienen dadas por las cotas
|x|
2
|x|
1
n|x|
2
, |x|
|x|
1
n|x|
, |x|
|x|
2
n|x|
.
Observa que sin embargo estas constantes de equivalencia dependen de n. Todas ellas
estan implementadas en Matlab, como ya se vio en la Seccion 4.1.2.
Cada norma vectorial dene a su vez una norma sobre las matrices
|A| = sup
x=1
|Ax|
denominada norma matricial inducida. En la expresion anterior sup es el supremo
sobre todos los vectores de norma 1, que es de hecho un maximo (el supremo se alcanza).
Se puede comprobar que
|A|
1
= max
j=1,...,n
n
i=1
[a
ij
[, |A|
= max
i=1,...,n
n
j=1
[a
ij
[.
79
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
La norma | |
2
tiene una expresion mas complicada que diculta su calculo practico. En
concreto
|A|
2
=
_
(A
A)
donde (B), denominado radio espectral, denota el mayor de los valores absolutos de
los valores propios de B (ver Leccion IV). Si A es simetrica, se tiene simplemente que
|A|
2
= (A).
En cualquier caso, el comando norm de Matlab aplicado a matrices devuelve las corre-
spondientes normas matriciales:
>> norm(a,1) % norma 1
>> norm(a,inf) % norma infinito
>> norm(a,2) % norma 2. Vale tambien norm(a)
Una norma vectorial y su norma matricial inducida se relacionan mediante
|Ax|
. .
norma vectorial
|A|
..
norma matricial
|x|
..
norma vectorial
.
Es decir, |A| mide el maximo alargamiento que multiplicar por A puede producir en un
vector medido en la norma | |.
Denicion y condiciones de convergencia
Los metodos iterativos lineales (o basados en iteraciones anes) comienzan consideran-
do una particion de A tal que
A = M N
con M invertible. As, si x es solucion de Ax = b,
Mx = Nx +b.
El metodo iterativo consiste en
Tomar x
0
una aproximacion de la solucion. Si no se conoce se puede tomar por
ejemplo el vector nulo.
Resolver en cada paso m
Mx
m+1
= Nx
m
+b. (5.1)
Es facil ver que si la sucesion construida en (5.1) converge a alg un x, entonces el vector
es la solucion del sistema. A un es mas, se comprueba facilmente que
x
m+k+1
x = (M
1
N)(x
m+k
x) = . . . = (M
1
N)
k
(x
m+1
x).
Denotando por B = M
1
N se tiene el siguiente resultado
Teorema 5.1 El metodo iterativo converge si y solo si existe k tal que |B
k
| < 1.
80
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
Metodos de Jacobi, de GaussSeidel y de relajacion de Young
Sea el sistema Ax = b donde
A =
_
_
a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
a
n2
. . . a
nn
_
_
La familia de metodos que vamos a exponer se basa en considerar la siguiente descom-
posicion de A
A = D L U
donde
D =
_
_
a
11
a
22
.
.
.
a
nn
_
_
, L =
_
_
0 0 0
a
21
0 0
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
a
n2
0
_
_
, U =
_
_
0 a
12
a
1n
0 0 a
2n
.
.
.
.
.
.
.
.
.
.
.
.
0 0 0
_
_
.
El metodo de Jacobi consiste en tomar en la denicion del metodo iterativo M = D
y N = L +U, es decir,
Dx
m+1
= (L +U)x
m
+b.
Para calcular x
m+1
hay que resolver por tanto un sistema diagonal cuyo coste es despre-
ciable. Visto componente a componente, tenemos que si
x
m
=
_
x
(m)
1
, x
(m)
2
, . . . , x
(m)
n
_
R
n
entonces
x
(m+1)
i
=
1
a
ii
_
b
i
j=i
a
ij
x
(m)
j
_
, i = 1, . . . , n.
Para algunos tipos especiales de matrices se sabe que el metodo converge e incluso se
dispone de informacion sobre la velocidad de convergencia.
Una matriz es estrictamente diagonal dominante por las si
[a
ii
[ >
j=i
[a
ij
[, i
y por columnas si
[a
jj
[ >
i=j
[a
ij
[, j.
Teorema 5.3 Si la matriz es estrictamente diagonal dominante por las o columnas el meto-
do de Jacobi converge.
Ejercicio 5.1 (matematico) Probar el teorema anterior. Cuando convergera mas rapido?
(Ayuda. Construir la matriz B = D
1
(L+U). Probar que |B|
ON II Cap
j=1
j=i
a
ij
y
j
_
/a
ii
05 end
06 if |x y|
2
<eps1+eps2*norm(x)
07 return
08 end
09 end
10 disp(numero maximo de iteraciones alcanzado)
11 return
Ejercicio 5.2 Implementa el metodo de Jacobi en Matlab.
Solucion. Empezaremos jando la cabecera que contendra la ayuda de la funcion. Nos
va a servir de que estructura vamos a dar a la entrada y salida de datos. Dicho esto, la
implementacion de este metodo que proponemos es la siguiente
01 % JACOBI
02 %
03 % X = JACOBI(A,B) aplica el metodo de Jacobi para la
04 % resolucion del sistema AX=B
05 %
06 %[X,IT]= JACOBI(A,B) devuelve en IT el numero de
07 % iteraciones calculadas
08 %
09 %[X,IT]= JACOBI(A,B,ITMAX) ITMAX es el numero max. de iteraciones
10 %
11 %[X,IT]= JACOBI(A,B,ITMAX,... EPS1,EPS2 son las tolerancias
12 % EPS1,EPS2 absoluta y relativa
83
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
13 %
14 %[X,IT]= JACOBI(A,B,ITMAX,...
15 % EPS1,EPS2,X0) arranca el metodo con X0
16 %
17 function [x, varargout]=jacobi(a,b,varargin)
18
19 % valores por defecto
20 n=length(a); mmax=100;
21 eps1=1e-4; % tolerancia absoluta
22 eps2=1e-4; % tolerancia relativa
23 x=zeros(n,1);
24 if nargin>2
25 mmax=varargin{1};
26 end
27 if nargin>3
28 eps1=varargin{2};
29 end
30 if nargin>4
31 eps2=varargin{3};
32 end
33 if nargin>5
34 x(:)=varargin{4}; %x es un vector columna
35 end
36
37 % Metodo de Jacobi
38
39 for m=1:mmax
40 error=0;
41 y=x;
42 for i=1:n
43 v=[1:i-1 i+1:n];
44 x(i)=(b(i)-a(i,v)*y(v))/a(i,i);
45 end
46 error=norm(x-y); % otras normas con norm(x-y,1),norm(x-y,inf)
47 if (error<eps1+eps2*norm(x))
48 break
49 end
50 end
51 if (m==mmax)
52 disp(numero maximo de iteraciones sobrepasado)
53 end
54
55 %salida
56
57 if (nargout>1)
58 varargout{1}=m;
84
B
o
r
r
a
d
o
r
LECCI
ON II Cap
Ejercicio 5.3 Programa una nueva opcion de salida que devuelva un vector error de lon-
gitud m1 de forma que error(m) sea la diferencia entre x
m
y x
m+1
.
Observa que el codigo realmente dedicado al metodo de Jacobi se reduce a apenas diez
lneas (39-50) con el resto de la subrutina dedicada al control del algoritmo y a la salida
y entrada de datos. Se observa ademas que la lnea 43 permite implementar en una unica
lnea (44) el producto de la lnea 04 del pseudocodigo.
El codigo anterior, sin embargo, es optimizable. El ejercicio siguiente ahonda en un
aspecto en particular
Ejercicio 5.4 Otra forma alternativa de implementar el metodo es reemplazar las lneas
42-45 por el producto
x=(b-a*y+d.*y)./d
o bien
x=y+(b-a*y)./d
donde d es un vector columna que contiene la diagonal de la matriz. Observa que realizamos
operaciones de mas (multiplicamos por la diagonal para luego restar su contribucion), pero
el costo es despreciable y la operacion es ahora puramente matricial. Implementa esta nueva
forma y comprueba el resultado. Obtienes mejoras en el redimiento del metodo
9
?
El metodo de GaussSeidel
10
consiste en tomar M = D L y N = U, es decir
(D L)x
m+1
= Ux
m
+b. (5.2)
Para calcular x
m+1
hay que resolver un sistema, en este caso triangular. Repasando con
cuidado las operaciones, observamos que
x
(m+1)
i
=
1
a
ii
_
b
i
i1
j=1
a
ij
x
(m+1)
j
n
j=i+1
a
ij
x
(m)
j
_
, i = 1, . . . , n.
9
Deberas probar con matrices grandes. La orden rand te puede servir para ese n. Una forma de
asegurar la convergencia es generar matrices estrictamente diagonal dominantes. Como se puede hacer
esto?.
10
El nombre de este algorimo es muy curioso. Seg un diversos autores (ej. George E. Forsythe o Gerard
Meurant), Carl Friedrich Gauss no dise no exactamente este metodo y Philipp Ludwig von Seidel, que lo
estudio a nales del siglo XIX, desaconsejaba su uso. Gauss desarrollo un metodo muy similar cuando
trataba de resolver un problema de geodesia que llevaba a un sistema lineal que no era compatible
determinado.
85
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
Escrito en forma algortmica,
GaussSeidel
01 for m=1:mmax
02 error=0; y=x
03 for i=1:n
04 x
i
=
_
b
i
i1
j=1
a
ij
x
j
j=i+1
a
ij
y
j
_
/a
ii
05 end
06 if |x y|<eps1+eps2*norm(x)
07 return
08 end
09 end
10 disp(numero maximo de iteraciones alcanzado)
11 return
As pues, la unica diferencia con el metodo de Jacobi es que GaussSeidel procede a
utilizar la nueva componente calculada x
i
tan pronto es posible mientras que Jacobi solo
la utiliza en la nueva iteracion. Es por ello que GaussSeidel es (casi siempre) superior a
Jacobi. No hay razones matematicas que permitan apoyar esta impresion. De hecho existen
matrices para las que Jacobi converge y GaussSeidel diverge, aunque hace falta construir
un ejemplo ad hoc, no es facil encontrar tal ejemplo, para comprobar esta armacion.
Desde un punto de vista practico, si Jacobi converge es altamente probable que lo haga
tambien GaussSeidel y generalmente, este lo hara en menos iteraciones.
Teorema 5.4 El metodo de GaussSeidel converge si
la matriz es estrictamente diagonal dominante por las o columnas;
o
la matriz es simetrica denida positiva.
Ejercicio 5.5 Programa el metodo de GaussSeidel modicando de forma apropiada la fun-
cion del Ejercicio 5.2.
Ejercicio 5.6 De manera similar a lo que se propuso en el Ejercicio 5.4, podemos implementar
la parte central del metodo de GaussSeidel mediante
x=l\(b-u*y)
o bien con el doble n umero de operaciones con
x=y+l\(b-a*y)
donde
86
B
o
r
r
a
d
o
r
LECCI
ON II Cap
i1
j=1
a
ij
x
(m+1)
j
n
j=i+1
a
ij
x
(m)
j
_
, i = 1, . . . , n.
Si = 1 recuperamos el metodo de GaussSeidel. El objetivo es escoger adecuadamente
para acelerar la convergencia del metodo.
No es facil encontrar el valor optimo de , aunque necesariamente (0, 2) pues en
caso contrario el metodo diverge.
Si la matriz es simetrica denida positiva o tridiagonal el metodo de relajacion converge
para cualquier (0, 2). Tambien converge si es estrictamente diagonal dominante (por
las o columnas). Sin embargo, salvo para matrices tridiagonales, poco se puede decir
acerca de la eleccion optima del parametro , y a un en este caso, la determinacion exacta
del parametro optimo exige resolver un problema bastante complicado.
Desde un punto de vista practico, el parametro se estima mediante ensayoerror. De
forma algo sorprendente, en problemas practicos es muy habitual que > 1. De ah el
nombre que se le da a veces de Sobrerrelajacion (overrelaxed).
87
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
Por ultimo, aunque no sea inmediato, se puede comprobar que este metodo encaja en
el marco anterior, sin mas que tomar
M =
1
D L, N =
1
D +U
Ejercicio 5.9 Implementa el metodo de relajacion de Young a partir del metodo de Gauss
Seidel. Incluye como nuevo argumento de entrada el parametro . Un posible valor por defecto
podra ser = 1 con lo que tendramos el metodo de GaussSeidel.
Ejercicio 5.10 De nuevo, la parte central del metodo de relajacion se puede implementar
en la forma
x=y+m\(b-a*y)
donde m es una matriz adecuada. Cual es esa matriz?.
5.2.4. Metodos de tipo gradiente
Comenzaremos recordando algunos conceptos e introduciendo algunas notaciones que
facilitaran la exposicion de los metodos de tipo gradiente.
Recordemos que todos los vectores se consideran como vectores columna. Dada A una
matriz simetrica denida positiva, la operacion que a cada par de vectores x, y le
asigna el n umero real
x
Ay
es un producto escalar, esto es, cumple las propiedades que denen un producto escalar
11
:
1. (x +y)
Az = x
Az +y
Az, , R, x, y, z R
n
;
2. x
Ay = y
Ax, x, y R
n
(por ser A simetrica);
3. x
I
n
y = x
y
es simplemente el producto escalar habitual en R
n
de x e y. Denotaremos
x y x
y = 0
y diremos en este caso que x e y son ortogonales. La misma notacion se puede extender
al producto denido por A, de forma que
x
A
y x
Ay = 0
y en este caso x e y se dicen Aortogonales.
11
Es interesante observar cuantas propiedades del producto escalar eucldeo (el habitual en R
n
) depen-
den unicamente de que se cumplan estas tres propiedades y por tanto son extensibles a estos casos mas
generales.
88
B
o
r
r
a
d
o
r
LECCI
ON II Cap
Ax.
Todas las normas son equivalentes en R
n
, pero para esta norma se tiene ademas la esti-
macion
n
|x|
2
|x|
A
1
|x|
2
donde
1
2
....
n
> 0 son los valores propios, todos reales por ser A simetrica y
positivos por ser denida positiva. La cantidad
(A) =
1
n
,
que sera relevante en lo que sigue, es el condicionamiento de la matriz
12
. Obviamente,
(A) 1.
Construimos la funcion
F(x) =
1
2
x
Ax x
b
conocida como funcional de energa. Tras unos simples calculos, se comprueba que
F = Ax b.
Por tanto, el unico posible extremo de F es la solucion de Ax b = 0. Ademas, como la
matriz hessiana de F es la propia matriz A, que es denida positiva, este extremo sera un
mnimo. Hemos llegado por tanto a la siguiente conclusion:
resolver Ax = b es equivalente a encontrar el mnimo de F
En esta observacion se basan los metodos de descenso: en lugar de resolver el sistema de
ecuaciones Ax = b, nos preocupamos en buscar el mnimo de F. Es esencial que A sea
denida positiva para que estos argumentos sean validos.
Metodos de descenso. Aspectos generales
La idea de estos metodos es sencilla. Dado un valor inicial consiste en ir moviendose
en trayectorias zigzagueantes hasta alcanzar el mnimo. Concretamente, dada una aprox-
imacion, jamos una direccion de desplazamiento, calculamos cuanto nos movemos, de-
scender en el lenguaje habitual, y nos desplazamos a un nuevo punto.
De esta forma construimos una sucesion x
m
que debera converger a x, siguiendo estos
pasos.
Calcular una direccion de descenso d
m
.
Descender una cantidad
m
, tomando como nueva aproximacion
x
m+1
= x
m
+
m
d
m
.
12
El condicionamiento se dene tambien para matrices arbitrarias reemplazando los valores propios por
los denominados valores singulares, o mas en general, deniendolo como el producto de la norma de A
por la norma de su inversa. En general el condicionamiento de la matriz mide la sensibilidad del sistema
de ecuaciones lineales asociado a variaciones del termino independiente.
89
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
Se procede as hasta que hay convergencia.
Dos aspectos determinan el metodo: que direccion se toma y cuanto se desciende. Tanto
en el metodo del Gradiente como en el metodo del Gradiente Conjugado, que veremos a
continuaci on, se toma
m
de forma que
F(x
m+1
) = mn
R
F(x
m
+d
m
)
es decir, se trata de minimizar, una vez escogida la direccion de descenso d
m
, el funcional
de energa. Deniendo
g() = F(x
m
+d
m
)
podemos comprobar que
g
() = d
m
Ad
m
d
m
(b Ax
m
)
. .
r
m
y por tanto la cantidad de descenso viene dada por
m
:=
r
m
d
m
d
m
Ad
m
, (5.3)
(obtenido al imponer g
() = 0). El vector r
m
= b Ax
m
es el residuo de x
m
, que ya
ha surgido en estas notas. Se puede probar facilmente que
r
m+1
= b Ax
m+1
= b Ax
m
m
Ad
m
= r
m
m
Ad
m
.
En consecuencia, el residuo en pasos sucesivos satisface una relacion similar a la que
cumple x
m
. Sin embargo, este tipo de recurrencia puede verse afectada por errores de
redondeo, por lo que en ocasiones el residuo se recalcula cada cierto n umero de iteraciones
de acuerdo a su denicion para cancelar cualquier error de redondeo.
El algoritmo resultante es el siguiente:
Metodo de descenso
01 x
0
inicial, r
0
= b
0
Ax
0
02 for m=0:mmax
03 Escoger d
m
04
m
:=
r
m
d
m
d
m
Ad
m
05 x
m+1
= x
m
+
m
d
m
06 r
m+1
= r
m
m
Ad
m
07 end
Claramente, la lnea 03 queda pendiente y en ultima medida dene el metodo.
90
B
o
r
r
a
d
o
r
LECCI
ON II Cap
m
r
m
r
m
p
m
05 x
m+1
= x
m
+
m
r
m
06 r
m+1
= r
m
m
p
m
07 if |r
m+1
| eps|b|
08 break
09 end
10 end
En el paso 06 estamos calculando el residuo de la solucion. El criterio de parada se
toma ahora a partir del residuo. En concreto hemos escogido el basado en el tama no
relativo del residuo (eps|b|). La norma que utilizamos es la eucldea, que es connatural
al metodo.
Ejercicio 5.11 Programa el Metodo del Gradiente.
Solucion. Una posible implementacion del metodo es la que sigue
01 % GRADIENTE
02 %
03 % X = GRADIENTE(A,B) Aplica el met. del gradiente para
04 % la resolucion del sistema AX=B
05 %
06 % X = GRADIENTE(A,B,ITMAX) ITMAX: numero max. de iteraciones
07 %
08 % X = GRADIENTE(A,B,ITMAX... EPS tolerancia relativa
09 % EPS)
10 %
11 % X = GRADIENTE(A,B,ITMAX... X0 es el valor inicial
12 % EPS, X0)
13 %
14 %[X,IT] = GRADIENTE(A,B,ITMAX... Devuelve en IT el numero de
15 % EPS,XO) iteraciones calculadas
91
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
16
17 %[X,IT,R]= GRADIENTE(A,B,ITMAX) R es un historial del metodo:
18 % EPS,XO) R(i) es el residuo en el paso i
19
20 function [x,varargout]= gradiente(a,b,varargin);
21
22 n=length(a); x=zeros(n,1); mmax=40;
23 tol=1e-6;
24
25 if nargin>2
26 mmax=varargin{1};
27 end
28 if nargin>3
29 tol=varargin{2};
30 end
31 if (nargin>4)
32 x=varargin{4};
33 end
34
35 r=b-a*x; res(1)=dot(r,r); aux=norm(b);
36 for m=1:mmax
37 p=a*r;
38 xi=res(m)/dot(r,p);
39 x=x+xi*r;
40 r=r-xi*p;
41 res(m+1)=dot(r,r); % guardamos los residuos
42 if (sqrt(res(m+1))<tol*aux);
43 break
44 end
45 end
46
47 if (m==mmax)
48 disp(numero maximo de iteraciones sobrepasado)
49 end
50 if nargout>1
51 varargout{1}=m;
52 end
53 if nargout>2
54 varargout{2}=sqrt(res(:));
55 end
56 return
El vector res guarda el residuo en cada iteracion para as tener un historial de como
ha ido la convergencia.
Prueba el metodo con un sistema donde la matriz sea simetrica denida positiva (nota:
para toda matriz B, B
ON II Cap
A(x
m+1
x) =
1
2
| x
m+1
x
. .
e
m+1
|
2
A
93
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
donde claramente e
m+1
es el error entre la solucion exacta y la numerica medido en la
norma de energa de A. Por tanto, como F(x
m+1
) F(x
m
),
|e
m+1
|
A
|e
m
|
A
luego en cada iteracion hay una reduccion del error en la norma de energa. Sin embargo,
en ning un caso implica que el residuo se reduzca en cada iteracion, como bien podemos
comprobar en la Figura 5.3. A un es mas, de la eleccion hecha de
m
se sigue que
F(x
m+1
) := mn
R
F(x
m
+r
m
)
y por tanto
|e
m+1
|
A
mn
R
|x x
m
r
m
|
A
= mn
R
|e
m
Ae
m
|
A
_
mn
R
|I A|
A
_
|e
m
|
A
.
Observa que hemos utilizado la cota |Mx|
A
|M|
A
|x|
A
, caracterstica de toda norma
vectorial y su norma matricial inducida.
Proposicion 5.5 Sean
1
y
n
el mayor y menor valor propio de A. Entonces
mn
R
|I A|
A
= mn
R
|I A|
2
=
1
1
+
n
< 1.
La convergencia se escribe de forma muy comoda en terminos del condicionamiento
de la matriz (A) =
1
n
, deduciendo la expresion
|e
m+1
|
A
(A) 1
(A) + 1
|e
m
|
A
.
Es inmediato observar que
El factor de reduccion del error es siempre menor que uno, luego hay convergencia
para toda A simetrica denida positiva.
Si (A) >> 1, la convergencia puede ser muy lenta.
Ejercicio 5.13 (puramente matematico) Se puede probar que dada A simetrica denida
positiva existe B simetrica denida positiva tal que BB
= B
2
= A, conocida como raz
cuadrada de A. Utilizando este resultado prueba la identidad
|I A|
A
= |I A|
2
utilizada en la Proposicion 5.5.
(Ayuda: Observa que |x|
A
= |Bx|
2
. Utiliza ahora que
|I A|
A
= sup
x
A
=1
|(I A)x|
A
= sup
Bx=1
|B(I A)B
1
(Bx)|
2
y completa la demostracion).
94
B
o
r
r
a
d
o
r
LECCI
ON II Cap
1
+
n
.
(Ayuda: al dibujar g
c
() para diferentes valores de c obtendras obtendras algo similar a esto
0 1 2 3 4 5
0
0.5
1
Cuales son las gracas de los valores extremos?)
El Gradiente Conjugado
El metodo del Gradiente Conjugado trata de resolver alguna de las dicultades obser-
vadas con el metodo del Gradiente, como por ejemplo el comportamiento oscilatorio del
residuo.
Observemos que en un metodo de descenso, y por la eleccion de
m
hecha en (5.3),
r
m+1
d
m
= r
m
d
m
m
d
m
Ad
m
= 0,
por lo que r
m+1
d
m
. Esto es, en un metodo de descenso el residuo del paso m + 1 es
ortogonal a la direccion de descenso anterior.
Sin embargo, en general ya no es cierto que
r
m+1
d
m1
(5.4)
y por tanto se pierde esta propiedad de ortogonalidad.
95
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
Una forma de evitar, o de mitigar, el aspecto oscilante del metodo del Gradiente, es
exigir que la direccion de descenso d
m
satisfaga (5.4). Es decir, tomamos
r
m+1
= r
m
m
Ad
m
,
y concluimos que
d
m1
r
m+1
= 0 d
m1
Ad
m
d
m1
A
d
m
.
En vista de lo anterior optamos por tomar como direccion de descenso una perturbacion
de la direccion natural r
m
(el residuo) en la direccion del descenso anterior (d
m1
) que
satisfaga la propiedad de ortogonalidad anterior. Es decir, tomamos
d
m
= r
m
+
m
d
m1
con
m
adecuado. Exigiendo que se satisfaga (5.4) deducimos que
d
m
A
d
m1
r
m
Ad
m1
+
m
d
m1
Ad
m1
= 0
m
=
r
m
Ad
m1
d
m1
Ad
m1
.
Como eleccion inicial de la direccion de descenso tomamos simplemente r
0
, el residuo
de la aproximacion inicial. Con todo esto, la primera version del metodo del Gradiente
Conjugado es la que sigue
Gradiente Conjugado - Primera version
01 x
0
inicial; r
0
= b Ax
0
; d
0
= r
0
;
02 for m=0:mmax
03 p
m
= Ad
m
04
m
=
r
m
d
m
d
m
p
m
05 x
m+1
= x
m
+
m
d
m
06 r
m+1
= r
m
m
p
m
07 if |r
m+1
| eps|b|
08 break
09 end
10
m+1
=
r
m+1
p
m
d
m
p
m
11 d
m+1
= r
m+1
+
m+1
d
m
12 end
13 disp(Numero maximo de iteraciones alcanzado)
Como puede verse, las modicaciones sobre el metodo del Gradiente son mnimas
y estan concentradas en las lneas 04, 10 y 11. En cuanto al n umero de operaciones,
96
B
o
r
r
a
d
o
r
LECCI
ON II Cap
m
d
m
= r
m
r
m
.
Por tanto
m
=
r
m
r
m
d
m
Ad
m
.
Demostracion. Como r
m
d
m1
,
r
m
d
m
= r
m
r
m
+
m
r
m
d
m1
. .
=0
. (5.5)
El segundo resultado es inmediato de la denicion de
m
.
Lema 5.7 Para todo m 0 se satisfacen las siguientes relaciones
i) d
m+1
A
d
m
.
ii) r
m+1
d
m
, r
m+1
d
m1
.
iii) r
m+1
r
m
.
Demostracion. Los puntos i) y ii) ya se han probado. Para probar iii) basta comprobar
que
r
m+1
r
m
= r
m
r
m
m
d
m
Ar
m
= r
m
r
m
m
d
m
Ad
m
+
m
m
d
m
Ad
m1
. .
=0
= r
m
r
m
m
d
m
Ad
m
.
El resultado es ahora una consecuencia del Lema 5.6.
Lema 5.8 Para todo m 0
m+1
:=
r
m+1
r
m+1
r
m
r
m
.
Demostracion. Como
Ad
m
=
1
m
(r
m+1
r
m
),
se tiene
m+1
=
r
m+1
Ad
m
d
m
Ad
m
=
1
m
r
m+1
(r
m+1
r
m
)
d
m
Ad
m
=
1
m
r
m+1
r
m+1
d
m
Ad
m
=
r
m+1
r
m+1
r
m
r
m
donde hemos utilizado que r
m+1
r
m
, y en el ultimo paso, la expresion alternativa de
m
.
Los Lemas 5.6 y 5.8 dan expresiones mas simples de los parametros
m
y
m
. De hecho
mas economicas, dado que r
m
r
m
es conocido del paso anterior y por tanto no es preciso
calcularlo de nuevo. En total dos productos escalares por iteracion.
97
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
Ejercicio 5.15 Modica el algoritmo del Gradiente Conjugado con las nuevas expresiones
de
m
y
m
. Observa que podemos evitar en esta version un producto escalar por iteracion.
El resultado sorprendente, y que descubre parte de las buenas propiedades del Gradi-
ente Conjugado, es que estas propiedades de ortogonalidad se extienden a todo el conjunto
de residuos y direcciones generados en los pasos anteriores.
Lema 5.9 Para todo m n
i) d
m
A
d
, m1;
ii) r
m+1
d
, m;
iii) r
m+1
r
, m.
La tercera propiedad implica en particular la convergencia del Gradiente Conjugado en
aritmetica exacta en a lo sumo n pasos dado que no puede haber n+1 vectores ortogonales
en R
n
y por tanto r
n+1
= 0. Sin embargo, en aplicaciones practicas puede requerir mas
de n iteraciones por los errores introducidos por la precision de la maquina.
Ejercicio 5.16 Modica el programa gradiente para implementar en una funcion de nom-
bre gradconjugado el metodo del Gradiente Conjugado.
Hemos ejecutado como antes
>> n=40;a=rand(n,n); a=a*a; x=ones(n,1); b=a*x;
>> [x,it,r]=gradconjugado(a,b,100,1e-5);
>> semilogy(r)
y hemos desplegado en la Figura 5.4 las normas de los residuos en cada paso. Como se
0 2 4 6 8 10 12 14
10
2
10
1
10
0
10
1
10
2
10
3
10
4
Residuo
Iteraciones
Figura 5.4: Historial del residuo para el metodo del Gradiente Conjugado
puede comprobar la convergencia es mas rapida y hemos reducido notablemente el molesto
comportamiento oscilatorio del residuo.
98
B
o
r
r
a
d
o
r
LECCI
ON II Cap
0
r
0
+
1
Ar
1
+. . . +
m
A
m
r
0
,
i
R.
Estos subespacios reciben el nombre de subespacios de Krylov y son clave en multitud
de metodos numericos para la resolucion de sistemas lineales. Antes de proseguir haremos
unos simples comentarios:
1. El subespacio tiene a lo sumo dimension m + 1.
2. Si q /
m
(A, r
0
), entonces Aq /
m+1
(A, r
0
). Es decir, A/
m
(A, r
0
) /
m+1
(A, r
0
).
3. Si /
m
(A, r
0
) = /
m+1
(A, r
0
), entonces /
m
(A, r
0
) = /
m+1
(A, r
0
) = /
m+2
(A, r
0
) = ...
4. Es facil comprobar que r
m
, d
m
/
m
(A, r
0
).
La demostracion del Lema 5.9 se llevara a cabo por induccion sobre m. Para m = 0 es
un simple ejercicio de comprobacion (en este caso r
0
= d
0
y por tanto ii) y iii) coinciden).
Supongamos pues que el resultado esta probado para m. Concretamente, supongamos que
para m
i) d
m
A
d
, m1 y d
0
, d
1
, . . . , d
m
es una base de /
m
(A, r
0
).
ii) r
m+1
d
, m.
iii) r
m+1
r
, m y r
0
, r
1
, . . . , r
m+1
es una base ortogonal de /
m+1
(A, r
0
).
Veamos que los puntos i)iii) se satisfacen entonces para m + 1.
i) d
m+1
A
d
, m:
99
B
o
r
r
a
d
o
r
5.2 Metodos iterativos para sistemas lineales LECCI
ON II
Este resultado esta probado ya para = m. Para m1, utilizamos que
d
m+1
= r
m+1
+
m+1
d
m
.
Por tanto, basta probar que
r
m+1
A
r
, d
m
A
d
.
El segundo es ya conocido (hipotesis de induccion). Por otro lado
r
m+1
A
r
r
m+1
Ar
.
Como Ar
/
+1
(A, r
0
) y una base de este subespacio es r
0
, r
1
, . . . , r
+1
,
concluimos que
Ar
=
0
r
0
+
1
r
1
+. . . +
+1
r
+1
con
j
R adecuados. El resultado se sigue ahora de iii) puesto que r
m+1
r
k
,
para todo k m.
Por ultimo si d
m+1
,= 0 entonces d
0
, . . . , d
m+1
es una base de /
m+1
(A, r
0
) por
ser Aortogonales y por tanto linealmente independientes.
ii) r
m+2
d
, m + 1
Para = m, m + 1 es cierto por construccion (vease Lema 5.7). Para el resto de
valores m1, utilizamos
r
m+2
= r
m+1
m+1
Ad
m+1
.
Por induccion, r
m+1
d
d
m+1
A
d
,
y esto es lo que acabamos de probar en el apartado anterior.
iii) r
m+2
r
, m + 1.
Tomemos m. Entonces
r
m+2
r
(r
m+1
m+1
Ad
m+1
) r
(Ad
m+1
) r
(d
m+1
)
A
r
.
donde hemos aplicado la hipotesis de induccion en el segundo paso. Ahora, como
r
(A, r
0
), por el punto i) podemos escribir
r
=
0
d
0
+
1
d
1
+. . . +
. (5.6)
El resultado se sigue de la propiedad i) ya que d
m+1
A
d
k
para k m. Final-
mente, si r
m+1
,= 0 entonces r
0
, . . . , r
m+1
es una base de /
m+1
(A, r
0
) por ser
ortogonales.
100
B
o
r
r
a
d
o
r
LECCI
ON II Cap
ON II
situacion se prolongo durante casi 20 a nos hasta que las ideas del precondicionamien-
to cambiaron radicalmente esta situacion y encumbraron al Gradiente Conjugado a su
posicion actual
16
.
El precondicionamiento consiste, a grandes rasgos, en cambiar el sistema por uno
equivalente
17
Ax = b, L
1
AL
. .
B
y = L
1
b
. .
c
, x = L
y
y aplicar el metodo al sistema By = c. Para su implementacion basta con conocer simple-
mente la matriz producto M = LL
I
n
y su condicionamiento
es moderado, o al menos mejor que el de A. En Matlab se encuentra implementada en
el comando cholinc. El siguiente ejercicio ilustra el efecto del precondicionamiento en la
convergencia del Gradiente Conjugado y con ello trata de convencer de la necesidad de
utilizarlo en la resolucion de (muy) grandes sistemas de ecuaciones.
Ejercicio 5.17 Las siguientes instrucciones
>> [p,e,t]=initmesh(lshapeg,Hmax,0.05);
>> [a,b]=assempde(lshapeb,p,e,t,1,0,1);
devuelven en a una matriz sparse simetrica denida positiva proveniente de resolver la ecuacion
de Poisson (una ecuacion en derivadas parciales) por el metodo de elementos nitos en un
16
La American Mathematic Society lo sit uo entre los diez algoritmos mas relevantes del siglo XX, junto
con, por ejemplo, la Transformada Rapida de Fourier (FFT) o el algoritmo QR para el calculo de valores
y vectores propios.
17
Utilizamos la notacion L
= (L
1
)
ON II Cap
ON II
>>[x2,flag2, relres2,iter2,resvec2] = pcg(a,b,[],100,R,R);
estas aplicando el metodo del Gradiente Conjugado precondicionado con R
R. Disminuye el
n umero de iteraciones? (ver iter2). Y el tiempo de calculo?. Puedes ser ahora mas exigente
con la tolerancia?.
Ejercicio 5.18 Con la orden helpwin lee la ayuda que proporciona Matlab para pcg. Que otros
metodos iterativos estan implementados?. Consulta tambien la ayuda de cholinc y luinc.
104
B
o
r
r
a
d
o
r
Leccion III
Funciones como argumento. Recursividad
Formulas de cuadratura. FFT
105
B
o
r
r
a
d
o
r
B
o
r
r
a
d
o
r
Introduccion
Hobbes clearly proves that every creature
Lives in a state of war by nature;
So naturalists observe a ea
Has smaller eas that on him prey,
And these have smaller still to biteem,
And so proceed ad innitum.
Swift, Poetry: a Rhapsody
En esta leccion abordaremos dos nuevos aspectos de Matlab: el envo de funciones
como argumentos de otras funciones y la recursividad, esto es, la habilidad de que las
funciones se llamen a s mismas. Ademas mostraremos una forma alternativa de denir
funciones en la ventana de comandos.
En la segunda parte hablaremos de las reglas de cuadratura clasicas para la aproxi-
macion de integrales y veremos una implementacion sencilla de un metodo de integracion
adaptativa. Finalizaremos con la transformada discreta de Fourier, y su calculo medi-
ante la transformada rapida de Fourier (FFT). La implementacion de estos algoritmos
servira de ilustracion de las estrategias de recursividad, que sirven para obtener un codigo
simple y legible.
107
B
o
r
r
a
d
o
r
108
B
o
r
r
a
d
o
r
Captulo 6
Matlab: Funciones como argumentos.
Recursividad
6.1. Funciones inline
En la seccion 3.2 de la Leccion I mostramos la denicion de funciones mediante cheros
de texto (con extension *.m). Existe una forma alternativa de introducir funciones en
Matlab que puede utilizarse directamente en la lnea de comandos o en el codigo de una
funcion. Por ejemplo,
>> f=inline(exp(-x)*sin(x),x);
dene la funcion f(x) = e
x
sen(x). Para evaluar se procede igual
>> f(2)
ans =
0.1231
A efectos practicos, inline es equivalente a editar una funcion con nombre f y a escribir
el correspondiente codigo. La denicion queda en memoria pero una vez cerrada la sesion
de Matlab (esto es, al salir del programa) la funcion se pierde.
Esta es pues una importante
desventaja frente la funciones basada en m-files
1
. Sin embargo puede resultar util para
tareas sencillas tanto en el modo comando como en el codigo de una subrutina.
Nada impide denir funciones con mas argumentos,
>> g=inline(x*cos(y)-y*cos(x),x,y);
Los ultimos argumentos del comando inline denen las variables de la funcion. Si no se
especican, Matlab trata de reconocer cuales son las variables y las ordena alfabeticamente:
1
En el men u, seleccionando File Save workspace as se pueden grabar las variables y funciones
utilizadas en la sesion actual de Matlab. Otra posibilidad es utilizar la orden save indicando que queremos
grabar f. En cualquier caso, ambas opciones no son muy naturales.
109
B
o
r
r
a
d
o
r
6.1 Funciones inline LECCI
ON III
>> g=inline(x^2*cos(y)-y*cos(x)*z);
>> g
g =
Inline function:
g(x,y,z) = x^2*cos(y)-y*cos(x)*z
De todas formas, expresar todas las variables explcitamente puede aclarar y facilitar la
lectura, ademas de especicar el orden de las variables en la denicion de la funcion:
>> f=inline(x*cos(k*x))
f =
Inline function:
f(k,x) = x*cos(k*x)
>> f=inline(x*cos(k*x),x,k)
f =
Inline function:
f(x,k) = x*cos(k*x)
Las funciones anteriores no estan vectorizadas, es decir, al aplicarlas sobre un vector o
matriz no act uan elemento a elemento. Para ello, debera escribirse
>> g = inline(x.^2.*cos(y)-y.*cos(x).*z);
>> g([0 pi 0],[pi 0 0], [0 0 pi]) % funcion vectorizada
ans =
0 9.8696 0
Otra forma, mas sencilla, es introducir la funcion de la forma habitual y pedir luego a
Matlab que la prepare para su aplicacion a vectores. El comando dedicado a esta tarea es
vectorize:
>> g = inline(x^2*cos(y)-y*cos(x)*z) % funcion sin vectorizar
g =
Inline function:
g(x,y,z) = x^2*cos(y)-y*cos(x)*z
>> g= vectorize(g)
110
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
Si enviamos una funcion inline, basta con insertar su nombre
>> fun=vectorize(inline(exp(-x)*cos(4*x)));
>> miplot(fun,0,2*pi,200)
Si la funcion es propia de Matlab o esta implementada en un chero m-le en la
carpeta de trabajo (o en alguna accesible), podemos
utilizar @
2
>> miplot(@sin,0,2*pi,200)
indicar el nombre de la funcion entre comillas
>> miplot(sin,0,2*pi,200)
Nota. La funcion plot dibuja el vector y versus x. Concretamente, por defecto construye
el polgono con vertices(x(i),y(i)). Si se toma un n umero suciente de puntos esto basta
para obtener una buena graca. Este comando es una de las salidas gracas mas simples de
Matlab y admite una amplia variedad de argumentos opcionales que controlan el aspecto
nal del dibujo. En una leccion posterior (Leccion V) veremos este comando y otros
relacionados con las salidas gracas.
Ejercicio 6.1 Modicar el programa miplot para que en caso de no recibir los argumentos
a y b los pida por pantalla.
(Ayuda. La orden input lee datos por pantalla tras mostrar un mensaje. Necesitaras que ahora a
y b pasen a ser argumentos opcionales.)
Ejercicio 6.2 Lee la ayuda de Matlab sobre plot. Ensaya diferentes variantes, observa como
se puede cambiar de forma sencilla tanto la forma de la graca (lnea continua, lnea a trozos,
raya-punto, solo puntos,...), el color,...
6.2.1. Recursividad
Un aspecto ya habitual en muchos lenguajes de programacion es la recursividad, es
decir, la habilidad de que una funcion se llame a s misma. Es habitual su utilizacion
cuando se programan estrategias de tipo divide y venceras, que consiste, a grandes trazos,
en dividir un problema en problemas iguales pero de menores dimensiones.
Quizas el ejemplo mas sencillo (y clasico) se basa en la funcion factorial.
n! = n (n 1) 1.
De una manera simple, podemos denir de forma recursiva
n! =
_
n (n 1)!, si n > 0,
1, si n = 0.
Su implementacion en Matlab es ahora tan sencilla como sigue
2
Matlab recomienda esta forma. El operador @ accede al handle de la funcion que es la referencia que
tiene Matlab de la funcion. Para mayor informacion, ver helpwin function handle.
112
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
114
B
o
r
r
a
d
o
r
Captulo 7
Formulas de cuadratura.
Transformada rapida de Fourier
7.1. Formulas de cuadratura
Un problema ya clasico es la aproximacion de una integral
_
b
a
f(s) ds
cuyo calculo no se puede llevar a cabo por medios analticos o bien porque conlleva un
costo elevado. Este tipo de problemas se ha planteado desde la antig uedad, con algunas
referencias que se remontan a las Matematicas clasicas en el calculo de areas y vol umenes
de guras curvas. Quizas este sea el origen de la denominacion de formula de cuadratura
a cualquier expresion que aproxime una integral denida.
La propia denicion de integral
1
se formula actualmente en terminos del lmite de
formulas de cuadratura, concretamente formulas del rectangulo. El Analisis Numerico
trata de analizar no solo la convergencia de estas formulas y otras que se puedan plantear,
sino especialmente la calidad de estas aproximaciones estimando el error que comenten.
En ultima medida, el uso local de estimaciones del error permiten dilucidar que zonas
del intervalo de integracion concentran el error cometido por nuestra formula y por tanto
donde debemos concentrar nuestro esfuerzo para reducir el error cometido. Obtenemos
as un metodo adaptativo, no rgido, que reconoce las dicultades del problema y se adapta
a el.
En esta seccion esbozaremos estas ideas recurriendo siempre a casos sencillos e ideas
intuitivas y dejando la teora en el mnimo imprescindible.
7.1.1. Primeras nociones
Desde una optica completamente ingenua, y a la vista de la graca de la funcion por
integrar, podemos plantear su aproximacion por una suma de areas de rectangulos que
aproximen el area total que dene f (Figura 7.1)
2
. A este tipo de aproximaciones se les
1
Hablamos de la integral de Rienmann.
2
Esta aproximacion esta, de hecho, detras de la denicion de la integral de Rienmann.
115
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
conoce como reglas del rectangulo. Queda por elegir el punto que al evaluar dene la
altura de cada rectangulo. Las elecciones mas sencillas son tomar el extremo inferior de
cada subintervalo, el extremo superior o, la a priori mas logica, tomar el punto medio.
0 0.5 1 1.5 2 2.5
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
particin
Regla del punto medio
0 0.5 1 1.5 2 2.5
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
0 0.5 1 1.5 2 2.5
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
Particion
Regla del trapecio
Figura 7.1: Reglas de cuadratura: punto medio y trapecio
Si, por simplicidad, nos limitamos a trabajar con particiones uniformes, es decir, a
construir rectangulos con igual base, las formulas anteriores se pueden exponer de forma
simple: en primer lugar introducimos la malla
n N, h =
b a
n
, x
j
= a +hj, x
j+1/2
= a +h(j + 1/2)
o particion asociada. Las reglas quedan ahora de la siguiente forma
Q
1
(f, h) := h
n1
j=0
f(x
j
) (Punto inferior),
Q
2
(f, h) := h
n
j=1
f(x
j
), (Punto superior)
Q
pm
(f, h) := h
n1
j=0
f(x
j+1/2
), (Punto medio)
Es difcil escapar a la sensacion de que la regla del punto medio goza de mejores
116
B
o
r
r
a
d
o
r
LECCI
ON III Cap
j=1
f(x
j
) +
1
2
f(x
n
)
_
, (Regla del trapecio).
Parecera evidente que esta aproximacion es mejor que la de las formulas de rectangulo
que hemos visto. Esta impresion es solo parcialmente correcta: de hecho la regla del punto
medio es ligeramente mejor que la regla del trapecio, como veremos mas adelante.
En cualquier caso, la regla del trapecio sugiere que podemos desarrollar formulas mas
complejas sobre cada subintervalo [x
i
, x
i+1
] para luego construir con ellas, simplemente
sumandolas, una formula en todo el intervalo [a, b]. Es por ello que a las reglas del rectangu-
lo y trapecio se les llama reglas compuestas, mientras reglas que no implican subdividir
el intervalo de integracion en intervalos mas peque nos se las conoce como reglas simples.
Ejercicio 7.1 Implementa en Matlab la regla del punto medio.
Solucion. Observemos primero que necesitamos cuatro argumentos de entrada:
Funcion a integrar f.
Puntos inicial y nal del intervalo a,b.
N umero de divisiones del intervalo n.
Una vez ledos estos datos podemos calcular h, la distancia entre dos puntos consecu-
tivos, construir un vector con los puntos donde hay que evaluar f, evaluar la funcion en
esos puntos (un nuevo vector de valores), sumar el vector y multiplicar por h.
El programa podra ser as
01 % PUNTOMEDIO
02 %
03 % PUNTOMEDIO(F,A,B,N) devuelve el valor aproximado de la
04 % integral de F entre A y B con la
05 % regla del punto medio con N puntos
06 % F debe estar vectorizada
07
08 function s=puntomedio(f,a,b,n)
09
10 h=(b-a)/n;
3
Quizas por razones de simetra. La intuicion es una arma poderosa en todas las Ciencias y en las
Matematicas en particular. Sin embargo en el Analisis Numerico puede llevar a confusiones e impresiones
erroneas. En ocasiones los metodos numericos funcionan o fallan por razones que escapan a la pura
intuicion. De todos modos, no por ello se debe desde nar, sino manejarla con algo de cuidado.
117
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
11 x=linspace(a+h/2,b-h/2,n); % calculamos puntos por evaluar
12 y=feval(f,x); % evaluamos f en esos puntos
13 s=h*sum(y); % aplicamos regla
(
1
)(b a)
3
,
_
b
a
f(s) ds
b a
2
_
f(a) +f(b)
_
=
1
12
f
(
2
)(b a)
3
.
118
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
Proposicion 7.2 Existe
3
[a, b] tal que
_
b
a
f(s) ds
b a
6
_
f(a) + 4f(c) +f(b)
_
=
1
2880
f
(4)
(
3
)(b a)
5
.
En general, tenemos la siguiente estrategia para construir reglas de mayor precision:
Tomar n N, h = (b a)/n, x
j
= a +jh con j = 0, . . . , n (n + 1 puntos).
Construir un polinomio p
n
P
n
(x) tal que
p
j
(x
j
) = f(x
j
).
Aproximar
_
b
a
f(s) ds
_
b
a
p
n
(s) ds.
Las formulas as obtenidas reciben el nombre de formulas de Newton-Cotes cerradas
5
. Las
formulas de Newton-Cotes abiertas se denen de forma similar pero tomando
x
j+1/2
= a + (j + 1/2)h, j = 0, . . . , n, h =
b a
n
.
Se denominan reglas abiertas porque ni a ni b se eval uan para aproximar la integral.
Sin embargo no es conveniente recurrir a estas formulas de cuadratura porque conforme
aumenta el n umero de puntos, las formulas tienden a ser mas inestables numericamente.
En lugar de ello, se utilizan formulas compuestas, como las del rectangulo o trapecio,
denidas a partir de formulas simples de pocos puntos. Volveremos a ello en proximos
apartados.
Ejercicio 7.4 (Matematico) Deducir los coecientes de la regla de Simpson expuestos en
(7.1).
(Ayuda: Todo polinomio de grado 2 se puede escribir en la forma p
2
(s) =
1
(s b)(s c) +
2
(s a)(s c) +
3
(s a)(s b). Cuanto valen
1
,
2
,
3
si exigimos que p
2
(a) = f(a),
p
2
(b) = f(b), p
2
(c) = f(c)?. Integra p
2
(x) y deduce la regla. Ten en cuenta que c = (a + b)/2.)
Ejercicio 7.5 Otra forma equivalente de denir y calcular las formulas de Newton-Cotes es
exigir que la formula de cuadratura integre a los polinomios de maximo grado. En el caso de
la formula de Simpson, bastara con partir de
x
j
= a +jh, j = 0, 1, 2, con h =
b a
2
,
denir
_
b
a
f(s) ds
0
f(x
0
) +
1
f(x
1
) +
2
f(x
2
).
y exigir que la formula sea exacta para f = 1, s, s
2
. Calcula as los pesos de la formula de
Simpson.
5
El hecho de que Isaac Newton aparezca ligado a estas ideas da una pista sobre la fecha a la que se
remontan estas tecnicas.
120
B
o
r
r
a
d
o
r
LECCI
ON III Cap
0
g(0) +
1
g(1) + . . . +
n
g(n)
_
.
Los pesos se determinan sin mas que exigir que sea exacta para polinomios
6
, de grado n en t.
Llegamos por tanto a las condiciones
_
n
0
g(t) dt = n(
0
g(0) +
1
g(1) + . . . +
n
g(n)), g 1, t, . . . , t
n
.
Esta forma directa de abordar el problema nos conduce al sistema
_
_
1 1 1 1
0 1 2 n
0 1 4 n
2
. . . . . . . . . . . . . . . . .
0 1 2
n
n
n
_
_
_
2
.
.
.
n
_
_
=
_
_
1
n/2
n
2
/3
.
.
.
n
n
/(n + 1)
_
_
.
Implementa una funcion que reciba como argumento n y devuelva los pesos de la formula de
Newton-Cotes cerrada de n + 1 puntos
7
.
Solucion. Recordemos en primer lugar que los vectores en Matlab se numeran a partir
de 1, lo que exige desplazar todos los ndices una unidad. Dicho esto, una implementacion
de la solucion de este ejercicio es como sigue
01 % PESOSNEWTONCOTES
02 %
03 % V=PESONEWTONCOTES(N) devuelve en V los pesos de la
04 % formula de Newton-Cotes cerrada
05 % de N+1 puntos.
06 %
07 % Esto es, la integral de f en [a,b] se aproxima por
08 %
09 % (b-a)*(w(1)*f(x(1))+w(2)*f(x(2))+...+w(n+1)*f(x(n+1)))
10 %
11 % donde x(i)=a+(i-1)*(b-a)/n i=1,...,n+1,
12
6
observa que el cambio de variable lleva polinomios de grado n a polinomios de grado n
7
La matriz del sistema recibe el nombre de Matriz de Vandermonde. Desafortunadamente es una
matriz muy mal condicionada que da problemas en su resolucion para n moderado. Ello es consecuencia
de que la base de monomios no es buena eleccion como base de los polinomios.
121
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
13 function w=pesosnewtoncotes(n)
14
15 r=0:n;
16 c=1; m=ones(1,n+1);
17 for i=1:n
18 m=[m; r.^i]; % construimos matriz del sistema
19 c=[c; n^(i)/(i+1)]; % construimos el termino independiente
20 end
21
22 w=m\c;
23 return
ON III Cap
j=1
f(x
2j1
) +
2
3
n1
j=1
f(x
2j
) +
1
3
f(x
2n
)
_
. (7.2)
La siguiente proposicion informa sobre el comportamiento de las tres formulas com-
puestas hasta ahora
Proposicion 7.3 Existen
1
,
2
,
3
[a, b] tales que
Q
pm
(f, h)
_
b
a
f(s) ds =
h
2
24
f
(
1
)(b a),
Q
tr
(f, h)
_
b
a
f(s) ds =
h
2
12
f
(
2
)(b a),
Q
sp
(f, h)
_
b
a
f(s) ds =
h
4
180
f
(4)
(
3
)(b a).
A la luz de este resultado se concluye que el error se divide por cuatro cuando h se
divide por dos para las formulas del punto medio y trapecio, y por dieciseis en el caso de la
formula de Simpson. Se dice entonces que las formulas tienen orden de convergencia
2 en los dos primeros casos y orden 4 para la regla de Simpson.
Esencialmente, el resultado anterior informa de como mejora la aproximacion de la
formula cuando aumentamos el esfuerzo computacional. Comprobamos que hay una clara
ventaja de la regla de Simpson respecto a la regla del punto medio y del trapecio. No
obstante, se observa que es necesario que la funcion tenga derivada cuarta continua para
alcanzar orden 4. En caso de que la funcion no sea tan regular, es esperable que la regla
de Simpson pierda orden.
123
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
Ejercicio 7.8 Deducir que la formula compuesta de Simpson viene efectivamente dada por
(7.2). Programar en una funcion la regla de Simpson compuesta, siguiendo las directrices
marcadas en el Ejercicio 7.1.
Ejercicio 7.9 Se trata de observar experimentalmente el orden de convergencia de las reglas
del punto medio, trapecio y de Simpson, programadas en los ejercicios 7.1, 7.2 y 7.8 mediante
una batera de experimentos.
Para ello, denimos una funcion mediante inline:
>> f=inline(x*cos(x)); f=vectorize(f);
La integral exacta se puede calcular tomando un n umero muy elevado de puntos (por ejem-
plo n = 10000) con la regla de Simpson, que es la de mayor precision. Mide el error para
diferentes valores de n y observa como decrece el error. Una buena eleccion podra ser
n = 10, 20, 40, 80, ..., esto es, multiplicando por 2 el n umero de puntos. Deberas observar que
para funciones suaves el error se divide por 4 o por 16, seg un la regla que se aplique.
Testa los programas con los siguientes ejemplos
i) f
1
(x) = x cos(x) en [0, ]
ii) f
2
(x) = xe
x
en [0, 3]
iii) f
3
(x) = x log(x) en [1, 2] y en [0, 2]
9
iv) f
4
(x) = cos
2
(x) en [0, /2], en [0, ] y en [0, 2].
Un chero script te puede venir bien para este ejercicio. Que observas con las reglas del
trapecio y del punto medio en el ultimo caso?.
Nota. En esta serie de experimentos se observa que la regla de Simpson no alcanza el
orden que la teora predice en el ejemplo iii) sobre el intervalo [0, 2]. Ello es debido a que
las derivadas de la funcion tienen una singularidad en el origen.
Menos simple de explicar es la superconvergencia (convergencia mejor de lo esperado)
que se observa para
_
2
0
cos
2
(x) (punto iv)).Esto es consecuencia de que el integrando,
ademas de regular, es periodico y se esta integrando en un m ultiplo de su intervalo
de periodicidad. En una seccion posterior daremos una explicacion a este fenomeno tan
sorprendente.
Ejercicio 7.10 Implementa la regla compuesta de 3/8, la siguiente a la regla de Simpson, que
apareca en el Ejercicio 7.6. Compara los resultados con la regla de Simpson. Que observas?
9
En este caso, evaluar en 0 es una singularidad de tipo 0 . En realidad el lmite cuando x 0 es
cero, que se puede tomar como valor de f(0). Una forma de evitar este problema es aplicar la formula en
[, 2] con << 1, por ejemplo, = 10
16
. Esta breve discrepancia en el extremo de integracion no afecta
al resultado.
124
B
o
r
r
a
d
o
r
LECCI
ON III Cap
1
,
2
,
1
,
2
R
1
p(
1
) +
2
p(
2
) =
_
1
1
p(s) ds, p 1, s, s
2
, s
3
1
+
2
= 2,
1
+
2
2
= 0,
2
1
+
2
2
2
=
2
3
,
3
1
+
2
3
2
= 0.
La solucion a dicho sistema es
1
=
2
= 1,
1
=
3
3
,
2
=
3
3
.
En resumen, una eleccion de los nodos nada obvia dene una regla de dos puntos
con mejores propiedades de convergencia que, por ejemplo, la regla del trapecio
11
.
Podemos proceder de la misma forma y dada una regla de cuadratura de n nodos
exigir que esta integre de forma exacta a polinomios de grado 2n 1. Dada la dicultad
del sistema no lineal resultante, patente ya con n = 2, se deduce que el problema debe
ser atacado desde un punto de vista muy diferente.
Existe una teora ya clasica que demuestra que
existe una unica regla de cuadratura que cumpla esas condiciones;
los pesos
i
son siempre positivos.
El segundo punto es importante, pues asegura que los pesos no puedan crecer sin
control dado que al ser positivos y al integrar de forma exacta a las constantes,
1
+. . . +
n
= 2, situacion que no se daba en las formulas de Newton-Cotes.
10
Tenemos cuatro ecuaciones con cuatro incognitas. Sin embargo el sistema es no lineal luego la teora
clasica de sistemas lineales no es aplicable. Podramos tener cuatro soluciones, siete soluciones, innitas
soluciones o ninguna solucion...
11
Este resultado le resulto ya muy chocante a Carl Friedrich Gauss, que fue el primero en notar que
una distribucion nada logica de los nodos dena una formula de cuadratura de mayor grado de precision.
125
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
La teora va mas alla puesto que es constructiva: da una forma de calcular la formula
(nodos y pesos) mucho mas eciente. En concreto, los nodos de la formula de cuadratura
son las races de una familia de polinomios, los polinomios de Legendre, que se encuentra
tabulada en multitud de textos cientcos. Los pesos
i
se pueden calcular a continuacion
resolviendo un simple sistema lineal. En la Tabla 7.1 se pueden ver los coecientes de
las primeras reglas gaussianas. Observa que la disposicion simetrica de los nodos en el
intervalo [1, 1] y de los pesos asociados.
n
i
i
n = 1
0 2
n = 2
3/3 1
3/3 1
n = 3
0.774596669 0.555555556
0.0 0.888888889
0.774596669 0.555555556
n = 4
0.861136312 0.347854845
0.339981044 0.652145155
0.339981044 0.652145155
0.861136312 0.34785484
n = 5
0.906179846 0.236926885
0.538469310 0.478628670
0.0 0.568888889
0.538469310 0.478628670
0.906179846 0.236926885
Cuadro 7.1: Primeras formulas gaussianas
Ejercicio 7.11 (Reglas gaussianas en un intervalo arbitrario) Las formulas gaus-
sianas se dan en el intervalo de referencia [1, 1] por comodidad. Como se aplicaran en un
intervalo [a, b]?.
7.1.5. Extrapolacion de Richardson
La extrapolacion de Richardson es una estrategia que permite acelerar la velocidad de
convergencia de un metodo numerico bajo determinadas condiciones.
Nos centraremos en esta seccion en la descripcion de esta tecnica aplicada a la formula
del trapecio. El metodo resultante se conoce como metodo de Romberg.
126
B
o
r
r
a
d
o
r
LECCI
ON III Cap
j=1
b
2j
h
2j
_
f
(2j1)
(b) f
(2j1)
(a)
_
+O(h
2m+2
).
El smbolo de Landau O(h
M
) indica una cantidad que es menor que una constante
multiplicada por h
M
y con dicha constante independiente de h. En otras palabras, es
equivalente a escribir
_
b
a
f(s) ds Q
tr
(f, h)
m
j=1
b
2j
h
2j
_
f
(2j1)
(b) f
(2j1)
(a)
_
C
m
h
2m+2
donde C
m
depende de m y de la derivada m + 1 de f pero no de h.
Denotando por
I =
_
b
a
f(s) ds,
0
(h) = Q
tr
(f, h) c
2j
:= b
2j
_
f
(2j1)
(b) f
(2j1)
(a)
_
se observa que para h y h/2 se dispone de los desarrollos
I =
0
(h) +
m
j=1
c
2j
h
2j
+O(h
2m+2
),
I =
0
(h/2) +
m
j=1
1
4
j
c
2j
h
2j
+O(h
2m+2
).
Multiplicando la segunda ecuacion por 4, restando la primera y despejando I obtenemos
I =
4
0
(h/2)
0
(h)
3
. .
1
(h)
+
m
j=1
1
3
_
1
4
j1
1
_
c
2j
. .
c
(1)
2j
h
2j
+O(h
2m+2
).
En particular observamos que c
(1)
2
= 0, esto es hemos cancelado el primer termino del
desarrollo, por lo que
I =
1
(h) +
m
j=2
c
(1)
2j
h
2j
+O(h
2m+2
). (7.3)
Como consecuencia
I
1
(h) = O(h
4
)
_
[I
1
(h)[ C
4
h
4
_
.
Por tanto
1
(h) es una aproximacion de la integral con orden 4. Es mas,
1
(h) cumple de
nuevo un resultado similar al de la proposicion anterior (ver (7.3)), por lo que podemos
repetir el mismo argumento y denir
12
2
(h) =
16
1
(h/2)
1
(h)
15
.
12
1
(h/2) se ha obtenido igual partiendo de
0
(h/2) y
0
(h/4)
127
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
Paso 0 Paso 1 Paso 2 Paso 3
c
o
n
v
e
r
g
e
n
c
i
a
0
(h)
//
1
(h)
//
2
(h)
//
3
(h)
0
(h/2)
//
66
n
n
n
n
n
n
n
n
n
n
n
n
n
1
(h/2)
66
n
n
n
n
n
n
n
n
n
n
n
n
n
//
2
(h/2)
66
n
n
n
n
n
n
n
n
n
n
n
n
n
0
(h/4)
//
66
n
n
n
n
n
n
n
n
n
n
n
n
1
(h/4)
66
n
n
n
n
n
n
n
n
n
n
n
n
0
(h/8)
66
n
n
n
n
n
n
n
n
n
n
n
n
Figura 7.3: Diagrama del metodo de Romberg
Es facil ver que nuevamente I
2
(h) tiene un desarrollo del error que comienza con
h
6
puesto que este combinacion ha cancelado el primer termino que apareca con
1
(h).
Como consecuencia,
2
(h) da una aproximacion de la integral de orden 6. En general se
pueden denir
j+1
(h) =
2
2j
j
(h/2)
j
(h)
2
2j
1
.
Cada una ellas satisfaciendo
[I
j
(h)[ C
j
h
2j+2
,
donde C
j
es independiente de h pero de j o de f. Observa que la convergencia solo se
asegura para j jo y h 0.
Su ventaja mas palpable es que unicamente requiere aproximaciones de la integral
obtenidas con una formula de cuadratura sencilla. Combinando resultados para valores
distintos de h se obtiene una mejora sustancial en la aproximacion de la integral. Aqu nos
hemos centrado en la formula del trapecio, pero se pueden adaptar a la formula del punto
medio o a la de Simpson. Es mas, estrategias de este tipo se aplican en diversa areas del
Analisis Numerico. Para ello, es esencial contar con un resultado del tipo enunciado en la
Proposicion 7.4. La extrapolacion sigue el sencillo diagrama de la Figura 7.3
Nota. Los resultados expuestos en esta seccion, y en concreto la Proposicion 7.4, expli-
can por que la formula del trapecio converge mejor de lo esperado para funciones regulares
y periodicas cuando se integra en un intervalo de periodicidad. Observa que en este caso
f
(2j1)
(b) = f
(2j1)
(a) y por tanto no hay terminos en h
m
para ning un m. Esto es, el
orden de convergencia es m para cualquier m, o lo que es lo mismo
_
b
a
f(s)ds Q
tr
(f, h)
C
m
h
m
, m N
donde C
m
que depende de la derivada m-esima de f (y por tanto de m) pero no de h. Con
ello se consigue una convergencia muy rapida a la integral y bastaran unos pocos puntos
128
B
o
r
r
a
d
o
r
LECCI
ON III Cap
_
b
a
f(s)ds Q
tr
(f, h)
Cr
n
con r > 1 y C independiente de r y de n, con lo que el orden es de hecho exponencial.
Ejercicio 7.12 Comprueba que si aplicas un paso de extrapolacion a la formula del trapecio
compuesta obtienes el metodo de Simpson.
Ejercicio 7.13 Implementa la extrapolacion de Richardson, seg un el siguiente prototipo de
funcion
01 % RICHARDSON
02 %
03 % V= RICHARDSON(F,A,B,N,M) Aplica la formula del trapecio con
04 N, 2*N,4*N,..., 2^(M-1)*N puntos
05 Construye la matriz de extrapolacion
06 V M x M donde V(:,i) es el resultado
07 de aplicar el paso i-1 de Richardson.
Ejercicio 7.14 Existe una forma mas general de denir la extrapolacion. Para ello precisamos
que las sucesivas h decrezcan de una forma proporcional
0
(h),
0
(rh),
0
(r
2
h), . . . ,
0
(r
n
h).
En el caso expuesto, r = 1/2. Como se adapta la extrapolacion para otras elecciones de
r (0, 1)?.
7.1.6. Integracion adaptativa
Las formulas anteriores adolecen de un importante defecto: todas asumen que el com-
portamiento de la funcion es mas o menos uniforme en todo el intervalo de integracion.
La situaci on usual es que la funcion tenga zonas donde vara de forma brusca y zonas
donde su comportamiento sea considerablemente mas suave. Intuitivamente, se entiende
que las primeras zonas son las mas problematicas. El siguiente paso en cualquier algorit-
mo numerico es dise nar metodos adaptativos. Estos esquemas reconocen aquellas zonas
que requieren mayor trabajo (renar, en la terminologa habitual) y aquellas donde basta
unas pocas evaluaciones para obtener una aproximacion sucientemente buena.
Para abordar esta tarea debemos disponer en primer lugar de un buen estimador
del error, esto es, de un postproceso que nos de informacion sobre el error que estamos
cometiendo y que as permita dilucidar que partes del intervalo de integracion requieren
mayor esfuerzo y cuales no.
13
Concretamente que la funcion sea analtica
129
B
o
r
r
a
d
o
r
7.1 Formulas de cuadratura LECCI
ON III
Zona regular Zona regular Zona Irregular
Figura 7.4: Integracion adaptativa
A continuacion expondremos una implementacion muy sencilla de una integracion
adaptativa basada en la regla de Simpson. El estimador se basa en comparar el resultado
obtenido, en cada subintervalo, por la regla de Simpson simple, y la compuesta con dos
subintervalos.
Dado que la regla de Simpson se obtiene de la regla del trapecio utilizando un unico
paso de extrapolacion (Ejercicio 7.12), obtenemos de (7.3)
_
b
a
f(s) ds
h
6
_
f(a) + 4f(c) +f(b)
_
. .
Q
1
(f)
= c
(1)
2
h
4
+O(h
6
) (7.4)
_
b
a
f(s) ds
h
12
_
f(a) + 4f(d) + 2f(c) + 4f(e) +f(b)
_
. .
Q
2
(f)
=
c
(1)
2
16
h
4
+O(h
6
) (7.5)
donde h = (b a), c es el punto medio de (a, b), d y e, los puntos medios de (a, c) y (c, b).
El termino dominante del error, para h sucientemente peque no, es c
(1)
2
h
4
de forma que
_
b
a
f(s) ds Q
1
(f) c
(1)
2j
h
4
.
A priori este termino no puede ser calculado, pero puede ser despejado de (7.4) y (7.5),
sin mas que sustraer a la primera identidad la segunda. As obtenemos
Q
2
(f) Q
1
(f)
_
1
1
16
_
c
(1)
2j
h
4
y por tanto
16
15
(Q
2
(f) Q
1
(f)) c
(1)
2j
h
4
_
b
a
f(s) ds Q
1
(f)
. .
error
.
130
B
o
r
r
a
d
o
r
LECCI
ON III Cap
16
15
(Q
1
(f) Q
2
(f))
16
15
(integ integ2)
ON III
Si hemos seguido el esquema anterior y nos vemos forzados a dividir en dos subinter-
valos, habremos evaluado ya f en a, c y en su punto medio d y en c, b y el correspondiente
punto medio e. Tambien se habra calculado la regla de Simpson en estos intervalos. Es por
ello que enviamos todos estos valores en las llamadas de la funcion simpsonadaptativo,
dado que generalmente la operacion mas costosa es precisamente evaluar la funcion.
Notemos que se ha optado por devolver como aproximacion de la integral Q
2
(f), en
lugar de Q
1
(f)
14
. Otra variante es devolver
16Q
2
(f) Q
1
(f)
15
que es el primer paso de extrapolacion de Simpson (o el segundo del trapecio, de acuerdo
al problema 7.2).
La forma mas simple de implementar el proceso anterior es introduciendo una funcion
de cabecera que prepare los datos iniciales: recibe la funcion, el intervalo de integracion y
la tolerancia solicitada, y calcula para arrancar la subrutina simpsonadaptativo el punto
medio c, los valores de f en a, b y c y el resultado de aplicar la regla de Simpson simple
en [a, b]. Por ejemplo
01 % SIMPSONRECURSIVO
02 %
03 % INTEG= SIMPSONRECURSIVO (F,A,B,TOL)
04 %
05 % Devuelve una aproximacion de la integral mediante
06 % una integracion adaptativa basada en la regla de Simpson
07 % con tolerancia TOL
08
09 function integ=simpsonrecursivo(f,a,b,tol)
10
11 c=(a+b)/2;
12 fa=feval(f,a);
13 fb=feval(f,b);
14 fc=feval(f,c);
15 integ=(b-a)*(fa+4*fb+fc)/6; %regla de Simpson
16 integ=simpsonadaptativo(f,a,c,b,fa,fc,fb,integ,tol);
17 return
Resta por programar la funcion simpsonadaptativo, trabajo que proponemos al lec-
tor.
Ejercicio 7.15 Implementa la regla de Simpson adaptativa.
Ejercicio 7.16 El metodo tal como esta programado puede entrar en un bucle innito si no
se consigue integrar con la tolerancia exigida en las sucesivas subdivisiones de un intervalo.
Para evitar este problema hacemos que el programa lleve control del n umero de veces que ha
subdividido un intervalo. La funcion puede seguir la siguiente sintaxis
14
Casi nadie dudara en esta eleccion. Es decir, es esperable que Q
2
(f) sea mejor que Q
1
(f), as que por
que no devolver lo mejor que se tiene?. Matematicamente, sin embargo, el estimador del error controla
el error de Q
1
(f) y no de Q
2
(f).
132
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
Adaptativa Pto. medio Trapecio Simpson
tol Error neval Error Error Error
10
1
8.91e03 7 8.01e3 3.67e2 1.01e2
10
2
1.41e04 15 2.70e3 1.06e2 3.59e3
10
3
1.57e06 29 1.03e3 3.81e3 1.40e3
10
4
2.12e07 47 5.01e4 1.82e3 6.90e4
10
5
8.48e09 77 2.45e4 8.67e4 3.33e4
10
6
2.64e10 133 1.09e4 3.81e4 1.36e4
10
7
8.27e12 233 4.73e5 1.64e4 6.41e5
10
8
2.25e13 421 1.96e5 6.76e5 2.65e5
Cuadro 7.2: Resultados numericos para
_
2
0
ON III Cap
mZ
f(m) =
_
1
0
f() exp(2im)d, m Z.
La convergencia de la serie es un asunto algo delicado
16
, pero si la funcion tiene, por
ejemplo, derivada continua, la convergencia de la serie es uniforme:
max
[0,1]
f()
s
m=r
m=
[
f(m)[
2
(7.7)
que se interpreta como que la energa de funcion original f es igual a la energa del vector
innito (. . . ,
f(2),
f(1),
f(0),
f(1),
f(2), . . .)
.
16
Mucho se ha escrito sobre esto. En cualquier caso hay que especicar en que sentido converge la
serie. El sitio mas adecuado, matematicamente hablando, es el espacio de las funciones cuyo cuadrado
es integrable, que se denota por L
2
(0, 1). Fsicamente se interpreta como el espacio de las se nales cuya
energa es nita.
135
B
o
r
r
a
d
o
r
7.2 Transformada rapida de Fourier LECCI
ON III
-0.2 0 0.2 0.4 0.6 0.8 1 1.2
-1
-0.5
0
0.5
1
1.5
Parte Real e Imaginaria de exp(2 i m) para m=1,2,3
Freq.1 periodo 1
Freq 2 periodo 1/2
Freq 3 periodo 1/3
Figura 7.6: Primeras exponenciales trigonometricas.
Nota. Utilizando la denicion de la exponencial trigonometrica, podemos expresar
f =
f(0) +
m=1
(
f(m) +
f(m))
. .
=:
m
cos(2m ) +
m=1
i(
f(m)
f(m))
. .
=:
m
sen(2m ) (7.8)
donde
m
y
m
se pueden calcular de forma alternativa mediante
m
= 2
_
1
0
f() cos(2m) d,
m
= 2
_
1
0
f() sen(2m) d.
La expresion (7.8) puede resultar mas atractiva que (7.6), especialmente si la funcion es
real puesto que implica trabajar unicamente con cantidades reales, sin parte imaginaria.
Sin embargo, tanto el analisis como una notacion mas compacta animan a utilizar la
exponencial compleja. A un es mas, en lo que sigue podemos suponer que las funciones
son complejas (devuelven valores en C) y por tanto se cubre este caso de forma muy
natural.
Desde un punto de vista practico, es poco habitual que se pueda (o que se proceda a)
evaluar la funcion en cualquier punto. En lugar de ello se dispone de un muestreo es decir,
del valor de la funcion en una serie de puntos uniformemente distribuidos. As denimos
x
j
=
j
N
, j = 0, . . . , N 1,
se eval ua
y
j
:= f (x
j
) , j = 0, . . . , N 1
136
B
o
r
r
a
d
o
r
LECCI
ON III Cap
_
y
0
y
1
.
.
.
y
N1
_
_
.
La primera cuestion es
Es posible recuperar los coecientes de Fourier de f a partir de y?
La respuesta obvia es no: si tomamos una cantidad nita de informacion es imposible
recuperar (salvo en casos triviales) los coecientes de Fourier, que en ultima media son la
funcion y, por tanto, conllevan una cantidad innita de informacion.
Ahora bien, la situacion es muy diferente si disponemos de informacion a priori sobre
la funcion f. Si una funcion periodica f es regular podemos probar que
f(k) 0, [k[
y de hecho de una forma muy rapida (ver Ejercicio 7.18), por lo que unos pocos coecientes
pueden ser sucientes para reconstruir la funcion de forma muy aproximada.
Para calcular estos coecientes utilizamos la regla del trapecio, que como hemos visto
en la seccion anterior converge muy rapidos para funciones regulares y periodicas. Todo
lo anterior nos conduce a
f(k) :=
_
1
0
f()exp(2ik) d
1
N
_
1
2
f(0) +
N1
j=1
f(
j
N
) exp(
2ijk
N
) +
1
2
f(1)
_
f(1) = f(0) = y
0
=
=
1
N
N1
j=0
y
j
jk
donde
:= exp
_
2i
N
_
.
Lo anterior sugiere construir
Y
k
:=
1
N
N1
j=0
y
j
jk
como una aproximacion de
f(k). El vector
Y =
_
_
y
0
y
1
.
.
.
y
N1
_
_
recibe el nombre de transformada discreta de Fourier de y que denotaremos por
Fy = Y. Por tanto F : C
N
C
N
, es decir, transforma vectores de n umeros (en principio)
complejos en vectores complejos.
137
B
o
r
r
a
d
o
r
7.2 Transformada rapida de Fourier LECCI
ON III
Ejercicio 7.18 Sea f es periodica con derivada primera continua,
f(k) :=
_
1
0
f() exp(2ik) d =
1
2ki
f() exp(2ik)
=1
=0
. .
= 0
+
1
2ki
_
1
0
f
() exp(2ik) d.
Demostrar entonces que
[
f(k)[
C
k
donde C es independiente de k. De que depende C?. Prueba reiterando este argumento que
si f es mas regular el decrecimiento de
f(k) es mas acusado.
Para estudiar la relacion entre transformada de Fourier continua y discreta precisamos
del siguiente lema
Lema 7.5 Para todo k Z
1
N
N1
j=0
exp
_
2ijk
N
_
=
_
1, k = N para alg un Z,
0, en caso contrario.
Demostracion. Tomemos como antes
:= exp
_
2i
N
_
.
Entonces, la suma anterior es simplemente
1
N
N1
j=0
jk
=
1
N
N1
j=0
(
k
)
j
.
Si k = N, es decir, si k es un m ultiplo de N,
k
= exp(2i) = 1 y la suma anterior es
1. En caso contrario, teniendo en cuenta que
1 +r +r
2
+. . . +r
m1
=
1 r
m
1 r
obtenemos que
1
N
N1
j=0
(
k
)
j
=
1
N
1 (
k
)
N
1
k
=
1
N
1 (
N
)
k
1
k
.
Ahora, como
N
= 1, se sigue que la suma anterior es nula.
Utilizando el desarrollo en Fourier de f e intercambiando el orden de los sumatorios
17
podemos escribir
Y
k
:=
1
N
N1
j=0
y
j
jk
=
1
N
N1
j=0
f(x
j
) exp
_
2ijk
N
_
=
1
N
mZ
f(m)
_
N1
j=0
exp
_
2i(mk)j
N
__
.
17
Manipulaciones que deben siempre justicarse y que son validas si, por ejemplo, la funcion tiene
derivada primera continua.
138
B
o
r
r
a
d
o
r
LECCI
ON III Cap
j=0
exp
_
2i(mk)j
N
_
=
_
1, si m = k +N,
0, en caso contrario,
por lo que
Y
k
=
1
N
mZ
f(k +mN).
De esta forma, Y
k
recoge no solo el coeciente kesimo de Fourier, sino contribuciones en
frecuencias mas altas, cuya distancia al coeciente k dista un m ultiplo de N.
Llegado a este punto, conviene recordar que el decreciemiento rapido a cero de los
coecientes de Fourier cuando [k[ sugiere que Y
k
aproxima bien al coeciente
de Fourier mas proximo a cero y la aproximacion mejora muy rapidamente cuando
N . Es decir,
Y
k
=
_
f(k)+
m=0
f(k +mN)
. .
peque no
, si 0 k
N
2
f(k N)+
m=0
f(k +mN)
. .
peque no
, si
N
2
< k < N.
(7.9)
A la operacion que a cada Y le asocia el vector original y se conoce como transfor-
mada inversa de Fourier discreta y se denota
F
1
Y = y.
Con argumentos similares a los utilizados anteriormente se puede ver que
y
k
:=
N1
j=0
Y
j
exp
_
2ijk
N
_
,
obteniendose as una expresion muy similar a la transformada de Fourier. En particular,
concluimos que F
1
existe y esta bien denida.
Nota. En el marco continuo, tenamos que
f(m) =
_
1
0
f() exp(2im) d, f() =
mZ
f(m) exp(2im).
Observese el paralelismo entre la Transformada de Fourier Discreta, y la integral de la
expresion superior (la primera es la aproximacion discreta de la segunda) y la inversa de
la Transformada de Fourier Discreta con la serie de Fourier.
Ejercicio 7.19 Prueba la expresion dada para la inversa de la transformada discreta de
Fourier.
139
B
o
r
r
a
d
o
r
7.2 Transformada rapida de Fourier LECCI
ON III
Ejercicio 7.20 Dado que vamos a calcular aproximaciones de los coecientes centrales de
Fourier, podramos plantearnos denir
Y
k
=
N1
j=0
y
j
jk
, N/2 < k N/2
Sabras ver que relacion hay entre
Y
k
e Y
k
?.
7.2.2. Calculo de la transformada de Fourier Discreta
Es facil dar una expresion matricial de la transformada de Fourier discreta en terminos
de la matriz
W :=
_
_
1 1 1 1
1
2
N1
1
2
4
2(N1)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
N1
2(N1)
(N1)
2
_
_
, = exp
_
2i
N
_
Con esta matriz, la relacion entre y y su transformada Y se escribe simplemente
Y = Fy =
1
N
Wy.
Analogamente,
y = F
1
Y = W
Y
donde W
es la matriz adjunta
W
=
_
_
1 1 1 1
1
2
N1
1
2
4
2(N1)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
N1
2(N1)
(N1)
2
_
_
, =
1
= exp
_
2i
N
_
La matriz W es una matriz de tipo Vandermonde, que ya surgido anteriormente.
Ademas es casi ortogonal:
W
W = N I
N
donde I
N
la matriz identidad de orden N.
En resumen, la transformada discreta de Fourier, y su transformada inversa, se reducen
a calcular un producto matriz-vector. El costo, en una implementacion directa, conlleva
la construccion de la matriz y realizar el producto. Solo el producto tiene un costo de
orden O(2N
2
) operaciones (sumas y productos).
Ejercicio 7.21 Construye la matriz W
.
Ejercicio 7.22 Implementa la transformada discreta de Fourier.
140
B
o
r
r
a
d
o
r
LECCI
ON III Cap
Y =
1
N
2
(Wy)
(Wy) =
1
N
2
y
Wy =
1
N
y
y =
1
N
|y|
2
2
. (7.10)
Hay una falta de consenso en la denicion de Transformada de Fourier discreta.
Nosotros hemos tomado como denicion de la transformada y de su inversa las dadas
por
Y
k
:=
1
N
N1
j=0
y
j
jk
, y
k
:=
N1
j=0
Y
j
jk
, = exp(
2i
N
).
141
B
o
r
r
a
d
o
r
7.2 Transformada rapida de Fourier LECCI
ON III
En Matlab, la transformada de Fourier y su inversa estan implementadas en fft e ifft.
La denicion que se toma es ligeramente diferente
Y
k
:=
N1
j=0
y
j
jk
, y
k
:=
1
N
N1
j=0
Y
j
jk
, = exp(
2i
N
).
En otros textos se multiplica por 1/
N
142
B
o
r
r
a
d
o
r
LECCI
ON III Cap
Y.
La estrategia que planteamos es la siguiente. En el caso de que
Y
j
sea grande, pode-
mos aceptar este coeciente dado que el error relativo es peque no. Por contra, si
Y
j
es
peque no, el error relativo que hemos introducido es tal que la informacion ha quedado
irremediablemente contaminada y por tanto debemos desecharla.
Lo anterior sugiere una forma de depurar la se nala, partiendo de un nuevo vector Z
Z
k
=
_
0 si [
Y
k
[ es peque no,
Y
k
en otro caso.
(7.11)
Con la informacion que nos queda, reconstruimos la se nal discreta original y mediante
F
1
Z. As tenemos el siguiente diagrama
y
+ ruido
y
F
Y
(7.11)
Z
F
1
z.
Al nal de proceso, z es (debera ser) mejor aproximacion de y que la se nal perturbada
y.
En la Figuras 7.9 se muestran los resultados obtenidos con n = 64 y n = 256. Se puede
observar como la se nal es ltrada eliminando gran parte del ruido introducido.
143
B
o
r
r
a
d
o
r
7.2 Transformada rapida de Fourier LECCI
ON III
10 20 30 40
0
0.02
0.04
0.06
0.08
10 20 30 40
0
0.005
0.01
0.015
50 100 150
0
0.02
0.04
0.06
0.08
50 100 150
0
2
4
6
8
x 10
-3
Figura 7.8: Ruido en un conjunto de puntos (40 arriba, 160 abajo) y su transformada
discreta
7.2.4. Transformada rapida de Fourier
La importancia del analisis de Fourier, y por ende de la transformada discreta de
Fourier, fue cobrando fuerza a lo largo del siglo XX y muchos aspectos siguen demandando
este tipo de tecnicas en el siglo actual.
Pronto surgieron problemas que requeran calcular la transformada de Fourier de mil-
lones de elementos, lo que colocaba el problema mas alla de la potencia de los ordenadores
de la epoca y los de un futuro previsible
18
. En cualquier caso duplicar N, el n umero de
elementos de y, requerira multiplicar por cuatro la potencia del ordenador. Siguiendo el
progreso de la informatica, esto signicara una espera de 36 meses
19
.
18
Hemos mostrado algunas aplicaciones simples de la transformada de Fourier que son esencialmente
unidimensionales (una se nal periodica). Existen aplicaciones que exigen trabajar ya con se nales bidimen-
sionales. En ese caso, duplicar la precision con la que se trabaja implica multiplicar por 4 la dimension
del problema y por 16 la complejidad computacional del algoritmo que hemos visto. Problemas en mas
dimensiones y con n umeros muy elevados de variables no son extra nos.
19
La ley de Moore formulada por Gordon Moore cofundador de Intel en 1965 es un ejemplo de una
ley emprica que se viene satisfaciendo con asombrosa regularidad en los ultimos cuarenta a nos. Esta ley
establece que la potencia de calculo y la capacidad de almacenamiento se multiplica por 2 cada 18 meses.
De forma paralela han surgido otras versiones de la ley de Moore que establecen comportamientos de
crecimiento exponencial en el mundo de la informatica.
144
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
En 1965, Jim Cooley, investigador ligado a IBM y John Tukey, de la Universidad de
Princeton mostraron una forma sencilla de programar la transformada de Fourier discreta
que reduca drasticamente el n umero de operaciones.
La idea de partida del algoritmo es considerar el caso N = 2m. Entonces denotando
1
:=
2
se tiene que
2jk
= (
2
)
kj
=
jk
1
.
De esta forma, si 0 k M 1 = N/2 1
Y
k
=
1
N
N1
j=0
y
j
jk
=
1
N
M1
j=0
y
2j
2jk
. .
Pares
+
1
N
M1
j=0
y
2j+1
(2j+1)k
. .
Impares
N = 2M
=
1
2
_
1
M
M1
j=0
y
2j
jk
1
+
k
1
M
M1
j=0
y
2j+1
jk
1
_
=:
1
2
_
Y
(0)
k
+
k
Y
(1)
k
_
. (7.12)
Notemos que Y
(0)
k
e Y
(1)
k
son el resultado de aplicar la transformada de Fourier disc-
reta a los vectores (y
0
, y
2
, . . . , y
2M2
)
y a (y
1
, y
3
, . . . , y
2M1
)
j=0
y
j
jk
=
1
N
M1
j=0
y
2j
2jk
+
1
N
M1
j=0
y
2j+1
(2j+1)k
=
1
2
_
1
M
M1
j=0
y
2j
jM
1
j
1
+
M
1
M
M1
j=0
y
2j+1
j
1
_
.
Dado que
M
= exp(i) = 1,
M
1
= 1;
se deduce que
Y
k
=
1
2
_
Y
(0)
Y
(1)
. (7.13)
Denotando por
_
v
w
y
(y
1
, y
3
, . . . , y
2M1
)
,
= (
0
,
1
, . . . ,
M1
)
, := exp(
2i
N
), (7.15)
146
B
o
r
r
a
d
o
r
LECCI
ON III Cap
Y(0 : N/2 1) = (Y
(0)
+. Y
(1)
)/2
Y(N/2 : N 1) = (Y
(0)
. Y
(1)
)/2
end
En tal caso, se puede comprobar que el n umero de productos es
f(N) = 2
p
(p + 1) = N(log
2
(N) + 1)
que debe compararse con el N
2
esperable de la implementacion directa. De ah viene el
nombre de Transformada Rapida de Fourier.
Ejercicio 7.24 Implementa la transformada rapida de Fourier.
Ayuda. No utilices fft como nombre de esta funcion, dado que este es el comando de
Matlab para el calculo de la transformada rapida de Fourier. Entrando ya en programa, en
primer lugar podemos plantearnos como se va a devolver el resultado, si como un vector
la o como un vector columna. Para ello, la primera instruccion de nuestra subrutina
podra ser
y=y(:); Y=y;
si se quiere trabajar solo con columnas, o
147
B
o
r
r
a
d
o
r
7.2 Transformada rapida de Fourier LECCI
ON III
y=y(:).; Y=y;
si se desea implementar para las. Fjate que ya hemos introducido el vector que va a
guardar la transformada de Fourier y que sus dimensiones coinciden con las del vector y.
Llegado a este punto, hay que tener cuidado al programar el producto
. Y
(1)
para que los vectores implicados, e Y
(1)
tengan igual dimension.
Si el vector tiene un n umero par de elementos, la transformada se calcula a partir de
la transformada de los vectores
y(1 : 2 : n) (y
0
, y
2
, . . . , y
n2
)
, (Y
(0)
)
y(2 : 2 : n) (y
1
, y
3
, . . . , y
n1
)
, (Y
(1)
)
de acuerdo con el algoritmo (vease tambien (7.14) y (7.15)).
Cuando el n umero de entradas de y no sea una potencia de 2 se puede utilizar el primer
algoritmo que dimos (ejercicio 7.22). De esta manera tendramos la siguiente estructura
y=y(:); n=length(y);
if mod(n,2)==0
...... % expresion RECURSIVA en terminos de dos transformadas
......
else % no es divisible por 2
...... % Algoritmo del ejercicio 7.22
end
En las lneas anteriores, mod(m,n) devuelve el resto de la division de m entre n y sirve
para comprobar si el n umero de entradas es par o impar.
Ejercicio 7.25 Implementa una funcion recursiva que devuelva el n umero de operaciones
para el calculo de la FFT. Utilzala para obtener una tabla con el n umero de operaciones para
algunos valores altos de N. Compara con el n umero de operaciones requerido en la version
inicial del algoritmo dada antes.
Solucion.
Esta es una forma simple de implementar la funcion
01 % OPERACIONESFFT(N)
02 %
03 % M=OPERACIONESFFT(N)
04 %
05 % M es el numero de operaciones de la FFT
06
07 function M=operacionesFFT(N)
08
09 if mod(N,2)==1
10 M=N^2;
11 else
12 M=operacionesFFT(N/2)*2+N;
13 end
148
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
La FFT y el producto de n umeros enteros
Dados dos vectores
u = (u
0
, u
1
, . . . , u
r
)
, v = (v
0
, v
1
, . . . , v
s
)
+j=k
u
v
j
=
mn{k,r}
=max{0,ks}
u
v
k
, (k = 0, . . . , r +s). (7.16)
Es facil comprobar que la convolucion, tambien llamado producto de convolucion, es
conmutativo. Esta operacion es simplemente el producto de polinomios. En efecto, si
consideramos los polinomios
u
0
+u
1
x +. . . +u
r
x
r
, v
0
+v
1
x +. . . +v
s
x
s
entonces el coeciente en x
k
del polinomios producto viene dado precisamente por (7.16).
Una propiedad interesante de la transformada de Fourier discreta es que convierte la
convolucion de dos vectores en producto de transformadas. Tomemos N = r + s. Si u y
v se insertan en R
n+1
rellenando con ceros
u = (u
0
, u
1
, . . . , u
r
, 0, . . . , 0
. .
N r = s ceros
)
, v = (v
0
, v
1
, . . . , v
s
, 0, . . . , 0
. .
N s = r ceros
)
tenemos que
F(u v) = N (F(u). F(v)),
donde la operacion anterior es el producto elemento a elemento entre los vectores. As, una
forma rapida de calcular la convolucion de los dos vectores es seguir el siguiente algoritmo
Calcular U = F(u), V = F(v)
Multiplicar W = N U. V
Devolver F
1
(W)
Si N = r + s es una potencia de 2 entonces el n umero de operaciones es del orden de
O(nlog
2
(N)), comparado con 2N
2
que tiene la implementacion mas directa.
Una de las aplicaciones mas simples del calculo de productos de convolucion esta en
el producto de n umeros enteros. Por ejemplo,
6031 1 +3 10 +0 10
2
+6 10
3
1234 4 +3 10 +2 10
2
+1 10
3
_
6031 1234 = 4 + 15 10
1
+ 11 10
2
+ 31 10
3
+ 21 10
4
+ 12 10
5
+ 6 10
6
= 7442254.
Es decir, se trata simplemente del producto de polinomios con 10 jugando el papel de
x, o equivalentemente, la convolucion entre dos vectores:
6031 (1, 3, 0, 6, 0, 0, 0, 0) =: u
1234 (4, 3, 2, 1, 0, 0, 0, 0) =: v
_
u v = (4, 15, 11, 31, 21, 12, 6)
Por tanto, la FFT nos ofrece una forma muy rapida de multiplicar dos n umeros enteros.
150
B
o
r
r
a
d
o
r
LECCI
ON III Cap
ON III
Por ultimo una vez multiplicados hay un paso de acarreo, es decir, un resultado de forma
que
[4 15 11 31 21 12 6] 4 + 15 10
1
+ 11 10
2
+ 31 10
3
+ 21 10
4
+ 12 10
5
+ 6 10
6
debe transformarse en su representacion decimal
4 + 5 10
1
+ 2 10
2
+ 2 10
3
+ 4 10
4
+ 4 10
5
+ 7 10
6
= 744224.
Nota. Para que preocuparse en multiplicar n umeros enteros? Es decir, no parece haber
una necesidad acuciente de dise nar algorimos para multiplicar n umeros de centenares o
miles de cifras. Una aplicacion sorprendente proviene del mundo de cifrado de mensajes.
El sistema de cifrado mas popular actualmente es el RSA, propuesto por los matematicos
21
Ron Rivest, Adin Shamir y Len Adleman en 1977, esta basado en el conocido Teorema
Peque no de Fermat
22
. Este teorema, muy simple, tiene que ver con los restos de la division
por n umeros primos. El mensaje que se desea enviar se convierte en un n umero entero,
mas o menos largo. El cifrado y descifrado del mensaje se basa en calcular restos de di-
visiones por el producto de dos n umeros primos muy grandes. La seguridad del sistema
depende directamente del tama no de estos primos: mayor tama no es mayor seguridad.
Ello hace que se requiera calcular productos y divisiones de n umeros enteros enormes de
forma rapida y eciente
23
.
Nota. La convolucion esta implementada en Matlab mediante el comando conv. La
forma de calcular es esencialmente la expuesta en esta seccion.
21
El nombre del algoritmo son las iniciales de sus apellidos.
22
Nada que ver con el
Ultimo Teorema de Fermat, cuya demostracion tuvo que esperar cuatro siglos.
23
Para una informacion mas detallada, mrese por ejemplo http://en.wikipedia.org/wiki/Rsa.
152
B
o
r
r
a
d
o
r
Leccion IV
Calculo simbolico, arrays y celdas en Matlab.
Valores y vectores propios. Google.
153
B
o
r
r
a
d
o
r
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
.
155
B
o
r
r
a
d
o
r
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 computa-
cionalmente 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
157
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.
158
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
En la segunda parte de esta leccion nos centraremos en los metodos numericos para el
calculo de las races de estos polinomios
2
.
Nota. Un problema clasico
3
es la determinacion de las races de un polinomio. La
ecuacion de segundo grado aparece mas o menos resuelta en las Matematicas antiguas:
babilonicas, 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
Archive 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.
160
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
a
n1
a
n2
a
1
a
0
1 0 0 0
0 1
.
.
.
0 0
.
.
.
.
.
.
.
.
.
.
.
.
0 0 1 0
_
_
Al calculo de los valores propios de una matriz volveremos en la segunda parte de esta
leccion.
8.2. Procesador simbolico
Retomando el hilo de la seccion anterior, otra forma de operar con polinomios es de
manera simbolica. Para ello podemos proceder del siguiente modo:
>> syms x %define x como variable simbolica
>> (x^4+x^2-1)+(2*x^3+4*x^2+3) %suma de polinomios
ans =
x^4+5*x^2+2+2*x^3
>> expand((x^4+x^2-1)*(2*x^3+4*x^2+3)) %expande el producto
ans =
2*x^7+4*x^6+2*x^5+7*x^4-2*x^3-x^2-3
Observa con atencion la primera instruccion. Con syms, declaramos x con una variable
simbolica y por tanto susceptible de entrar en expresiones y manipulaciones algebraicas.
Las ordenes anteriores pueden aplicarse sobre funciones cualesquiera, no necesaria-
mente polinomicas:
>> syms x y
>> expand(cos(x+y))
ans=
cos(x)*cos(y)-sin(x)*sin(y)
Podemos llevar a cabo operaciones de calculo basico tales como la integracion o la
derivacion:
7
De hecho, as procede roots.
161
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
162
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
Nota. Matlab es un programa mas enfocado al calculo numerico que al simbolico. Cier-
tamente los resultados son presentados de una forma que esteticamente no es comparable
a Mathematica o Maple. Sin embargo se puede acceder a cualquier instruccion de Maple
luego a priori todo lo que se puede hacer con este procesador se puede hacer con Matlab.
Para llamar a un comando de Maple se utiliza el comando maple, mientras que a la ayuda
correspondiente se accede con mhelp.
8.3. Tensores
Ya hemos hablado en m ultiples ocasiones de la gran potencia que posee Matlab para
realizar calculos matriciales
8
y su habilidad en el manejo de grandes cantidades de memo-
ria. Estas habilidades se extienden a la manipulacion de arrays multidimensionales, que
matematicamente se puede identicar con tensores. Un tensor es simplemente una matriz
multidimensional, esto es, si una matriz se puede interpretar como una tabla de n umeros,
un tensor (o array) tridimensional es simplemente un conjunto de n umeros desplegados
en 3D en forma de paralelogramo. As
>> a=zeros(1,3,2)
a(:,:,1) =
0 0 0
a(:,:,2) =
0 0 0
dene un array de una la, tres columnas y dos alturas. Abandonaremos en lo que sigue
este smil geometrico pues aporta poco. Se puede declarar un tensor simplemente dando
sus valores
>> a2(:,:,1)=[1 2 3;4 5 6]
a2 =
1 2 3
4 5 6
>> a2(:,:,2)=[7 8 9;10 11 12]
a2(:,:,1) =
1 2 3
4 5 6
8
Recuerda Matlab = Matrix laboratory
164
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
1 2 3
4 5 6
Por tanto, de las variables que acabamos de denir unicamente a3 es una matriz propia-
mente dicha.
La forma de operar con tensores es basicamente la misma que con vectores y matrices.
Por ejemplo:
>> b=a+ones(2,3,2)
b(:,:,1) =
2 3 4
5 6 7
b(:,:,2) =
8 9 10
11 12 13
>> b(:,2:3,2)=[-1 -2;-3 -4]
b(:,:,1) =
2 3 4
3 3 3
b(:,:,2) =
8 -1 -2
3 -3 -4
>> b(:) % como se guarda en memoria...
ans =
2 3 3 3 4 3 8 3 -1 -3 -2 -4
Ejemplo. Mediante las siguientes ordenes calculamos las cinco primeras potencias de
la matriz a y las almacenamos en una variable tridimensional b:
a=[1 2;3 4];
b(:,:,1)=a;
for i=2:5
b(:,:,i)=b(:,:,i-1)*a; %b(:,:,i) guarda a^i
end
166
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
8.4. Vectores de celdas
Aunque los tensores a naden mayor exibilidad a las matrices y vectores, siguen siendo
estructuras rgidas (todas las entradas deben ser n umeros reales, a(1,:,:,:) debe tener
la misma dimension que a(2,:,:,:),...).
Matlab cuenta con una estructura que probablemente sea el paradigma de la exibilidad
en tanto en cuanto permite guardar casi cualquier tipo de dato. Es, por as decirlo, un
cajon de sastre. Este tipo de estructura se denomina vector (matriz o tensor) de celdas
o cell array. Ya nos hemos encontrado con esta estructura cuando vimos el dise no de
funciones cuyo n umero de parametros de entrada y/o salida era variable. Las variables
varargin y varargout son realmente vectores de celdas que contenan distintos tipos de
datos a los que se acceda mediante llaves. Un vector de celdas se maneja del mismo. A
modo de ejemplo podemos crear un vector de celdas simplemente asignando valores
>> celda={7,[1 2 3;4 5 6],una cadena de caracteres,inline(x+y)};
>> whos celda
Name Size Bytes Class
celda 1x4 1214 cell array
Grand total is 95 elements using 1214 bytes
que es equivalente a dar cada una de sus componentes
>> celda{1}=7;
>> celda{2}=[1 2 3;4 5 6];
>> celda{3}=una cadena de caracteres;
>> celda{4}=inline(x+y);
Tambien se puede proceder, con peque nas diferencias de sintaxis, de la siguiente forma
>> celda(1)={7};
>> celda(2)={[1 2 3;4 5 6]};
Fjate en la disposicion de las llaves en los dos ejemplos anteriores. En cualquier caso, una
vez denido el vector podemos acceder a cada una de sus componentes indicando entre
llaves su posicion
>> celda{1}
ans =
7
>> celda{4}([1 2 4], [2 1 1/2]) % funcion!!
ans =
3.0000 3.0000 4.5000
168
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
170
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 car-
acterstico 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 in-
estabilidad numerica:
171
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 modica-
ciones 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 podemos en-
contrarnos 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.
172
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
, y por tanto
P
AP = D.
Las matrices ortogonales son muy estables numericamente y posibilitan el dise no de meto-
dos mas robustos frente a errores de redondeo.
2
Recogida por D. Kincaid y W. Cheney en su excelente libro Analisis Numerico: Las Matematicas
del Calculo Cientco. Addison-Wesley, 1994.
3
Como asumir que las races de un polinomio tan sencillo fueran imposibles de aproximar por un
ordenador? Wilkinson dira despues Speaking for myself I regard it as the most traumatic experience in
my career as a numerical analyst
173
B
o
r
r
a
d
o
r
9.3 Metodo de potencias LECCI
ON IV
Teorema 9.1 Si A es simetrica, existe Q ortogonal tal que Q
n
i=1
vectores propios linealmente independientes (la matriz A es por tanto
diagonalizable). Entonces, cualquier vector x
0
puede escribirse en la forma
x
0
=
n
i=1
i
v
i
con
i
adecuados. Multiplicando reiteradamente por A obtenemos
A
m
x
0
=
n
i=1
m
i
v
i
=
m
1
_
1
v
1
+
2
_
1
_
m
v
2
+. . . +
n
_
1
_
m
v
n
_
. (9.1)
Entonces, si
1
,= 0 y m es grande
x
m
:= A
m
x
0
m
1
1
v
1
,
es decir, x
m
tiende a apuntar en la direccion del vector propio asociado al valor propio
de mayor modulo (en el lenguaje habitual se habla del valor propio dominante). El valor
propio
1
se puede calcular, entre otras posibilidades, mediante el conocido cociente de
Rayleigh:
(m)
1
:=
x
m
Ax
m
|x
m
|
2
=
x
m
x
m+1
|x
m
|
2
1
.
174
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
(m)
1
=
1
+O
__
2
_
m
_
.
Si ademas A es simetrica
(m)
1
=
1
+O
__
2
_
2m
_
.
Basado en estas ideas surge el metodo de potencias, que simplemente consiste en
multiplicar un vector inicial por las potencias sucesivas de la matriz A. Para evitar que
los vectores x
m
tengan componentes muy grandes o muy peque nas se genera una sucesion
de vectores normalizados, es decir, una vez multiplicado por A se procede a dividir por
su norma.
El algoritmo es el siguiente:
Metodo de potencias
01 x
0
,= 0 vector inicial
02 y
0
=
x
0
|x
0
|
2
03 for m=1:mmax
04 x
m
= Ay
m1
05
(m)
= y
m1
x
m
06 y
m
=
x
m
|x
m
|
2
07 if |y
m
y
m1
|
2
< eps
08 return
09 end
10 end
La lnea 06 es simplemente el cociente de Rayleigh que, como la norma escogida para
normalizar es la eucldea, adopta esta expresion mas sencilla.
Hemos elegido como criterio de parada la diferencia entre dos vectores consecutivos.
Otra posible eleccion es
[
(m)
(m1)
[ < eps [
(m)
[.
Ejercicio 9.2 Programa el metodo de potencias
Solucion. He aqu una implementacion del metodo.
01 %POTENCIAS
02 %
03 %LB=POTENCIAS(A) Devuelve en LB una aproximacion del
175
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:
176
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
0 0 0 24
1 0 0 50
0 1 0 35
0 0 1 10
_
_
cuyos valores propios son 1, 2, 3 y 4.
1. Aplicar el metodo de potencias a la matriz A partiendo de un vector aleatorio y del
vector (20, 33, 15, 2)
.
2. Sabiendo que v
1
= (24, 26, 9, 1)
y v
2
= (12, 19, 8, 1)
?
3. Observa para distintas tolerancias la diferencia entre partir del vector del apartado an-
terior y de (12, 31, 15, 2.0001)
.
4
El efecto de los errores de redondeo se traduce en una componente no nula en la direccion de v
1
,
incluso aunque el vector inicial no la tuviese. Se podra decir que este es uno de los pocos casos en los
que los errores de redondeo nos pueden ayudar.
177
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.
178
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
forma
R
pq
() =
_
_
1
.
.
.
cos sin
1
.
.
.
1
sin cos
.
.
.
1
_
_
la p
la q
col. p col. q
(9.2)
Es facil ver que son ortogonales, es decir, R
pq
()
1
= R
pq
()
.
Mediante
A
1
:= R
pq
AR
pq
(p, q y adecuados) vamos a anular el mayor elemento extradiagonal de A. Esta operacion
solo afecta a las las y columnas p, q de A. Concretamente, si denotamos por a
(1)
ij
las
entradas de A
1
,
a
(1)
pq
= (a
qq
a
pp
) cos sen +a
pq
(cos
2
sen
2
) =
=
1
2
(a
qq
a
pp
) sen(2) +a
pq
cos(2).
Por tanto, el angulo debe tomarse de modo que
_
_
cos(2) = 0, si a
qq
= a
pp
,
tan(2) =
2a
pq
a
qq
a
pp
, en caso contrario.
Para calcular cos y sen evitando el uso de un arcotangente se recurre a algunas
manipulaciones trigonometricas que prueban que si
7
:=
a
qq
a
pp
2a
pq
, t :=
sign()
[[ +
2
+ 1
,
entonces
cos =
1
t
2
+ 1
, sen =
t
t
2
+ 1
.
Cuando a
qq
= a
pp
tomamos
cos =
1
2
, sen
m
=
sign(a
qq
)
2
.
7
sign (z) es el signo de z, 1 si z es negativo, 1 en caso contrario.
180
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
2
.
.
.
n
_
_
, cuando m .
Ademas, deniendo Q
m
:= R
p
1
q
1
(
1
)R
p
2
q
2
(
2
) . . . R
p
m
q
m
(
m
), donde R
p
k
,q
k
es la matriz
utilizada en el paso kesimo
Q
1
m
AQ
m
= A
m
D.
Por tanto, las columnas de Q
m
son las aproximaciones (ortonormales) de los vectores
propios correspondientes.
El siguiente teorema prueba la convergencia de este metodo. Para ello necesitamos la
llamada norma de Frobenius
8
|A|
F
:=
_
n
i,j=1
[a
i,j
[
2
_
1/2
Teorema 9.3 Sea A
m
la matriz en la iteracion m, D
m
su diagonal y B
m
:= A
m
D
m
.
Entonces
|A
m
|
F
= |A
m+1
|
F
, |B
m+1
|
2
F
= |B
m
|
2
2[a
(m)
p
m
q
m
[
2
El resultado dice en primer lugar que la norma de Frobenius de una matriz no cambia
cuando se multiplica a izquierda y derecha por las matrices R
pq
(), una de ellas traspuesta.
De hecho se preserva cuando se multiplica, a izquierda y derecha, por matrices ortogonales
arbitrarias. El segundo resultado dice algo mas: el peso de los elementos extradiagonales
disminuye en cada paso seg un el elemento cancelado. Esto asegura la convergencia del
proceso hasta obtener una matriz diagonal.
En la practica, el proceso se interrumpe cuando los elementos que estan fuera de la
diagonal son sucientemente peque nos. En concreto, se suele tomar el siguiente criterio
de parada
[a
(m)
p
m
q
m
[ < eps
_
n
i=1
[a
(m)
ii
[
2
_
1/2
.
Fjate que las matrices A
m
y A
m+1
solo dieren en las las y columnas p
m
y q
m
. A
efectos practicos no sera necesario formar las matrices de rotacion ya que basta conocer
los valores de cos
m
y de sen
m
para construir A
m+1
a partir de A
m
.
Ejercicio 9.8 Implementa el metodo de Jacobi.
8
En Matlab sera norm(a(:)) o norm(a,fro).
181
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));
182
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
ON IV
MATLAB Profile Report: Function Details
jacobi C: / Document s and Set t i ngs/ V ct or / Escr i t or i o/ Li br oMat l ab/ j acobi . m
Time: 14.75100000 s (100.0%)
Calls: 1
Self time: 14.75100000 s (100.0%)
Function: Time Calls Time/call
jacobi 14.75100000 1 14.75100000
Parent functions:
none
Child functions:
none
99% of the total time in this function was spent on the following lines:
33: f or m=1: mmax
0. 07643962 1%34: d=di ag( a) ;
35: %Cal cul o del mayor el ement o ext r adi agonal
13. 37100000 91%36: [ max1, p] =max( abs( a- di ag( d) ) ) ;
0. 26000000 2%37: [ max2, q] =max( max1) ;
38: p=p( q) ;
0. 07000000 0%39: i f max2<eps*nor m( d)
40: r et ur n %conver genci a
42: %cal cul o sen y cos
0. 09000000 1%43: i f abs( a( q, q) - a( p, p) ) <eps
44: c=1/ sqr t ( 2) ;
51: end
0. 10819591 1%52: r 0=[ c s ; - s c] ;
53: %La r ot aci on sol o af ect a a l as f i l as y col . p y q
0. 31000000 2%54: a( [ p q] , : ) =r 0' *a( [ p q] , : ) ;
0. 12000000 1%55: a( : , [ p q] ) =a( : , [ p q] ) *r 0;
0. 17000000 1%56: r ( : , [ p q] ) =r ( : , [ p q] ) *r 0; %guar damos r
0. 05000000 0%57: end
Figura 9.1: Profile aplicado al metodo de Jacobi.
184
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
= Q
1
) y R triangular superior. Esta descomposicion siempre existe
y puede ser calculada de varias formas distintas.
El metodo QR de Francis consiste en grosso modo construir una sucesion de matrices
A
m
(A
0
= A) procediendo como sigue
A
m
= Q
m
R
m
(factorizar) A
m+1
:= R
m+1
Q
m+1
(construir)
Para una matriz simetrica el algoritmo converge practicamente en todos los casos a una
matriz diagonal con los valores propios. Mas adelante detallaremos el algoritmo y como se
9
Tener activada esta opcion resta algo de velocidad a los programas puesto que parte de Matlab
esta ocupada en autorevisarse. Con profile off desconectas este control.
185
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.
186
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
1
. . .
0
.
.
. A
2
0
_
_
(9.3)
2. Repetimos el proceso con la matriz A
2
que es (n 1) (n 1) para construir la
matriz de Householder Q
2
tal que
Q
2
A
2
=
_
2
. . .
0
.
.
. A
3
0
_
_
. (9.4)
Ahora basta considerar
Q
2
=
_
_
1 0 . . . 0
0
.
.
. Q
2
0
_
_
(9.5)
que cumple
Q
2
Q
1
A =
_
1
. . .
0
2
. . .
0 0
.
.
.
.
.
. A
3
0 0
_
_
3. En el kesimo paso se construyen las matrices Q
k
y Q
k
:
Q
k
A
k
=
_
k
. . .
0
.
.
. A
k+1
0
_
_
, Q
k
:=
_
I
k1
Q
k
_
,
donde I
k1
es la matriz identidad de tama no k 1.
Despues de n 1 pasos obtenemos la descomposicion
Q
n1
Q
1
A = R, con R triangular superior.
Deniendo Q := Q
1
Q
n1
, tenemos que Q
1
= Q
1
n1
Q
1
1
= Q
n1
Q
1
. Por tanto,
A = QR con Q ortogonal y R triangular superior.
Ejercicio 9.11 Implementa la descomposicion QR con matrices de Householder
187
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
Solucion. He aqu una implementacion del metodo
01 % [Q,R]=QRHOUSEHOLDER(A) Calcula Q ortogonal y R triangular
02 % superior tales que A=QR.
03 %
04 % El algoritmo esta basado en las matrices de Householder
05 %
06 function [q,r]=QRhouseholder(a)
07
08 n=length(a)
09 q=eye(n);
10 r=a;
11 for k=1:n
12 u=r(k:n,k); %primera columna
13 alpha=-sign(u(1))*norm(u);
14 u=u-alpha*[1;zeros(length(u)-1,1)];
15 u=u/norm(u);
16 qhouse=eye(length(u))-2*u*u;
17 r(k:n,k:n)=qhouse*r(k:n,k:n);
18 q(:,k:n)=r(:,k:n)*qhouse;
19 end
20 return
Observa la manipulacion simple de los bloques de a, q y r.
)B = B 2u(u
B). (9.6)
Es decir, en ning un momento se requiere construir la matriz Q y unicamente necesitamos
realizar dos productos matriz-vector. El n umero de operaciones del producto QB es ahora
nm mientras que en la implementacion inicial el costo era n
2
m. De forma analoga se puede
calcular el producto BQ con B mn tambien en mn operaciones.
Ejercicio 9.13 Implementa la factorizacion QR utilizando las indicaciones previas. Compara
con alg un ejemplo la reduccion del tiempo de calculo.
Factorizacion QR con matrices de Givens
La factorizacion QR de una matriz se puede obtener tambien utilizando matrices de
rotacion, es decir, matrices de la forma (9.2). Esta alternativa es especialmente interesante
si la matriz tiene sus elementos no nulos concentrados entorno a la diagonal. Para matrices
188
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
. . .
0 . . .
.
.
.
.
.
.
.
.
.
0 . . .
_
_
.
Obviamente Q
1
es una matriz ortogonal por ser producto de matrices ortogonales. En el
siguiente paso haremos ceros en la segunda columna por debajo de la diagonal y as suce-
sivamente. Fjate que los elementos nulos de las columnas anteriores se preservan en los
sucesivos pasos.
Ejercicio 9.14 Implementa la factorizacion QR utilizando matrices de Givens.
Solucion. Podemos denir la siguiente funcion:
01 % QRGIVENS
02 %
03 % [Q,R]=QRGIVENS(A) Calcula Q ortogonal y R triangular
04 % superior cumpliendo A=QR
05 %
06 % Utiliza el algoritmo basado en matrices de Givens
07 %
08
09
10 function [q,r]=QRGivens(a)
11 n=length(a);
12 q=eye(n);
13
14
15 for j=1:n-1
16 for i=j+1:n
17 if a(i,j)~=0
18 aux=sqrt(a(j,j)^2+a(i,j)^2);
19 c=a(j,j)/aux;
189
B
o
r
r
a
d
o
r
9.5 Metodo QR de Francis LECCI
ON IV
20 s=-a(i,j)/aux;
21 Rot=[c s; -s c];
22 %solo cambian las filas i y j
23 a([i j],:)=Rot*a([i j],:);
24 q([i j],:)=Rot*q([i j],:);
25 end
26 end
27 end
28 q=q;
29 r=a;
30 return
ON IV Cap
Ax = A
b.
Este sistema de ecuaciones recibe el nombre de ecuaciones normales. Se prueba en-
tonces 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.
191
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.
192
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
D
1
. . . . . . . . . . . .
D
2
. . . . . . . .
.
.
.
.
.
.
D
m
_
_
, donde D
j
es 1 1 o 2 2.
Los valores propios de A son exactamente los valores propios de estos bloques 2 2.
De hecho cada par de valores propios complejos conjugados genera un bloque D
j
de
orden 2. En particular, si la matriz tiene unicamente valores propios reales, la matriz T
es triangular. Si trabajamos con aritmetica compleja entonces la matriz T es triangular
superior.
Este es el conocido Teorema de Schur.
Ejercicio 9.21 Adapta el metodo QR a matrices no simetricas. Observa que deberas cambiar
el criterio de parada.
Ejercicio 9.22 Aplica el metodo QR a distintas matrices (simetricas, no simetricas, con
todos los valores propios reales o con alguno complejo) para observar como es la matriz lmite
resultante en cada caso.
Nota. La descomposicion de Schur, tanto real como compleja, se puede calcular en
Matlab con schur.
9.5.3. Comentarios adicionales
Tecnicas de aceleracion
Una matriz es de Hessenberg si tiene la forma
H =
_
_
. . . . . .
.
.
.
0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
0 . . . 0
_
_
,
es decir, si todos los elementos por debajo de la subdiagonal principal son nulos.
Toda matriz se puede llevar a forma de Hessemberg mediante producto a izquierda y
derecha por matrices ortogonales. Si ademas la matriz original es simetrica, la matriz de
Hessenberg correspondiente es de hecho tridiagonal simetrica.
193
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
_
_
.
194
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
H
1
H
1
c H
1
A
1
H
1
_
_
.
Si H
1
se toma ahora de forma que H
1
c = e
1
, se consigue cancelar todos los elementos
de la primera columna situados por debajo de la subdiagonal inferior. Es mas, si A es
simetrica, b = c y por tanto en la primera la de HAH solo los dos primeros elementos
son no nulos.
A continuacion se procede a trabajar con la matriz H
1
A
1
H
1
de forma similar a como
se hizo en la Seccion 9.5.1.
Nota. En Matlab la funcion hess reduce una matriz a forma de Hessenberg. Puede
utilizarse de las siguientes maneras:
>>H=hess(A); %H es una matriz de Hessenberg semejante a A
>>[P,H] = hess(A); %Ademas P ortogonal tal que A = P*H*P
AQ = D,
13
Puede resultar extra no, pero en muchas aplicaciones practicas es mas facil hallar el producto de un
vector por la matriz que construirla explcitamente.
14
La descomposicion QR destroza la estructura sparse de una matriz.
195
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 to-
das 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.
Kublanovskaya 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 estrate-
gias 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 re-
spectivamente. 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...
196
B
o
r
r
a
d
o
r
LECCI
ON IV Cap
_
0 0 1 0 0 0
1 0 0 1 1 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 1
0 0 0 1 0 0
_
_
donde
g
ij
= 1, si llegamos a i desde j.
De forma natural G es sparse, puesto que con n paginas uno puede esperar que el n umero
de enlaces sea del orden de O(n) (esto es, proporcional al n umero de paginas) y no del
orden O(n
2
) que se correspondera con una matriz llena.
Sea
c
j
=
n
i=1
g
ij
(n umero de enlaces que salen de j).
197
B
o
r
r
a
d
o
r
9.8 Google LECCI
ON IV
Entonces la probabilidad de llegar a i si estamos en j es
p
g
ij
c
j
..
Siguiendo un enlace desde j
+
1 p
n
. .
Tecleando la direccion
Esta informacion se puede recoger en la matriz A de tama no n n cuyas componentes
vienen dadas por
a
ij
= p
g
ij
c
j
+
1 p
n
.
Esta matriz no es sparse, pero se puede escribir
p
G +
1 p
n
e
n
e
n
donde g
ij
= g
ij
/c
j
y e
n
es la matriz columna 1 n
e
n
=
_
1 1 1
.
De esta forma se puede almacenar la matriz A sin necesidad de requerir grandes cantidades
de memoria. Es mas, el producto por cualquier vector se puede calcular con
Ax = p
Gx +
1 p
n
e
n
e
n
x = p G x./c
..
Div. elem. a elem.
+
1 p
n
(e
n
x)
. .
Prod. escalar
e
n
.
Si denotamos por x
(0)
j
la probabilidad de estar en la pagina web j en un instante inicial,
entonces la probabilidad de llegar a la pagina web i en el paso primero es
n
j=1
a
ij
x
(0)
j
=: x
(1)
i
y por tanto
_
_
x
(1)
1
x
(1)
2
x
(1)
n
_
_
=
_
_
a
11
a
12
a
1n
a
21
a
22
a
2n
. . . . . . . . . . . . . . . . . .
a
n1
a
n2
a
nn
_
_
_
_
x
(0)
1
x
(0)
2
x
(0)
n
_
_
= Ax
0
.
De esta forma, denotando por
x
m
= (x
(m)
1
, x
(m)
2
, . . . , x
(m)
n
)
ON IV Cap
e
n
=
n
i=1
x
i
= 1.
Ademas, comenzando con x
0
cuyas componentes sean positivas y sumen uno,
x = lm
m
x
m
.
El resultado dice, en palabras llanas, que la probabilidad de que estemos en una pagina
web (esto es, x), despues de navegar una cantidad suciente de tiempo
18
es independiente
de como hemos empezado (es decir, de x
0
). Matematicamente hablando, dice que existe
un unico vector propio asociado al valor propio 1 de componentes positivas con |x|
1
= 1
y que ademas la sucesion x
m
converge a x independientemente del vector inicial escogido.
Observa que la sucesion de vectores x
m
son el resultado de aplicar el metodo de potencias
a la matriz A (sin normalizar respecto de | |
2
) y que por su forma particular
19
siempre
que se parta de un vector inicial cumpliendo los requisitos de la proposicion tendremos
que x
m
0 y |x
m
|
1
= 1.
Aqu vemos una forma completamente directa de programar este calculo
01 % PAGERANK(G)
02 %
03 % PAGERANK(G) Calcula el indice de impacto de una WEB dada
04 % por el grafo G
05 % El grafo tiene que ser conexo, es decir, no puede haber nodos
06 % separados del resto
07
08 function y=pagerank(g)
09
10 p=0.85; % probabilidad de llegar a traves de un enlace
11 eps=0.0001; % criterio de parada
12 nmax=1000; % numero maximo de iteraciones
13 n=length(g);
14 x=1/n*ones(n,1); % vector inicial
15 for j=1:nmax
16 y=producto(g,x,p);
17 if norm(x-y)<eps
18 disp(convergencia)
19 return
20 end
21 x=y;
22 x=x/sum(x);
23 end
18
Ciertamente, podramos tener que dedicar muchas horas...
19
La matriz A cumple que todas sus entradas son positivas y que la suma de los elementos de cada la
es 1. Una matriz de esta forma se denomina matriz de Markov. Teoricamente se sabe que el valor propio
dominante de estas matrices es siempre 1.
199
B
o
r
r
a
d
o
r
9.8 Google LECCI
ON IV
24 disp(Convergencia no alcanzada)
25 return
26
27 % Y= PRODUCTO(G,X,P)
28 % calcula el producto a*x
29 % notese que la matriz no llega a construirse
30
31 function y=producto(g,x,p)
32 c=sum(g);
33 c=c(:);
34 x=x(:);
35 n=length(x);
36 en=ones(n,1);
37 y=p*g*(x./c)+(1-p)/n*en*(en*x);
38 return
Nota. Aplicando la funcion pagerank al ejemplo de la Figura 9.2, obtenemos este re-
sultado
x = [0.1370 0.2806 0.2636 0.1370 0.1181 0.0638]
ON IV Cap
ON IV
202
B
o
r
r
a
d
o
r
Leccion V
Salidas gracas en Matlab. Interpolacion
203
B
o
r
r
a
d
o
r
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.
205
B
o
r
r
a
d
o
r
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 manip-
ulacion. 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
mas 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));
207
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.
208
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Figura 10.2: Ventana graca.
Tercer nivel
Ya en un tercer nivel, se pueden acceder a detalles concretos del dibujo, como el tama no
y color de las marcas, la anchura de la lnea, etc. Las diferentes opciones llevan nombres
nemotecnicos que facilitan su memorizacion
3
. Destacamos entre las mas importantes
color: color de la lnea.
LineWidth: anchura de la lnea.
Marker: selecciona la marca que se coloca en los puntos evaluados
MarkerEdgeColor: color del borde de las marcas
MarkerFaceColor: color de la marca
MarkerSize: tama no de la marca
Para especicar un color, se puede utilizar uno de estos caracteres b, g, r, c, m, y, k o
bien un vector con tres componentes con valores entre 0 y 1 que especica un color seg un
3
nemotecnicos en ingles, of course.
210
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Figura 10.3: Edicion de un dibujo.
212
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
plot(x,y,-,color,[0.0,0.3,0.0],linewidth,2)
grid on % desplegamos la red
xlim([-0.5,6]), ylim([-0.25,0.5]) % rango de los graficos
xlabel(Eje OX,fontname, Comic Sans Ms, fontsize,12)
ylabel(Eje OY,fontname, Comic Sans Ms, fontsize,12)
title(Algunas graficas de funciones,...
fontsize,16,fontname,Times new roman)
legend(exp(-x/3).*cos(x), exp(-x).*cos(x),...
exp(-3x)*cos(x), exp(-9x).*cos(x));
0 1 2 3 4 5 6
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
Eje OX
E
j
e
O
Y
Algunas graficas de funciones
exp(-x/3).*cos(x/3)
exp(-x).*cos(x)
exp(-3x)*cos(3x)
exp(-9x).*cos(9x)
Figura 10.4: Una muestra de dibujos.
Nota. En el comando title hemos utilizado los atributos fontname y fontsize para
especicar la fuente y su tama no utilizada en el ttulo. Otros atributos son
fontweight: los valores posibles son light, normal, demi, bold. Especica el trazo
de los caracteres, desde no (light) hasta negrita (bold).
fontangle: sus valores son normal, italic u oblique. Fija la inclinacion de la fuente.
rotate: especica el angulo con el que se escribe el texto. El valor por defecto, 0, es
la escritura horizontal, mientras que con 90 se escribe el texto en vertical.
214
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
>> get(h,marker)
ans =
none
>> get(h,linewidth)
ans =
0.5000
Las ordenes anteriores nos informan de que el dibujo se ha trazado con lnea continua, sin
ninguna marca y con anchura de lnea 0.5.
Con set podemos cambiar cualquiera de estos atributos
>> set(h,linewidth,2)
>> set(h,color,[0.5 0.6 0.2])
>> set(h,linestyle,-.)
de forma que la graca pasa a tener una anchura de 2 puntos, cambia el color y el estilo
ahora es punto-raya.
Si se ejecuta get(h) podemos visualizar todos los atributos del objeto graco:
>> get(h)
Color = [0.5 0.6 0.2]
EraseMode = normal
LineStyle = -.
LineWidth = [2]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [ (1 by 315) double array]
YData = [ (1 by 315) double array]
ZData = []
BeingDeleted = off
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
216
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
0 0.25 0.5 1 2 4
-1
0
1
2
3
4
5
6
x log(x)
Figura 10.5: Modicacion del entorno del dibujo.
Un ejemplo de caractersticas mas avanzadas
Es posible asignar a un objeto graco funciones que se ejecuten al realizar alguna
accion, como cuando se crean ( util especialmente si se redibuja constantemente) o cuando
se seleccione con el raton.
Por ejemplo con
t=linspace(-6*pi,6*pi,200);
h=plot(t,sin(t)./t);
orden=v=get(h,color); set(h,color,v([3 1 2]));
set(h,ButtonDownFcn,orden)
asignamos al dibujo la siguiente propiedad: cuando se pulse encima de el con el raton, se
ejecutara la instruccion dada en orden:
>> v=get(h,color); set(h,color,v([3 1 2]));
La variable orden es simplemente una cadena de caracteres con esta instruccion. Observa
como se repite precisamente para insertar este caracter y evitar as la confusion con el
smbolo n de cadena de caracteres.
En ultima medida, estas caractersticas enlazan con las interfaces gracas de Mat-
lab (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 tu-
torial correspondiente. 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 dentro de la ayuda, aconsejamos seleccionar Go to online doc for guide y
all acceder a Creating GUIs.
218
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
subplot(325)
plot(x,sin(4*x),linewidth,2);
title(sin(4x),fontsize,14)
axis tight
subplot(326)
plot(x,cos(4*x),linewidth,2);
title(cos(4x),fontsize,14)
axis tight
crean la Figura 10.7.
10.1.5. Otras salidas gracas
Se nalaremos a continuacion otros comandos relacionados con dibujos y gracas bidi-
mensionales de manejo similar a plot
plotyy: permite mostrar dos dibujos en la misma graca con dos ejes
OY a la izquierda y a la derecha.
polar: curvas en polares.
semilogx, semilogy: similar a plot pero utilizando, respectivamente, una escala log-
artmica 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 rep-
resentar datos y estadsticas (estilo excel).
area: muestra los datos en una graca de forma acumulada. El col-
or utilizado se controla mediante el comando colormap, cuyo
funcionamiento veremos mas adelante.
line: une puntos mediante lneas. Es una instruccion de bajo niv-
el cuyo funcionamiento es similar a plot. De hecho, plot se
construye 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
220
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
clf
t=linspace(0,8*pi,200);
plot3(t.*cos(t),t.*sin(t),t,r-,linewidth,2)
grid on % dibujamos la malla
title(Una curva en espiral...,fontsize,18,fontname,...
Comic Sans MS,color,[0.675 0.000 0.000])
zlim([0,20])
xlabel(eje OX,fontsize,14)
ylabel(eje OY,fontsize,14)
zlabel(eje OZ,fontsize,14)
cuyo resultado se muestra en la Figura 10.8. Los comandos relacionados con los aspectos
-30
-20
-10
0
10
20
30
-30
-20
-10
0
10
20
30
0
5
10
15
20
25
30
eje OX
Una curva en espiral...
eje OY
e
j
e
O
Z
Figura 10.8: Un dibujo en 3D con plot3.
accesorios del dibujo (axes, title, xlabel, grid...) funcionan exactamente igual. Ademas
aparecen algunos nuevos cuya utilidad y manejo no debera causar sorpresa:
zlabel zlim
Para poder manipular, rotar en 3D, el objeto graco basta presionar en la barra de
herramientas en el boton se nalado en la Figura 10.9 y mover el raton sobre el objeto con
el boton pulsado
222
B
o
r
r
a
d
o
r
LECCI
ON V Cap
_
x
1
. . . x
n
.
.
.
.
.
.
x
1
. . . x
n
_
_
Y =
_
_
y
1
. . . y
1
.
.
.
.
.
.
y
m
. . . y
m
_
_
.
Es decir, las m las de X son copias del vector x y las n columnas de Y son copias del
vector y. La malla esta formada por los puntos (X(i,j),Y(i,j)). Por ejemplo,
>> x=[0 0.33 0.67 1]; y=[-1 0 1];
>> [X,Y]=meshgrid(x,y)
X =
0 0.3300 0.6700 1.0000
0 0.3300 0.6700 1.0000
0 0.3300 0.6700 1.0000
223
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
224
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Figura 10.12: Utilizacion de nan en un dibujo.
colorbar: despliega una barra de colores que informa sobre la correspondencia
entre el valor numerico y el color utilizado. Por defecto se despliega
verticalmente a la derecha del dibujo, aunque puede mostrarse horizon-
talmente si as se desea.
colormap: especica que colores se van a utilizar en el dibujo (mapa de colores).
Existe un conjunto de formatos predenidos que listamos a continuacion
autumn bone colorcube cool copper flag
gray hot hsv jet lines pink
prism spring summer white winter default
Para cambiar a un formato basta ejecutar
>> colormap(bone)
Se pueden tambien denir formatos personalizados, bien mediante la
lnea de comandos o desde la propia ventana graca.
daspect: controla la relacion entre los ejes del dibujo. Baste decir que
daspect([1 1 1])
ja que las proporciones de los ejes OX, OY y OZ sean iguales. Es decir,
>> sphere(40); % dibuja una esfera
>> daspect([1 1 1]) % relaciones 1:1:1 en los ejes
muestra la esfera como tal y no como un elipsoide.
226
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
f=inline(x^2-y^2); f=vectorize(f);
x0=linspace(-2,2,6);
y0=linspace(-2,2,4);
[X0,Y0]=meshgrid(x0,y0);
x1=linspace(-2,2,40);
y1=linspace(-2,2,40);
[X1,Y1]=meshgrid(x1,y1);
hold on % solapamos dos dibujos
surf(X0,Y0,f(X0,Y0),facecolor,none,edgecolor,k,...
marker,o, markersize,6,MarkerFaceColor,k, linewidth,2);
surf(X1,Y1,f(X1,Y1),facecolor,interp, facealpha,0.5,...
edgecolor,none);
colorbar
colormap(spring)
Figura 10.13: Algunas opciones con surf.
Ejercicio 10.5 Observa las diferencias entre estas dos salidas de la misma supercie
>> x=linspace(-2,2,20); y=linspace(-1,1,20);
>> [X,Y]=meshgrid(x,y);
>> figure(1)
>> surf(X,Y,X.^3-Y.^2.*Y,linestyle,none)
>> figure(2)
>> surf(X,Y,X.^3-Y.^2.*Y,linestyle,none,facecolor,interp)
228
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Mallados especiales
Con sphere podemos obtener el mallado de una esfera. Puede utilizarse para dibujar
bien una esfera o incluso funciones denidas sobre una supercie esferica. Por ejemplo,
mediante el siguiente chero script hemos obtenido las representaciones gracas de la
Figura 10.14.
[X,Y,Z]=sphere(60);
subplot(121)
surf(X,Y,Z,facecolor,[0.4 0.9 0.6])
daspect([1 1 1]) % aspecto [1 1 1]
title(La esfera,fontsize,14)
subplot(122);
surf(X,Y,Z,16*X.^2.*Y.^3.*Z.^4)
title(16 X^2 Y^3 Z^4 sobre la esfera,fontsize,14)
colormap(hot)
colorbar(hor) % barra de colores horizontal
daspect([1 1 1]) % aspecto [1 1 1]
Figura 10.14: Esferas en 3D.
Comandos similares son ellipsoid (elipsoides) y cylinder (cilindros). Son algo mas
exibles de lo que pueda parecer. As, y aunque parezca paradojico,
230
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
>> x1=linspace(-2,2,60); y1=linspace(-2,2,60);
>> [X1,Y1]=meshgrid(x1,y1);
>> f=vectorize(inline(cos(x^2-y)));
>> subplot(211) % dos dibujos
>> [c,h]=contour(X1,Y1,f(X1,Y1)); colorbar;
>> clabel(c,h) % Inserta el texto sobre las curvas de nivel
>> subplot(212)
>> [c,h]=contourf(X1,Y1,f(X1,Y1),5); colorbar % 5 curvas de nivel;
>> clabel(c,h,fontsize,12); % cambiamos tamano de la letra
El resultado es el de la Figura 10.16.
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1
0
1
2
-
0
.
8
-
0
.8
-
0
.
8
-
0
.8
-
0
.
8
-
0
.
8
-
0
.
6
-
0
.6
-
0
.
6
-
0
.6
-
0
.
6
-
0
.
6
-
0
.
4
-0
.4
-
0
.4
-
0
.
4
-
0
.
4
-
0
.
4
-
0
.
2
-
0
.2
-0
.2
-
0
.
2
-
0
.
2
-0.2
-
0
.
2
0
0
0
0
0
0
0
0
.
2
0.2
0
.
2
0
.
2
0
.2
0
.
2
0
.
4
0.4
0
.
4
0
.
4
0
.4 0
.4
0
.
4
0
.
6
0.6
0
.
6
0
.6
0
.6
0
.
6
0
.
8
0.8
0
.
8
0
.8
0
.8
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1
0
1
2
-
0
.
5
9
9
9
9
-
0
.
5
9
9
9
9
-0.2
-
0
.
2
-0.2
-
0
.
2
0
.2
0
.
2
0
.
2
0
.
2
0
.
6
0
.
6
0
.
6
0
.6
0
.
6
-
0
.
2
-
0
.
2
0
.
2
0
.
2 -0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
Figura 10.16: Lneas de nivel
surfc y surfl
Ambas son variantes de surf. La primera despliega la supercie y dibuja en el plano
OXY (plano inferior) las curvas de nivel.
La segunda es como surf pero el color que asigna a cada punto viene determinado
por un punto de iluminacion exterior. El resultado es el de una supercie de un color
determinado iluminado desde un punto
mesh, meshc, meshz y waterfall
Todos ellos dibujan unicamente la malla (rejilla) del dibujo. La segunda ademas a nade
las lneas de nivel, de forma semejante a como proceda surfc. Finalmente, waterfall es
232
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
>>vx=-Y./(X.^2+Y.^2);
>>vy=X./(X.^2+Y.^2); % calculamos vectores
>>h=quiver(X,Y,vx,vy);
>>axis square
Observa que cerca del (0,0) los vectores se hacen muy grandes. Para evitar que esto
distorsione el dibujo hemos optado por no dibujar los vectores correspondientes a puntos
muy cercanos al origen. Con este n hemos utilizado una variable (en realidad una matriz)
logica ind que toma valor uno unicamente si el punto correspondiente (X,Y) esta cerca
del origen.
Una vez salvada esta dicultad, hemos procedido a dibujar el campo de velocidades
resultante.
El comando quiver devuelve en realidad dos punteros, uno a las lneas y otro a
la cabeza del vector. Sus valores opcionales son similares a los ya vistos en secciones
anteriores.
Ejercicio 10.7 Siguiendo con las instrucciones desplegadas arriba, observa que sucede si se
ejecuta
set(h(1),linewidth,1,color,r,linestyle,:)
set(h(2),color,k)
Podras eliminar la punta de los vectores?.
Ejercicio 10.8 Utilizando el comando quiver3, dibuja el campo de velocidades que a cada
punto le asigna el vector (velocidad) dado por
_
x
_
x
2
+y
2
+z
2
,
y
_
x
2
+y
2
+z
2
,
z
_
x
2
+y
2
+z
2
)
(Ayuda: el comando meshgrid es tambien el apropiado para construir mallas en 3D)
10.4. Dibujos sobre dominios mallados en triangulos
Los comandos que hemos estudiado a lo largo de la seccion precedente estan pensados
para dibujar supercies denidas esencialmente sobre una cuadrcula. Aunque en muchos
casos esto es suciente, en otras muchas ocasiones se trabaja con funciones denidas sobre
conjuntos, o dominios en la terminologa habitual, mucho mas generales.
Una forma muy simple de trabajar con estos dominios es dividirlos en triangulos y
construir la supercie solapando diferentes planos denidos sobre cada triangulo
9
. Los
resultados que se obtienen son bastante satisfactorios, puesto que los triangulos son mas
exibles que los cuadrilateros a la hora de adaptarse a los dominios.
Esta division en triangulos de un dominio se denomina triangulacion o mallado del
dominio. Se dice que un mallado se hace mas no si el tama no de los triangulos disminuye.
Una triangulacion es conforme si la interseccion de dos lados cualesquiera del mallado
es o bien vaca (los triangulos no se tocan), o un vertice o un lado entero. Es decir no
9
Se utiliza el conocido resultado de que tres puntos no alineados denen un unico plano. Es facil ver
tambien que la supercie as construida es continua
234
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
-0.5 0 0.5
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
1
2
3
4
5
6
7 8
9 10
11 12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Figura 10.19: Ejemplo de triangulacion. En el graco la numeracion de los triangulos se
rodea con un crculo.
5 10 19
6 12 20
14 7 15
2 11 15
17 13 20
18 15 20
3 9 16
18 13 19
16 13 17
8 16 17
10 14 19
14 15 18
19 13 21
14 18 19
12 17 20
13 18 20
13 16 21
5 19 21
coordenadas:
x y
236
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Esta es una forma ya estandar de denir y trabajar con una triangulacion que tambien
sigue Matlab
10
con los comandos trimesh y trisurf.
El primero despliega la malla triangular especicada por t, (la matriz conteniendo los
triangulos), x e y (que dan las coordenadas de los vertices),
trimesh(t,x,y)
Se puede especicar la coordenada z de los vertices (la altura),
trimesh(t,x,y,z)
con lo que se dibuja la malla 3D correspondiente.
El comando trisurf es similar, pero colorea las caras. Hablando con propiedad, estos
comandos al igual que mesh y surf, representan supercies. Las opciones para manipular
el aspecto nal de la supercie son iguales que las de surf, incluyendo las ya vistas
facecolor, facealpha, meshalpha, edgecolor,....
Nota. Un tema nada trivial es la construccion de un mallado sobre un dominio (polig-
onal) 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 consider-
able, 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.
238
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?.
239
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 poli-
nomio 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 basado 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 z a . 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
,
240
B
o
r
r
a
d
o
r
LECCI
ON V Cap
_
1 x
0
x
2
0
x
n
0
1 x
1
x
2
1
x
n
1
1 x
2
x
2
2
x
n
2
. . . . . . . . . . . . . . . . . .
1 x
n
x
2
n
x
n
n
_
_
_
_
a
0
a
1
a
2
.
.
.
a
n
_
_
=
_
_
y
0
y
1
y
2
.
.
.
y
n
_
_
. (11.1)
Por tanto el problema se reduce a la resolucion de un sistema de ecuaciones lineales y
la existencia y unicidad del polinomio de interpolacion a que el sistema en cuestion sea
compatible determinado.
La matriz del sistema (11.1) es de tipo Vandermonde que nos ha surgido repetidas
veces en estos apuntes
1
. Dado que el sistema tiene el mismo n umero de ecuaciones que
de incognitas, se tiene que la existencia de solucion para cualquier conjunto de
datos es equivalente a la unicidad. Ademas, la unicidad de solucion es equivalente
a que la unica solucion posible para el termino independiente nulo sea el polinomio cero.
Pero esto es inmediato puesto que todo polinomio no nulo de grado n tiene a lo sumo n
races.
Otra forma de ver la existencia y unicidad es de tipo constructiva. Tomemos
L
j
(x) :=
(x x
0
) (x x
j1
)(x x
j+1
) (x x
n
)
(x
j
x
0
) (x
j
x
j1
)(x
j
x
j+1
) (x
j
x
n
)
=
i=j
x x
i
x
j
x
i
.
Es facil ver que L
j
P
n
y que ademas
L
j
(x
i
) :=
_
1, i = j,
0, i ,= j.
Por tanto,
p
n
(x) = y
0
L
0
(x) +y
1
L
1
(x) +. . . +y
n
L
n
(x)
satisface las condiciones (11.1). Una vez probada la existencia deducimos por los mismos
argumentos la unicidad del polinomio de interpolacion.
La formula anterior se conoce como formula de Lagrange del polinomio de in-
terpolacion y la base del espacio de polinomios P
n
formada por L
j
j
se denomina base
de Lagrange del problema de interpolacion.
Ejercicio 11.1 Programar una funcion que eval ue el polinomio de interpolacion seg un la
formula de Lagrange en un conjunto de puntos.
1
Cada columna es el resultado de elevar a una potencia el vector [1 x
0
x
1
x
n
]
241
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
Solucion. He aqu una posible implementacion
2
01 % LAGRANGEP
02 %
03 % Y=LAGRANGEP(X0,Y0,X) devuelve en Y el valor del pol. de interp.
04 % que pasa por los puntos (X0,Y0) evaluado
05 % en x mediante la formula de Lagrange
06 %
07 % X0 y Y0 son dos vectores de la misma longitud, X puede ser un
08 % vector.
09
10 function y=lagrangep(x0,y0,x)
11
12 x0=x0(:).; y0=y0(:).; x=x(:).; % todos vectores filas
13 n=length(x0);
14 if (length(y0)~=n)
15 disp(ERROR. Long de x0 debe ser igual a Long de y0)
16 return
17 end
18 y=x*0; % y es un vector nulo de igual dimension que x
19
20 for j=1:n
21 p=ones(size(x));
22 for i=[1:j-1 j+1:n]
23 p=p.*(x-x0(i))./(x0(j)-x0(i));
24 end
25 y=y+p*y0(j);
26 end
27
28 return
ON V Cap
0
+
1
(x x
0
) +. . . +
n
(x x
n1
)(x x
n2
) (x x
0
). (11.2)
Ademas el sistema lineal que hay que resolver para obtener los coecientes
j
es ahora tri-
angular superior, por lo que su resolucion es practicamente directa en O(n
2
) operaciones.
243
B
o
r
r
a
d
o
r
11.1 Interpolacion polinomica LECCI
ON V
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 uti-
lizando 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 no-
tacion 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)
244
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
Orden 0 Orden 1 Orden 2 Orden 3
x
0 f(x
0
) = f[x
0
]
//
f[x
0
, x
1
]
//
f[x
0
, x
1
, x
2
]
//
f[x
0
, x
1
, x
2
, x
3
]
x
1 f(x
1
) = f[x
1
]
//
66
m
m
m
m
m
m
m
m
m
m
m
m
m
f[x
1
, x
2
]
66
m
m
m
m
m
m
m
m
m
m
m
m
m
//
f[x
1
, x
2
, x
3
]
66
l
l
l
l
l
l
l
l
l
l
l
l
l
x
2 f(x
2
) = f[x
2
]
//
66
m
m
m
m
m
m
m
m
m
m
m
m
m
f[x
2
, x
3
]
66
m
m
m
m
m
m
m
m
m
m
m
m
m
x
3 f(x
3
) = f[x
3
]
66
m
m
m
m
m
m
m
m
m
m
m
m
m
Figura 11.3: Estructura del calculo de las diferencias dividas.
Ejercicio 11.3 Implementa el calculo del polinomio de interpolacion mediante diferencias
divididas.
Solucion. Nuestra intencion es, si no se especican valores donde evaluar el polinomio,
que se devuelva el polinomio escrito en forma simbolica. Es decir, declararemos x como
variable simbolica y devolveremos el polinomio en esta variable. Podemos escoger hacerlo
en forma expandida o bien simplemente escrito en la forma anidada. Nosotros hemos
escogido hacerlo en la segunda forma.
Por otro lado y entrando ya en el tema de su implementacion, en el algoritmo anterior
todas las entradas de los vectores y matrices implicados se numeran de 0 a n. Hay que tener
en cuenta, como ya hemos hecho repetidas veces, que la numeracion en Matlab comienza
necesariamente en 1 y por tanto los vectores y bucles iran de 1 a n+1. Recordemos que
n+1 es la longitud del vector de datos. Aunque en teora renumerar el algoritmo es
algo sencillo, hay que hacerlo con cierto cuidado.
Dicho esto, una implementacion posible es la siguiente
01 % NEWTONP
02 %
03 % Y= NEWTONP(X0,Y0) devuelve el polinomio que interpola
04 % en (X0,Y0) escrito en forma de Newton
05 %
06 % Y= NEWTONP(X0,Y0,X) devuelve en Y el polinomio interpolante
07 % evaluado en X
08
09 function y=newtonp(x0,y0,varargin)
10
11 x0=x0(:).; y0=y0(:).; n=length(x0)-1;
12 if (length(y0)~=n+1)
13 disp(long de x0 debe ser igual long de y0)
246
B
o
r
r
a
d
o
r
LECCI
ON V Cap
Ejercicio 11.4 El bucle interno en las lneas 25-27 se puede vectorizar. Hazlo.
Un analisis mas detenido muestra que no es necesario denir toda una matriz D sino
que es posible realizar todo el proceso con un vector. Para ello observa que las diferencias
D(i, j) con solo se utilizan dos veces, para construir D(i 1, j + 1) y D(i, j + 1). Esto se
consigue modicando las lneas 03-08 del algoritmo como sigue
Modicacion
03 D = y
0
;
04 for j=1:n
05 for i=n:-1:j
06 D(i) =
D(i) D(i 1)
x
0
(i) x
0
(i j)
07 end
08 end
247
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
estable numericamente. Sin embargo, con un n umero (muy) elevado de puntos, la inesta-
bilidad numerica subyacente se hace palpable.
4
Es decir, calcular el polinomio de grado n, que minimiza
i
(p(x
i
) y
i
)
2
.
248
B
o
r
r
a
d
o
r
LECCI
ON V Cap
n
(x)
(11.10)
donde
x
[a, b] depende de x. Vemos que hay varias contribuciones al error nal:
el factor 1/(n + 1)! que tiende rapidamente a 0,
un factor que depende del crecimiento de la derivada n + 1,
un termino que depende de la colocacion de los nodos de interpolacion y que puede
ser muy oscilante.
En vista de lo anterior sera facil concluir que hay convergencia del polinomio de
interpolacion a la funcion si esta es suave. Dicho de otra manera, funcion y polinomio se
volveran indistinguibles si tomasemos un n umero elevado de puntos.
Desafortunadamente
5
, la conclusion anterior es falsa. Uno de los primeros (con-
tra)ejemplos lo encontro Carl Runge
6
a nales del siglo XIX
7
. Consista en interpolar la
funcion
f(x) =
1
1 + 25x
2
en el intervalo [1, 1] en un conjunto uniforme de puntos. El resultado (desastroso) se
muestra en la Figura 11.4.
Una forma de reducir el error es controlar la funcion
n
(x) para que sea lo mas peque na
posible. As, el problema se plantea en los siguientes terminos
8
Que eleccion de los nodos x
0
, x
1
, . . . , x
n
hace que max
x
[
n
(x)[ sea
mnimo?.
5
Y contraintuitivamente. Como entender si no que dos funciones regulares que coincidan en un n umero
cada vez mayor de puntos no acaben siendo muy similares?
6
Matematico aleman de nales del siglo XIX. Tambien es conocido por ser codesarrollador del Metodo
Runge-Kutta para la resolucion de problemas de valor inicial.
7
Este fue el siglo de la fundamentacion de las Matematicas. Se probo que multitud de resultados que se
tenan como evidentes eran falsos y fue necesario reconstruir las Matematicas desde su base. Por ejemplo,
en el mismo siglo se mostro la existencia de funciones no continuas en ning un punto, de funciones continuas
pero no derivables en ning un punto, as como de funciones con un n umero innito de maximos y mnimos
locales. Tambien se construyeron curvas que rellenaban el plano, curvas cerradas que englobando una area
nita tenan una longitud innita (fractales)... Algunas de estas construcciones, originarias esencialmente
en las Matematicas puras han encontrado en el siglo XX aplicaciones a problemas de ndole esencialmente
practico.
8
Un problema min-max: minimizar un maximo.
249
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.
250
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
(Ayuda: El Teorema de Rolle establece que si g es derivable en [a, b] con g(a) = g(b) entonces
existe c (a, b) tal que
g
(c) = 0.
Aplicando este resultado, concluimos que existe
j
(x
j
, x
j+1
) (j = 0, . . . , n 1) tal que
f
(
j
) p
(
j
) = 0.
Se puede aplicar el mismo resultado para probar que existen n 2 puntos tales que f
(
j
) =
p
(
j
) y as sucesivamente.)
11.2. Extensiones adicionales
11.2.1. Interpolacion de Hermite
La interpolacion de Hermite incorpora las derivadas como datos adicionales. Concre-
tamente, partimos de este conjunto de datos
_
_
(x
0
, f(x
0
)), . . . , (x
0
, f
(m
0
)
(x
0
))
(x
1
, f(x
1
)), . . . , (x
1
, f
(m
1
)
(x
1
))
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(x
n
, f(x
n
)), . . . , (x
n
, f
(m
n
)
(x
n
))
Observa que estamos asumiendo que no hay huecos en los datos. Esto, si por ejemplo la
derivada de orden 2 es dato, tambien lo es el valor de la funcion y su primera derivada.
El n umero total de datos es
N := (m
0
+ 1) + (m
1
+ 1) + + (m
n
+ 1),
por lo que el polinomio debera tener grado N 1.
El analisis de este problema no tiene mayor dicultad que el ya realizado para la inter-
polacion polinomica de Lagrange. La clave esta en la fuerte relacion entre diferencias divi-
didas y derivada, mostrada en el Ejercicio 11.10. As, se hace la siguiente interpretacion:
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 consid-
eramos 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,
252
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
devuelve de hecho el polinomio de Taylor de orden 5 de f(x) = exp(x) en el cero. La
orden
>> simple(hermitep(x0,y0))
hace mas evidente esta identidad.
11.2.2. Interpolacion de funciones periodicas
Si una funcion es periodica es natural reemplazar en el problema de interpolacion los
polinomios por funciones periodicas sencillas con el mismo periodo. Por simplicar, vamos
a suponer que estamos considerando unicamente funciones 2periodicas, aunque las ideas
que a continuacion expondremos se extienden facilmente a funciones con cualquier periodo.
Concretamente, si se trata de funciones 2periodicas podemos utilizar
sen(nx), cos(nx), n N 0
para interpolarlas, o bien,
exp(inx), n Z.
Ambas son equivalentes, como ya vimos en la Leccion 3 con la FFT, pero la utilizacion
de exponenciales complejas facilita tanto el analisis como la manipulacion as como la
extension de la interpolacion a funciones complejas
Supongamos que tomamos un n umero impar 2n+1 de puntos de interpolacion equidis-
tantes:
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?
254
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
trozos y las poligonales. En este ultimo caso, se trata sencillamente de unir los puntos por
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.
256
B
o
r
r
a
d
o
r
LECCI
ON V Cap
ON V
0 0.2 0.4 0.6 0.8 1
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
Figura 11.7: Interpolacion con splines c ubicos naturales
Tenemos as dos problemas de interpolacion desacoplados, esto es, cada uno se resuelve in-
dependiente del otro. Queda como cuestion pendiente la eleccion de T en (11.12) y de los
puntos t
j
en (11.13). Una buena eleccion es tomar
h
j
:=
_
(x
j+1
x
j
)
2
+ (y
j+1
y
j
)
2
,
que coincide con la longitud del segmento que une (x
j
, y
j
) y (x
j+1
, y
j+1
), y hacer luego
t
0
= 0, t
k
:= h
0
+h
1
+. . . +h
k1
, T = t
n
.
Una vez ya calculados, la curva se dibuja evaluando
x(t) := (cx(t), cy(t)), t [0, T].
Implementa un programa que siga este prototipo
01 SPLINE2D
02
03 SPLINE2D(X,Y) Traza una curva en el plano que pasa por
04 (X(i),Y(i)) utilizando splines cubicos
05
Ejercicio 11.15 El comando ginput permite introducir los puntos a traves del raton. Lee
bien la ayuda y modica el programa anterior para que haga posible la lectura de los datos
con el raton en caso de que se llame a la funcion sin argumentos.
Entre las posibilidades que ofrece esta la de controlar que tecla o boton del raton se ha
utilizado.
258
B
o
r
r
a
d
o
r
LECCI
ON V Cap
n
j=0
son una base de P
n
. Dicho de otra forma, cualquier polinomio se puede
escribir como una combinacion de estos polinomios.
259
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.
260
B
o
r
r
a
d
o
r
LECCI
ON V Cap
x
j+2
j
Figura 11.9: Ordenacion de nodos para la curva Bezier.
Una forma de determinar
15
este orden es medir el angulo entre los vectores
u =
x
j
y, v =
x
j+1
y
y quedarse con aquel para el que angulo
j
sea mayor (vease la Figura 11.9). Para ello,
basta utilizar que
[ cos(
j
)[ =
[u v[
|u||v|
.
15
Gracias a Jon Garca por sugerirnos esta solucion.
261
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 geometric-
as. 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
matematica. Como resultado de este estudio surgieron las curvas B-spline, que reemplaz-
aban 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.
262
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 centu-
ry 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 MAT-
LAB 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.
264
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. . . . . 73
5.2. Eliminacion gaussiana y su representacion como un grafo. . . . . . . . . . 75
5.3. Historial del residuo para el metodo del Gradiente. . . . . . . . . . . . . . 93
5.4. Historial del residuo para el metodo del Gradiente Conjugado . . . . . . . 98
5.5. Efecto del en el Gradiente Conjugado. . . . . . . . . . . . . . . . . . . . . 103
7.1. Reglas de cuadratura: punto medio y trapecio . . . . . . . . . . . . . . . 116
7.2. Regla de Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.3. Diagrama del metodo de Romberg . . . . . . . . . . . . . . . . . . . . . . 128
7.4. Integracion adaptativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.5. Integracion adaptativa de
x . . . . . . . . . . . . . . . . . . . . . . . . 133
7.6. Primeras exponenciales trigonometricas. . . . . . . . . . . . . . . . . . . . 136
7.7. Coecientes de Fourier y transformada discreta de Fourier . . . . . . . . . 143
7.8. Ruido y su Transformada de Fourier Discreta . . . . . . . . . . . . . . . . 144
7.9. Filtrado del ruido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
9.1. Profile aplicado al metodo de Jacobi. . . . . . . . . . . . . . . . . . . . 184
9.2. Una web muy sencilla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
10.1. Ventana graca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
10.2. Ventana graca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
10.3. Edicion de un dibujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10.4. Una muestra de dibujos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
10.5. Modicacion del entorno del dibujo. . . . . . . . . . . . . . . . . . . . . . 218
10.6. Ejemplo de numeracion con subplot. . . . . . . . . . . . . . . . . . . . . 219
10.7. Disposicion simultanea de gracas con subplot. . . . . . . . . . . . . . . 221
10.8. Un dibujo en 3D con plot3. . . . . . . . . . . . . . . . . . . . . . . . . . 222
10.9. Icono para rotar los dibujos. . . . . . . . . . . . . . . . . . . . . . . . . . 223
10.10. Ejemplo de una supercie creada con surf. . . . . . . . . . . . . . . . . . 224
10.11. Otro ejemplo de surf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
265
B
o
r
r
a
d
o
r
10.12. Utilizacion de nan en un dibujo. . . . . . . . . . . . . . . . . . . . . . . . 226
10.13. Algunas opciones con surf. . . . . . . . . . . . . . . . . . . . . . . . . . 228
10.14. Esferas en 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
10.15. Una supercie con surf y pcolor. . . . . . . . . . . . . . . . . . . . . . . 231
10.16. Lneas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
10.17. Campo de velocidades con quiver . . . . . . . . . . . . . . . . . . . . . . 233
10.18. Triangulacion no conforme. . . . . . . . . . . . . . . . . . . . . . . . . . . 235
10.19. Numeracion de triangulos . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
10.20. Un dominio mallado en triangulos. . . . . . . . . . . . . . . . . . . . . . . 237
11.1. Dos formas de escribir y evaluar un polinomio. . . . . . . . . . . . . . . . 240
11.2. Polinomios de interpolacion con diferentes grados y el error cometido. . . 243
11.3. Estructura del calculo de las diferencias dividas. . . . . . . . . . . . . . . 246
11.4. Ejemplo de Runge. Polinomio de interpolacion y error cometido. . . . . . 250
11.5. Ejemplo de Runge con otros nodos. . . . . . . . . . . . . . . . . . . . . . 251
11.6. Rigidez polinomica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
11.7. Interpolacion con splines c ubicos naturales . . . . . . . . . . . . . . . . . 258
11.8. Curvas Bezier para algunas conguraciones de puntos. . . . . . . . . . . . 260
11.9. Ordenacion de nodos para la curva Bezier. . . . . . . . . . . . . . . . . . 261
266
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 . . . . . . . . . . . . . 31
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
267
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2. Argumentos de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5. Matrices sparse en Matematicas. Metodos iterativos 71
5.1. Metodo de Gauss para matrices sparse . . . . . . . . . . . . . . . . . . . . 71
5.2. Metodos iterativos para sistemas lineales . . . . . . . . . . . . . . . . . . . 76
5.2.1. Denicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2.2. Detalles sobre la implementacion . . . . . . . . . . . . . . . . . . . 78
5.2.3. Metodos iterativos clasicos . . . . . . . . . . . . . . . . . . . . . . . 79
5.2.4. Metodos de tipo gradiente . . . . . . . . . . . . . . . . . . . . . . . 88
III Funciones como argumento. Recursividad
Formulas de cuadratura. FFT 105
6. Matlab: Funciones como argumentos. Recursividad 109
6.1. Funciones inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.2. Funciones como argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.2.1. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7. Formulas de cuadratura. FFT 115
7.1. Formulas de cuadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.1.1. Primeras nociones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.1.2. Reglas simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
7.1.3. Retorno a las reglas compuestas . . . . . . . . . . . . . . . . . . . . 122
7.1.4. Reglas gaussianas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.1.5. Extrapolacion de Richardson . . . . . . . . . . . . . . . . . . . . . . 126
7.1.6. Integracion adaptativa . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.2. Transformada rapida de Fourier . . . . . . . . . . . . . . . . . . . . . . . . 134
7.2.1. Transformada de Fourier discreta . . . . . . . . . . . . . . . . . . . 135
7.2.2. Calculo de la transformada de Fourier Discreta . . . . . . . . . . . . 140
7.2.3. Aplicaciones a la eliminacion de ruido . . . . . . . . . . . . . . . . . 142
7.2.4. Transformada rapida de Fourier . . . . . . . . . . . . . . . . . . . . 144
IV Calculo simbolico, arrays y celdas en Matlab. Valores y
vectores propios. Google. 153
8. Matlab: Calculo simbolico y estructuras de datos. 157
8.1. Polinomios y calculo simbolico . . . . . . . . . . . . . . . . . . . . . . . . . 157
8.1.1. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
268
B
o
r
r
a
d
o
r
8.2. Procesador simbolico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.3. Tensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8.4. Vectores de celdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
9. Calculo numerico de valores y vectores propios. 171
9.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
9.2. Matrices semejantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9.3. Metodo de potencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.3.1. Descripcion del metodo . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.3.2. Variantes del metodo de potencias . . . . . . . . . . . . . . . . . . . 178
9.4. Metodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
9.4.1. Descripcion del metodo . . . . . . . . . . . . . . . . . . . . . . . . . 179
9.4.2. Variantes del metodo de Jacobi . . . . . . . . . . . . . . . . . . . . 183
9.5. Metodo QR de Francis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
9.5.1. Factorizacion QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
9.5.2. Metodo QR de Francis . . . . . . . . . . . . . . . . . . . . . . . . . 192
9.5.3. Comentarios adicionales . . . . . . . . . . . . . . . . . . . . . . . . 193
9.6. Valores y vectores propios en Matlab . . . . . . . . . . . . . . . . . . . . . 195
9.7. Notas historicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
9.8. Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
V Salidas gracas en Matlab. Interpolacion 203
10.Matlab: Salidas gracas en Matlab 207
10.1. Dibujos bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
10.1.1. El comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
10.1.2. Comandos asociados a plot . . . . . . . . . . . . . . . . . . . . . . 213
10.1.3. Comandos get y set . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.1.4. El comando subplot . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.1.5. Otras salidas gracas . . . . . . . . . . . . . . . . . . . . . . . . . . 220
10.2. Gracas en 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
10.2.1. El comando plot3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
10.2.2. El comando surf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
10.2.3. Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
10.2.4. Comandos faciles de usar . . . . . . . . . . . . . . . . . . . . . . . 233
10.3. Campos vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
10.4. Dibujos sobre dominios mallados en triangulos . . . . . . . . . . . . . . . . 234
11.Interpolacion. Curvas Bezier 239
11.1. Interpolacion polinomica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
11.1.1. Interpolacion polinomica de Lagrange . . . . . . . . . . . . . . . . . 239
11.1.2. Existencia del polinomio de interpolacion . . . . . . . . . . . . . . . 240
11.1.3. Formula de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
11.1.4. Analisis del error de interpolacion . . . . . . . . . . . . . . . . . . . 249
11.2. Extensiones adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
11.2.1. Interpolacion de Hermite . . . . . . . . . . . . . . . . . . . . . . . . 252
269
B
o
r
r
a
d
o
r
11.2.2. Interpolacion de funciones periodicas . . . . . . . . . . . . . . . . . 254
11.2.3. Interpolacion polinomica a trozos . . . . . . . . . . . . . . . . . . . 255
11.3. Curvas Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
270
B
o
r
r
a
d
o
r