Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Febrero de 2006
Disponible en
http://www.unavarra.es/personal/victor dominguez/
r
do
rra
Bo
Prefacio
El origen de este libro es una asignatura de libre eleccion que uno de los autores impartio durante los cursos 20042005 y 20052006 en la Universidad P
ublica de Navarra.
Nuestra intencion original era tratar temas algo avanzados de Calculo Cientfico y utilizar
Matlab como va para su aprendizaje. Los alumnos, obviamente, estaban mas interesados
en aprender Matlab y vean el Numerico como forma de probar y ensayar las diferentes
herramientas de Matlab que se iban exponiendo en clase. Desafortunadamente, la formacion en Numerico de nuestros alumnos nos obligo a relajar considerablemente el contenido
matematico del curso y a ser mas modestos, desde el punto de vista teorico, en nuestros
objetivos. El resultado final en su vertiente matematica se podra enmarcar sin problemas
en un curso introductorio de Calculo Numerico. En cuanto a Matlab, creemos que hemos
tratado todos sus aspectos fundamentales aunque en ocasiones sea de forma superficial.
Nuestro objetivo era conseguir no tanto un conocimiento muy profundo de Matlab como
el de colocar al alumno en una buena posicion de arranque para un autoaprendizaje.
El enfoque y los temas tratados son consecuencia de diversos factores entre los que
conviene citar nuestro propio bagaje matematico1 , el uso que hemos tenido que hacer de
Matlab en nuestra carrera investigadora y, como ya hemos mencionado, los conocimientos
de partida que tenan nuestros propios alumnos. Hemos insistido bastante en la manip
ulacion de vectores y matrices y a la programacion en forma vectorizada. Esta
es una
de las diferencias mas acusadas con los lenguajes de programacion tradicionales y una
implementacion eficiente en Matlab pasa necesariamente por la vectorizaci
on.
Los apuntes estan organizados en torno a temas o lecciones, cada cual dividido en dos
partes, la primera de Matlab y la segunda con un tema especfico de Calculo Numerico.
En la primera parte se presentan los aspectos instrumentales de Matlab que utilizaremos
en la implementacion de los algoritmos de la parte de Numerico. La longitud de cada
parte es variable, y dependiente de la dificultad tratada ya sea en la parte instrumental
(Matlab) o en la parte matematica. De tanto en tanto nos hemos permitido hacer algo de
Matematicas tratando de presentarlas en la forma mas simple posible.
A lo largo de estas paginas el lector podra encontrar ejercicios, algunos de ellos resueltos, que tratan de ahondar en puntos especficos, matematicos e informaticos. Finalmente
se han introducido algunas notas historicas que describen brevemente la evolucion que han
tenido las ideas a lo largo del tiempo. Con ello tratamos de combatir la idea gaussiana,
demasiado extendida, de las Matematicas como un mundo estatico, monoltico y perfecto
donde la teora se presenta cerrada y completa. Las Matematicas en general y el Calculo
Cientfico en particular recorren un largo trecho antes de llegar a este estado, durante
el cual brotan ideas constantemente, siempre prometedoras en un primer momento, que
1
r
do
rra
Bo
http://www.wikipedia.org
ii
r
do
rra
Bo
A Javier
Amigo y maestro.
r
do
rra
Bo
r
do
rra
Bo
Captulo 1
Introducci
on
... and the first lesson of all was the basic trust that he
could learn. It is shocking to find how many people do
not believe they can learn, and how many more believe
learning to be difficult.
Dune
Frank Herbert
1.1.
Qu
e es?
procesamiento de se
nales (analisis, compresion de datos,..);
por ejemplo, el metodo de Gauss, el calculo de las descomposiciones mas habituales del algebra
matricial numerica (LU , LL> , QR), metodos iterativos,...
2
Fortran significa Formula translation. Desarrollado por IBM en 1954, es considerado como el primer
lenguaje de alto nivel. Las u
ltimas actualizaciones (Fortran 95 y Fortran 2003) han dado nuevo vigor a
este veterano lenguaje de programaci
on.
dise
no de sistemas de control;
salidas graficas;
estadstica;
r
do
rra
Bo
simulacion de sistemas dinamicos.
La extensa gama de problemas que cubre hace de Matlab un lenguaje difcil de entender
y manejar en su completitud. Esto no quiere decir que sea inarbodable: el conocimiento
base que permite empezar a trabajar es muy sencillo. No obstante el elevado n
umero de
3
comandos que se encuentra a disposicion del usuario provoca que en ocasiones existan
problemas no solo para encontrar los comandos adecuados sino tambien para tener una
idea de que posibilidades exactamente ofrece Matlab en un problema o tarea en particular.
1.2.
C
omo trabaja?
A modo de ejemplo, estos comandos cubren salidas graficas: plot, line, ezplot, ezsurf, surf,
surfc, line, patch, plot3, contour, contourf, ezcontour, pcolor, trimesh, trisurf,...
r
do
rra
Bo
Vectorizada
y=zeros(1,1000);
h=2*pi/999;
for i=0:999
y(i+1)=sin(h*i);
end
y=sin(linspace(0,2*pi,1000));
En la primera parte del codigo, encontramos una estructura tpica en los lenguajes de
programacion: el comando for. Su significado es claro: las lneas comprendidas entre el for
y end se repiten 1000 veces con la variable i tomando valores de 0 a 999. El resultado final
es el vector fila y que recoge el valor del seno en 1000 puntos uniformemente espaciados
en [0, 2].
Por otro lado, el comando linspace devuelve un array que contiene 1000 puntos
equidistantes entre 0 y 2. La funcion seno es aplicada sobre todo el array devolviendo
un vector con estos valores que se guarda en y. La diferencia entre ambas formas de
programar es ahora patente. Mientras que en la primera realizamos 1000 llamadas a la
funcion seno con un argumento por llamada, en la segunda hay una u
nica llamada donde
se requiere el calculo del seno en 1000 puntos, y el resultado se devuelve en un vector con
estos valores (y por tanto tambien de longitud 1000).
Desde el punto de vista de Matlab el segundo codigo es mas eficiente. Habitualmente,
la vectorizacion lleva consigo una reducci
on del codigo a la vez que se incrementan las
necesidades de memoria.
Con Matlab 6.5 se inicio un proyecto a mas largo plazo consistente en la aceleracion
(Performance Acceleration) de las versiones no vectorizadas dirigida a estrechar las diferencias con los lenguajes clasicos de alto nivel como Fortran, C o Pascal5 . En cualquier caso,
la posibilidad de ejecutar instrucciones en bloque sobre vectores o matrices, en contraste
con operaciones elemento a elemento como en los lenguajes tradicionales, es algo que
conviene explotar por las importantes ventajas que proporciona.
4
Tambien est
a la extensi
on *.mat, propia de ficheros de datos.
De hecho en la version 6.5 apenas hay diferencias en tiempo de ejecucion entre los dos codigos
expuestos.
5
1.3.
C
omo aprenderemos?
r
do
rra
Bo
Como ya hemos se
nalado anteriormente, aprender a manejar Matlab en su totalidad
esta fuera de los contenidos de un curso introductorio como este. No as aprender los
fundamentos y preparar el terreno para un autoaprendizaje de las partes en las que cada
uno este interesado. Encontramos en este punto dos dificultades que salvar: saber de la
existencia del comando adecuado y aprender a utilizarlo. En no pocas ocasiones, la primera
es la mayor dificultad. No obstante los comandos llevan siempre nombres nemotecnicos
para facilitar su memorizacion. Las funciones de ayuda tambien echan una mano.
Como a programar se aprende programando, comenzaremos escribiendo codigo desde
los primeros pasos. Los esquemas numericos que implementaremos se encuentran practicamente en cualquier curso introductorio de Analisis Numerico. En cada leccion implementaremos dichos algoritmos, introduciendo ordenes, estructuras de decision, datos,...
seg
un sea necesario.
En los apuntes se incluyen m
ultiples ejercicios cuya realizacion ayudara al aprendizaje
de la asignatura. Estos apuntes no deben tomarse como un manual en el estilo usual, sino
como una forma de aprender Matlab y repasar o aprender el Analisis Numerico basico.
Ya existen manuales extensos y concienzudos, en la bibliografa citamos algunos de ellos,
que pueden servir para ese fin.
r
do
rra
Bo
Leccion I
r
do
rra
Bo
r
do
rra
Bo
Introducci
on
r
do
rra
Bo
r
do
rra
Bo
Captulo 2
Entorno de trabajo
Estas
son las caractersticas basicas que debemos considerar:
I
LECCION
r
do
rra
Bo
Figura 2.1: Pantalla Principal.
El caracter % se utiliza para insertar comentarios. Todo lo que sigue (en la misma
lnea) es ignorado por Matlab.
10
I
LECCION
y observa la salida.
Haremos algunos comentarios sobre el ejercicio anterior. El circunflejo ^ es la potenciacion:
>> 3^5
r
do
rra
Bo
ans=
243
10
>> ans*2
ans =
20
>> ans*2
ans =
40
La raz cuadrada se puede calcular bien elevando a 1/2 (^(1/2)) o bien utilizando sqrt.
Ejercicio 2.2 Comprueba la diferencia entre
4/4+6
4/(4+6)
3^5*2
3^(5*2)
I
LECCION
115 1012
0.00031415
5e 3
1.2012e009
115e12
3.1415e 004
r
do
rra
Bo
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
% mayor precision
ans =
3.14159265358979
Aproximadamente 16 cifras decimales correctas. En el momento de redactar estas lneas, los procesadores de 32 bits dominan todava el parque de ordenadores. Las nuevas generaciones, con procesadores
con 64 bits, duplican la precisi
on de trabajo.
12
I
LECCION
% mas espaciada
r
do
rra
Bo
ans =
355/113
Observa la diferencia de espaciamiento que se obtiene con las opciones compact y loose.
N
umeros complejos
La
aritmetica compleja se encuentra tambien integrada en Matlab. La unidad imaginaria ( 1) se representa en Matlab con i o j:
>> clear i j % borramos posibles valores de i y j
>> i^2
ans=
-1
>> j^2
ans=
-1
El signo i suele ser habitual en Matematicas mientras que en diversas ramas de la Fsica
y en Ingeniera de Telecomunicaciones o Electrica se prefiere el smbolo j (en este caso
para no confundir con la intensidad de corriente electrica). De ah que Matlab permita
ambas representaciones.
Todas las operaciones matematicas incluyen la aritmetica compleja en el sentido usual
>> 1+i +5-6i
ans =
6.0000 - 5.0000i
13
I
LECCION
ans =
r
do
rra
Bo
-0.20
0.0030 - 0.0002i
>> abs(3+4i),
angle(2i)
% modulo y argumento
ans =
ans =
1.5708
2.2.
Comandos de ayuda
helpwin: similar a help pero despliega la ayuda en una ventana auxiliar, permitiendo as una navegacion, estilo web, muy comoda.
lookfor: permite buscar una cadena en la primera lnea de todos los ficheros de
ayuda.
SIN
Sine.
SIN(X) is the sine of the elements of X.
Overloaded methods
help sym/sin.m
14
I
LECCION
r
do
rra
Bo
Figura 2.2: Pantalla de ayuda.
o bien
Ejercicio 2.3 Utilizando las funciones de ayuda, obtener informacion de alguna de estas
funciones elementales de Matematicas
sin
sec
sinh
exp
cos
csc
cosh
log
tan
cot
tanh
log10
asin
asec
asinh
log2
acos
acsc
acosh
sign
atan
acot
atanh
Mediante la instruccion
2
15
I
LECCION
2.3 Variables
r
do
rra
Bo
Figura 2.3: Ayuda con helpwin. Comprueba si aparece la opcion Go to online doc...
>> help +
2.3.
Variables
Matlab no necesita la declaracion de variables como en un lenguaje tradicional. En principio 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
I
LECCION
r
do
rra
Bo
Figura 2.4: Ayuda on line.
El comando who sirve para conocer los nombres de las variables declaradas, mientras
que con whos obtenemos una informacion mas precisa:
>> who
>> whos a
Name
Size
a
Bytes
1x1
Class
double array
I
LECCION
2.3 Variables
>> a=4;
>> whos a
Size
1x1
Bytes
Class
double array
r
do
rra
Bo
Name
>> clear a
>> whos a
>>
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
Matlab ofrece la posibilidad de grabar las variables que deseemos en un fichero. De esta
forma, podemos recuperarlas mas adelante, ya sea en la misma sesion o en otra diferente3 .
Por ejemplo
>>
>>
>>
>>
graba dentro del directorio de trabajo, en un fichero de nombre datos.mat, las variables
indicadas. Para recuperar, basta ejecutar
>> load
datos
18
I
LECCION
2.4.
r
do
rra
Bo
2.4.1.
Ficheros script
Un fichero script es un simple documento de texto que contiene una sucesion de comandos de Matlab. Esencialmente es equivalente a teclear estas instrucciones directamente
en la ventana de comandos.
Describiremos el manejo de este tipo de ficheros mediante un sencillo ejemplo. Comenzamos creando un fichero tecleando en modo comando la orden4
>> edit prueba
Se despliega as en una ventana aparte el editor de Matlab con el fichero prueba.m (.mes
la extension estandar de Matlab). Es importante saber cual es el directorio de trabajo5 ,
pues es donde se guardara por defecto el fichero.
Tecleamos ahora en el editor
a=1+i; b=1-i;
disp(a*b=)
disp(a*b)
disp(a/b=)
disp(a/b)
disp(sqrt(a)=)
disp(sqrt(a))
El comando disp (de display) muestra vectores por pantalla de forma compacta. Dado que
para Matlab un cadena de caracteres es simplemente un vector de caracteres, se consigue
con ello mostrar por pantalla mensajes de forma concisa.
Una vez que el documento esta grabado, para ejecutar las ordenes que contiene basta
teclear el nombre del fichero en la ventana de comandos:
>> prueba
Se puede modificar las veces que se precise las variables a y b en el fichero script sin tener
que teclear de nuevo todas las instrucciones.
2.4.2.
Funciones
En principio existen dos tipos de funciones: las funciones inline, que se insertan en
la lnea de comandos y las que se escriben en un documento de texto externo. Esta u
ltima
forma, que es la evolucion natural de los ficheros script, es mas flexible y es en la que nos
centraremos a continuacion. Dejaremos pendiente para la Leccion III la descripcion de las
funciones inline.
Como antes, para crear un fichero que contenga a una funcion se puede teclear:
4
5
19
I
LECCION
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
y=x^2-cos(x);
return
10.8696
Nota. Los n
umeros correlativos situados a la izquierda no forman parte del c
odigo
de la funci
on. Han sido insertados con el fin de numerar las lneas y as facilitar los
comentarios que podamos hacer sobre el programa.
Una funcion puede no tener salidas, por ejemplo,
01
02
03
04
05
06
07
08
09
10
11
12
13
14
% INFORMACION
%
% INFORMACION devuelve informacion sobre
% la precision de la maquina
%
function informacion
disp(precision de la maquina)
disp(eps)
disp (mayor numero real)
disp(realmax)
disp (menor numero real)
disp(realmin)
return
20
I
LECCION
o bien devolver m
ultiples salidas:
% MIFUNCION2
%
% [Y1,Y2]=MIFUNCION2(X1,X2,X3) devuelve
%
% Y1=X1+X2+X3;
% Y2=X1-X2+X3;
%
function [y1,y2]= mifuncion2(x1,x2,x3)
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
y1=x1+x2+x3;
y2=x1-x2+x3;
return
>> [z1,z2]=mifuncion2(1,2,3);
>> z1
ans=
>> z2
ans=
>> z=mifuncion2(1,2,3);
ans=
La cabecera que hemos introducido en el preambulo de las funciones, es decir las lneas
anteriores a la declaracion de la funcion y precedidas con %, constituyen la ayuda de la
funcion:
>> help mifuncion2
MIFUNCION2
[Y1,Y2]=MIFUNCION2(X1,X2,X3) devuelve
Y1=X1+X2+X3;
Y2=X1-X2+X3;
21
I
LECCION
r
do
rra
Bo
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-files, 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 distincion8 . 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 fichero y el comando utilizado para
llamarlo.
Todas las variables se envan por valor, no por referencia. Es decir, si una funcion
modifica una variable de entrada, esta modificacion se pierde cuando finalice su ejecucion,
recuperando el valor original.
Por u
ltimo, en un fichero 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 fichero son internas, es decir, utilizables u
nicamente
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 fichero que esta. Evitamos as llenar la carpeta
de trabajo, o de nuestro proyecto, con ficheros y mas ficheros.
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 matrices. Todo lo que sigue se puede adaptar a arrays con mas dimensiones, aunque por
simplificar, nos centraremos ahora en el manejo de vectores y matrices y dejaremos pendiente para la Leccion IV el uso de arrays multidimensionales (tensores).
2.5.1.
Definici
on de matrices y vectores
Un vector o una matriz se puede definir dando sus elementos entre corchetes y separando filas 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 fichero llamado operaciones.m no es posible crear otro con nombre
Operaciones.m
22
I
LECCION
3 1
1 2 4
3 4 , a2 = 1 0 1 ,
5 1
2 1 5
1
b = 3 ,
1
r
do
rra
Bo
definen las
a= 2
4
b2 =
1 1 2 2 .
Matlab distingue entre vectores fila 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 par
entesis
>> a(4,5)=9; a(2,1)=6; a(1,1)=-3.4;
>> a(4,5)
ans=
>> c(3,3)=2
% c pasa a ser 3 x 3
c =
0
0
0
4
0
0
0
0
2
Esta habilidad, aunque permite una programacion muy flexible y descuidada, debe utilizarse 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
I
LECCION
2.5.2.
Operaciones
Todas las operaciones habituales entre matrices, tales como la suma, producto, potenciacion, 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
r
do
rra
Bo
a*a2
a^2
a+a2
a.^2
a*a2
a.*a2
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),
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
I
LECCION
Nota. El operador backslash \ se utiliza profusamente para resolver sistemas de ecuaciones lineales, bajo la idea de que
Ax = b
x = A1 b.
As, si b es n 1 y a es n n,
r
do
rra
Bo
>> x=a\b;
1.0000
0.5000
0.5000
1.0000
es equivalente a
1.0000
0.5000
2.5.3.
0.5000
1.0000
Detalles adicionales
C
omo obtener las dimensiones de vectores y matrices
>> length(a3)
25
I
LECCION
r
do
rra
Bo
>> n
ans =
3
>> length(a3)
ans =
3
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
I
LECCION
Existen dos formas de introducir vectores cuyos valores siguen una distribucion regular
a:b:c construye el vector de valores [a a+b a+2*b .... a+k*b] donde a+k*b es
el mayor n
umero natural que cumple a+k*b c. La instruccion a:c toma b = 1.
linspace(a,b,n) devuelve una particion uniforme de [a, b] en n puntos.
r
do
rra
Bo
Por ejemplo,
>> 0:10
ans=
0 1 2 3 4 5 6 7 8 9 10
>> 10:-1:0
ans=
10
>> 0.1:0.3:1.5
ans =
0.1000
0.4000
0.7000
1.0000
1.3000
>> linspace(0,2,4)
ans =
0.6667
1.3333
2.0000
>> linspace(2,0,4)
ans =
2.0000
1.3333
0.6667
2.5.4.
I
LECCION
r
do
rra
Bo
>>a(2,:)
% fila 2 de a
ans =
>>a(:,1)
% columna 1
ans =
1
4
7
10
1
4
7
10
0
0
0
0
3
6
9
12
ans =
>> a(2:4,3)
ans =
28
I
LECCION
6
9
12
>> a(1:2,2:3) % matriz [a(1,2) a(1,3); a(2,2) a(2,3)]
r
do
rra
Bo
ans =
0
0
3
6
En general, si p es un vector de n
umeros enteros, v(p) devuelve [v(p(1)), v(p(2)),
..., v(p(n))]. Por ejemplo,
>> v=[0.1 0.2 0.3 0.4 0.5 0.6];
>> v(4:-1:2)
ans=
0.4000
0.300
0.2000
ans=
0.5000
0.1000
0.2000
0.3000
0.3000
Igualmente es facil a
nadir filas y columnas a una matriz:
>> a=[1 2 3 4; 5 6 7 8]
a =
1
5
2
6
3
7
4
8
a =
29
0.3000
I
LECCION
1
5
1
2
6
-1
3
7
2
r
do
rra
Bo
4
8
4
a =
1
5
1
2
6
-1
3
7
2
4
8
4
0
2
4
Si se desea eliminar una fila o columna se puede utilizar el smbolo vaco []. Por
ejemplo,
>> a(:,2)=[]
a =
1
5
1
3
7
2
4
8
4
0
2
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.
2.6.1.
En Matlab, la estructura
for j=inicio:paso:final
.....
end
implementa un bucle donde las lneas de codigo entre for y end son ejecutadas repetidamente con j tomando los valores del vector inicio:paso:final (vease la Seccion 2.5.3)
Por ejemplo,
>> for j=1:3;
1
disp(j);
end
30
I
LECCION
2
3
disp(j-2);
end
r
do
rra
Bo
En general, si v es un vector,
for j=v
.....
end
procede a ejecutar las lneas internas con j tomando los valores del vector v. Por ejemplo,
>> v=[2 5 3 1];for j=v;
2
disp(j);
end
5
3
1
1 12
1 1
2 3
A=
.. . . . . . . . . .
.
1
2n2
1
n
1
n
1
n+1
..
.
1
2n1
Construye la matriz anterior mediante un fichero script y el uso de dos for anidados.
2.6.2.
Operadores l
ogicos y estructuras de decisi
on
>
&
mayor,
y logico,
<
|
menor,
o logico
I
LECCION
r
do
rra
Bo
1
>> a<0
b<1
ans =
Size
test
1x1
Bytes
1
Class
logical array
p=(b>=1)
% entradas de b>=1
p=
1
Ocupan un u
nico byte mientras que un n
umero real utiliza ocho bytes.
32
I
LECCION
>> b(p)
1
r
do
rra
Bo
>> b(b>=1)
1
Nota. El comando logical puede utilizarse para construir vectores y estructuras logicas
a partir de vectores de n
umeros enteros:
>> b=[2 4 6 8 10]; p=[1 0 0 1
>> b(p) % Dara error
1];
10
La estructura de decision, como en muchos otros lenguajes, es if. Su sintaxis es la
siguiente:
if simple: si la operacion logica efectuada es verdadera, se ejecutan las lneas de
codigo comprendidas entre if y end
if (x<-1 | x>1)
disp(valor absoluto de x mayor que 1)
end
I
LECCION
r
do
rra
Bo
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 u
ltima instruccion es equivalente a anidar diferentes estructuras if, de la siguiente 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
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 flexible
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
I
LECCION
Por u
ltimo, y volviendo a end, este comando tiene una curiosa funcionalidad extra:
sirve para referenciar el u
ltimo elemento de una fila o columna de una matriz. Por ejemplo
b(4:end) selecciona todos los elementos de b desde la posicion cuarta en adelante.
Ejercicio 2.10 Que hace el siguiente fragmento de codigo?
r
do
rra
Bo
01
02
03
04
05
06
r=[]; aux=0;
while aux<0.8
aux=rand(1);
r=[r aux];
end
r(end)=[];
Ejercicio 2.11 Con la ayuda de Matlab, programa un par de ejemplos donde utilices switch
y while.
Ejercicio 2.12 (Un poco de todo) Implementa una funcion de nombre findnonzeros
que dado un vector de entrada devuelva el numero de elementos no nulos y un vector que
contenga dichos elementos.
Soluci
on. Una implementacion posible es la siguiente
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
% FINDNONZEROS
%
% [N,P]=FINDNONZEROS(X) devuelve
%
% N el numero de elementos no nulos en el vector X
% P un vector con los elementos no nulos de X
%
function [n,p]=findnonzeros(x)
p=[]; % p es vacio
for i=1:length(x)
if (x(i)~=0) % si x(i) no es cero
p=[p x(i)]; % apuntamos i al vector p
end
end
n=length(p);
return
I
LECCION
p =
Columns 1 through 5
0.3000
0.1000
0.6000
0.1000
r
do
rra
Bo
0.1000
Columns 6 through 7
0.2000
0.4000
Otra posible implementacion (mucho mas elaborada y mas propia de Matlab) es la siguiente
01
02
03
04
05
06
07
08
09
10
11
12
% FINDNONZEROS
%
% [N,P]=FINDNONZEROS(X) devuelve
%
% N el numero de elementos no nulos en el vector X
% P un vector con los elementos no nulos de X
%
function [n,p]=findnonzeros(x)
p=x(x~=0);
n=length(p);
return
Haz un esfuerzo en entender bien los comandos anteriores. Tras la suficiente 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
r
do
rra
Bo
Captulo 3
M
etodos directos para sistemas de
ecuaciones lineales
3.1.
M
etodo de Gauss
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 filas 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 fila otra fila e intercambiar
filas2 ). En lo que sigue expresaremos el sistema en la forma
Ax = b,
A Rnn ,
x, b Rn ,
37
I
LECCION
3.1.1.
M
etodo de Gauss sin pivotaje
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
for i = 1 : n 1
for k = i + 1 : n
`ki = aki /aii
for j = i + 1 : n
akj = akj `ki aij
end
bk = bk `ki bi
end
end
xn = bn /ann
for i = n 1 : 1 : 1
n
X
x i = bi
aij xj /aii
j=i+1
15
end
% GAUSS
%
%
% X=GAUSS(A,B)
%
es decir, el n
umero de multiplicaciones es n3 /3 + n2 + n + , donde , y son constantes
adecuadas. Con n creciente, el primer termino es el dominante.
38
I
LECCION
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function x = gauss(a,b)
n=length(a);
r
do
rra
Bo
El codigo anterior es correcto y ciertamente recuerda a la sintaxis que usaramos en una
programacion en un lenguaje tradicional como C o Pascal. Sin embargo desde el punto de
vista de Matlab es claramente redundante y muy mejorable. Los siguientes ejercicios
ahondan en estos aspectos por lo que resolverlos es muy recomendable.
Ejercicio 3.2 Reescribe el programa utilizando instrucciones y sintaxis propia de Matlab.
Soluci
on. Las filas 14-16 del programa (04--06 del algoritmo) se pueden implementar
como una diferencia de dos vectores, a(k,i+1:n) y a(i,i+1:n), con cualquiera de estas
dos instrucciones
a(k,i+1:n) =a(k,i+1:n) - l*a(i,i+1:n)
a(k,:) =a(k,:) - m*a(i,:)
Por que?.
39
I
LECCION
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 fila 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);
r
do
rra
Bo
Ejercicio 3.3 (Avanzado) Podemos avanzar aun mas hacia la consecucion de algoritmos
matriciales. Consideremos la particion de A
a11 c>
b1
1
A=
,
b=
d1 A11
b1
El segundo paso del metodo de Gauss se aplica ahora sobre la matriz A(1) (de tamano (n1)
(n 1)) y el vector b(1) (de tamano (n 1) 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?)
La nocion de vectorizacion, trabajar con vectores y matrices en lugar de elemento a elemento, 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 mnimos en un vector/matriz, suma de vectores y matrices... cuya implementacion se optimiza 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(n2 ) operaciones y el nivel tres son
operaciones entre matrices, O(n3 ) 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 trabajo5 .
5
Se deben buscar en primer lugar algoritmos que permitan dividir la tarea principal en subtareas
equiparables, y de forma que finalicen en tiempos similares puesto que basta con que una de las subtareas
se retrase respecto a las dem
as para que el conjunto de procesadores deba parar a esperar al rezagado
con la consiguiente perdida de tiempo (y dinero).
40
I
LECCION
Uno de los detalles mas sencillos que hay que plantear es la estrategia de almacenamiento de las matrices en memoria. Se puede optar por un almacenamiento por filas,
como hace C,
r
do
rra
Bo
A=
donde con la notacion anterior queremos decir que aij y aij+1 ocupan posiciones consecutivas en memoria.
Sin embargo Fortran o Matlab proceden por columnas
A=
Seg
un sea el caso se trata de primar algoritmos que accedan a la matriz por filas o por
columnas para que el procesador trabaje con posiciones consecutivas de memoria6 . En esta
dinamica, la resolucion del sistema triangular seg
un el algoritmo expuesto en el Ejercicio
3.3 esta mejor adaptado a la arquitectura de Matlab puesto que todas las operaciones se
hacen sobre columnas de la matriz a.
3.1.2.
M
etodo de Gauss con pivotaje parcial
Para evitar que el metodo de Gauss se colapse, es decir, que encuentre en un paso i
que el elemento aii es nulo (lnea 03 del algoritmo), se introduce la nocion de pivotaje. La
idea es muy sencilla: en el caso de que en el iesimo paso el pivote sea nulo, se procede a
intercambiar la fila i por una fila k tal que aki 6= 0 para cierto k > i. Si esto no es posible,
el sistema no es compatible determinado, es decir, o no tiene solucion o tiene infinitas
soluciones.
Desde un punto de vista practico, el metodo de Gauss con pivotaje procede a intercambiar siempre filas de forma que en cada paso
|aki | = max |a`i |,
`=i,...,n
esto es, el pivote es el mayor posible. Ello dota al sistema de una mayor estabilidad frente
a los errores de redondeo. El algoritmo resultante es el siguiente (denotamos por a b el
intercambio de valores de a y b).
Cuando un procesador moderno lee algo en memoria, suele cargar a su memoria internar, la memoria
cache, posiciones adicionales y consecutivas de memoria bajo la conviccion de que es probable que las
requiera en el siguiente paso.
41
I
LECCION
for j = i : n
aij akj
end
bi bk
r
do
rra
Bo
04
05
08
07
08
09
10
11
12
13
14
15
16
for i = 1 : n 1
for k = i + 1 : n
`ki = aki /aii
for j = i + 1 : n
akj = akj `ki aij
end
bk = bk `ki bi
end
end
Ejercicio 3.4 Implementa una funcion con el metodo de Gauss con pivotaje a partir de la
funcion definida en el Ejercicio 3.2.
Para este fin la instruccion max te puede resultar util. Especficamente,
>> [m,i]=max(v)
devuelve en m el mayor valor del vector v y en i su posicion, esto es, m = v(i). Anade tambien
un control sobre el tamano de a(i, i) de forma que si este es proximo a cero7 se termine la
ejecucion y se devuelva un mensaje de error.
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
42
I
LECCION
3.1.3.
M
etodo de Gauss con pivotaje parcial ficticio
Desde un punto de vista practico no hace falta intercambiar fsicamente las filas de la
matriz. En lugar de ello se puede utilizar un vector de ndices p de forma que p(i) sea la
posicion fsica en memoria de la fila i.
Inicialmente, las filas estan sin reordenar, es decir, se empieza declarando
r
do
rra
Bo
p=1:n;
y se procede a hacer ceros en las filas p(i+1),. . . , p(n). El acceso la fila i se consigue con
a(p(i),:)
y la b
usqueda del maximo valor para el intercambio de filas con
[m,r]=max(abs(a(p(i:n),i)));r=r+i-1;
x(p(n))=b(p(n))/a(p(n),n);
for i=n-1:-1:1
x(p(i))=(b(p(i))-a(p(i),i+1:n)*x(i+1:n))/a(p(i),i);
end
Ejercicio 3.6 Las lneas 2225 proceden a resolver el sistema triangular accediendo a los
elementos por filas. Adapta el algoritmo para la resolucion de este sistema por columnas, tal
como se hizo en el Ejercicio 3.3.
43
I
LECCION
r
do
rra
Bo
0
..
.
Aai = ei = 1 i.
.
..
0
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 coeficientes.
3.2.
Descomposiciones matriciales
Uno de los aspectos que mejores resultados dio a lo largo del siglo XX, en los albores del
3.2.1.
Descomposici
on LU
I
LECCION
r
do
rra
Bo
u
nica. Si exigimos que L tenga 1s sobre la diagonal, el n
umero de incognitas pasa a ser
2
de n y por tanto tenemos ya un sistema cuadrado (aunque no lineal). Se trata entonces
de estudiar el siguiente problema: dada una matriz A de tama
no n n, encontrar L y U
de la forma
1
u11 u12 u1n
`21 1
u22 u2n
L = ..
U =
,
.. . .
.. ,
.
.
.
.
. .
.
`n1 `n2 1
unn
for k = 1 : n
for j = k : n
ukj = akj
03
k1
X
`kp upj
p=1
04
05
06
end
`kk = 1
for i = k + 1:n
k1
X
`ip upk /ukk
`ik = aik
07
p=1
08
09
end
end
El n
umero de operaciones del algoritmo resulta ser igual al del metodo de Gauss,
con lo cual no hemos conseguido una ventaja significativa. Sin embargo, disponer de esta
descomposicion es especialmente u
til 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 u
nicamente 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
I
LECCION
r
do
rra
Bo
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, definamos
(
(1)
aij = aij i, j = 1, . . . , n
(k+1)
aij
(k)
(k)
k 1,
1 i, j n k
(1)
u1j = a1j ,
`i1 =
ai1
(1)
a11
(1)
(1)
(1)
(1)
(2)
(2)
a `i1 a
ai2 `i1 u12
a
= i2 (2) 12 = i2
.
(2)
u22
a22
a22
(j)
uij =
(i)
aij ,
i j,
`ij =
aij
(j)
i > j.
ajj
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 descomposicion LU de una matriz es la siguiente modificacion del programa del Ejercicio 3.1:
11
12
13
14
15
16
17
for i=1:n-1}
a(i,i+1:n)=0;
%hacemos cero la columna i
for k=i+1:n}
l(k,i)=a(k,i)/a(i,i);
a(k,i+1:n)=a(k,i+1:n)-l(k,i)*a(i,i+1:n);
end
end
I
LECCION
3.2.2.
Casos particulares
M
etodo de Cholesky
En una gran variedad de problemas practicos aparecen matrices simetricas definidas
positivas. Este tipo de matrices puede descomponerse en la forma
r
do
rra
Bo
A = LL>
donde
L=
`11
`21 `22
..
.. . .
.
.
.
`n1 `n2 `nn
02
for k = 1:n
v
u
k1
u
X
`2kr
`kk = takk
r=1
for j = k + 1:n
k1
X
`jr `kr /`kk
`jk = ajk
03
04
r=1
05
06
end
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.
Ly = b,
LU con permutaci
on
I
LECCION
donde P es el resultado de permutar las filas (o columnas) de la identidad. Alternativamente, equivale a una descomposicion de la forma
b
A = LU
r
do
rra
Bo
b = P 1 L, de forma que L
b es una permutacion de la matriz triangular inferior9 .
donde L
La siguiente subrutina devuelve esa descomposicion.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
%
%
%
%
%
%
%
LUPERMUTACION
[L,U]=LUPERMUTACION(A)
for i=1:n-1
[maximo,r]=max(abs(a(p(i:n),i)));r=r+i-1;
p([i r])=p([r i]);
for k=i+1:n
l(p(k),i)=a(p(k),i)/a(p(i),i);
a(p(k),i:n)=a(p(k),i:n)-l(p(k),i)*a(p(i),i:n);
end
end
for i=1:n
l(p(i),i)=1;
end
u=a(p,:);
return
3.2.3.
Todas las factorizaciones vistas con anterioridad estan, por supuesto, implementadas
en Matlab. Algunos de los comandos relacionados son
9
48
I
LECCION
r
do
rra
Bo
r=chol(a) devuelve r triangular superior de forma que a=r*r. Observa que con
las notaciones introducidas r es precisamente la traspuesta de la matriz
L, expuesta en nuestro algoritmo. El comando asume que la matriz es
simetrica por lo que solo trabaja con la parte superior de la matriz.
La colocacion de los parentesis es esencial. Con u\l\b se calcula (u1 l)1 b que obviamente 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 hist
orica11
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 definida positiva. 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 operaciones) 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 definio el producto matricial
identificandolo con el calculo de la composicion de aplicaciones lineales y definio la inversa 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 u
ltima por tener un menor coste computacional (aproximadamente la mitad).
11
Las principales referencias utilizadas para esta nota han sido Very Early Days of Matrix Computations, 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 est
an completamente detalladas en la bibliografa.
49
I
LECCION
r
do
rra
Bo
12
La vida de Alan Turing es una de las mas tragicas en historia de las matematicas. Dotado de una inteligencia precoz, realiz
o 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 utilizaci
on del primer ordenador electronico en el mundo (Colossus). El papel que
este trabajo an
onimo tuvo en la victoria aliada, los alemanes siempre estuvieron seguros de que su codigo
era indescifrable, s
olo 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 sugiri
o incluso resolucion de un sistema Ax = b mediante las ecuaciones
normales A> Ax = A> b (A> A es simetrica y definida positiva).
14
http://www.mathworks.com/company/newsletters/news notes/clevescorner/dec04.html
50
r
do
rra
Bo
Leccion II
51
r
do
rra
Bo
r
do
rra
Bo
Introducci
on
53
r
do
rra
Bo
r
do
rra
Bo
Captulo 4
Matlab: programaci
on avanzada
4.1.
A estas alturas el lector ya debera estar convencido sobre las capacidades de Matlab
en lo que se refiere al manejo de enormes cantidades de memoria. En esta seccion expondremos algunos comandos adicionales y entraremos con cierto detalle en la manipulacion
de matrices sparse1 .
4.1.1.
En ocasiones es importante tomar partes precisas de una matriz que no son necesariamente partes de filas, columnas o simplemente submatrices (estas acciones ya se trataron
en la primera leccion). Para este fin nos pueden servir las siguientes instrucciones
diag
triu
tril
La primera toma la diagonal de una matriz mientras que la segunda y tercera toman
la parte triangular superior (upper) e inferior (lower) respectivamente. Ademas estos comandos son algo mas flexibles de lo que pueda parecer a simple vista como veremos a
continuacion.
Empecemos introduciendo una matriz
>> a=[11 12 13; 21 22 23; 31 32 33];
Aceptaremos este anglicismo en lo que sigue. En ocasiones este vocablo se traduce por matrices huecas
o matrices dispersas.
55
II
LECCION
>> triu(a)
ans =
12
22
0
13
23
33
r
do
rra
Bo
11
0
0
>> tril(a)
ans =
11
21
31
0
22
32
0
0
33
El usuario puede especificar 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 (respectivamente 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
21
31
0
0
32
0
0
0
>> triu(a,0)
ans =
11
0
0
12
22
0
13
23
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
II
LECCION
encima de la diagonal superior y l una matriz triangular inferior con todas las entradas de
debajo de la diagonal principal.
Ejercicio 4.2 Que sucede si aplicamos los comandos anteriores a matrices rectangulares?.
r
do
rra
Bo
Con diag podemos tambien construir a partir de un vector una matriz diagonal
>> diag([1 2])
ans =
1
0
0
2
0
0
0
1
0
0
0
2
0
Ejercicio 4.3 Como utilizaras el comando diag para generar una matriz con la diagonal
de una dada?.
Nota. El comando blkdiag permite construir matrices diagonales por bloques:
>> blkdiag(1,[1 2; 3 4], 5)
ans=
1
0
0
0
0
1
3
0
0
2
4
0
0
0
0
5
Trasposici
on de matrices
II
LECCION
1
2
3
0
2
4
r
do
rra
Bo
De nuevo nos encontramos con esta propiedad sobre la que ya hemos incidido: Matlab
distingue entre vectores filas 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 exactamente 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 conjugacion, denotado habitualmente en matematicas con A . Por contra, . se limita a
intercambiar filas por columnas en la matriz:
>> clear i % i es ahora la unidad imaginaria
>> a=[i 1-2i; 1 0.3+4i];
>> a.
ans =
0 + 1.0000i
1.0000 - 2.0000i
1.0000
0.3000 + 4.0000i
>> a
ans =
0 - 1.0000i
1.0000 + 2.0000i
1.0000
0.3000 - 4.0000i
Dada una matriz a, si ejecutamos a(:), obtenemos el vector columna que se construye concatenando las columnas de a. Tecnicamente hablando, nos esta mostrando la
matriz tal como se guarda en memoria. Por ejemplo,
58
II
LECCION
r
do
rra
Bo
1
0
2
2
3
4
1
2
3
0
2
4
>> b=b(:);
hara de b un vector columna, sea cual sea su formato inicial. Si lo que se desea es
un vector fila, basta con trasponer
>> b=b(:); % b=b(:). mejor por si b es complejo
Se puede utilizar para introducir las entradas de una matriz por columnas. A modo
de ejemplo,
>> a=zeros(4,3);
>> a(:)=[1 2 3 4 5 6 7 8 9 10 11 12]
a =
59
II
LECCION
5
6
7
8
9
10
11
12
r
do
rra
Bo
>> a2=zeros(2,6);
>> a2(:)=a(:)
a2=
1
2
3
4
5
6
7
8
9
10
11
12
Nota. El comando reshape permite modificar las dimensiones de una matriz (o array
en general). Es mas flexible que el comando :.
4.1.2.
M
as operaciones sobre matrices
Hasta ahora las operaciones matriciales que han centrado nuestra atencion son las fundamentales: 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
Recuerda la predilecci
on de Matlab por las columnas.
60
II
LECCION
r
do
rra
Bo
6
15
>> sum(a)
ans =
>> sum(a,2)
ans =
6
15
-2
61
II
LECCION
>> max(a)
r
do
rra
Bo
ans =
>> max(a,[],2)
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
5
2
3
2
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
filas.
norm: norma de una matriz o vector. Se puede escoger entre varias normas.
62
II
LECCION
6.0000
3.0000
r
do
rra
Bo
5.4650
6.0000
7.0000
cond: Calcula norm(a)*norm(inv(a)), el condicionamiento de una matriz4 . El condicionamiento da una medida de la sensibilidad del sistema a perturbaciones en el
termino independiente.
rcond: estimador del inverso del condicionamiento de una matriz. Es sensiblemente mas
economico de calcular que cond.
Nota. Cuando el comando dot se aplica a dos vectores complejos, procede siempre a
conjugar el primer vector. Es decir, matematicamente
n
X
dot(u, v)
ui v i .
i=1
As,
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
63
II
LECCION
4.1.3.
Matrices sparse
r
do
rra
Bo
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
finitos, 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 elementos. Todas las entradas son inicialmente ceros, pero se guarda la estructura basica para
introducir los elementos no nulos
>> a=sparse(100,100)
a =
64
II
LECCION
(4,4)
(8,9)
(80,45)
(99,100)
1
-4
-1
4
r
do
rra
Bo
Para transformar una matriz llena (convencional) en una matriz sparse podemos utilizar
tambien este comando
>> a=diag([1 2 3 4 5]);
>> a=sparse(a)
a =
(1,1)
(2,2)
(3,3)
(4,4)
(5,5)
1
2
3
4
5
Con full realizamos la operacion inversa: transforma una matriz sparse en una matriz
llena,
>> a=full(a)
a =
1
0
0
0
0
0
2
0
0
0
0
0
3
0
0
0
0
0
4
0
0
0
0
0
5
65
II
LECCION
r
do
rra
Bo
triu
tril
diag
.*
dot
speye devuelve una matriz diagonal con unos, o similar (analoga a eye);
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 anteriores y comprueba con algun ejemplo como funcionan.
4.2.
Argumentos de funciones
nargin
varargout
nargout
II
LECCION
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% DESCOMPOSICIONLU
%
% [L,U]
= DESCOMPOSICIONLU(A)
%
Devuelve U triang superior, L permutacion de una
%
triang inferior con 1s en la diagonal tal que A=LU
%
% [L,U,X] = DESCOMPOSICIONLU(A,B)
%
Devuelve U triang superior, L permutacion de una
%
triang. inferior con 1s en la diagonal tal
%
que A=LU y la solucion del sistema AX=B
function varargout=DescomposicionLU(a,varargin)
[l,u]=lu(a);
% descomposicion LU
0.5000
1.0000
1.0000
0
u =
Las variables varargin y varargout son de un tipo especial denominado cell array. En la Leccion
IV estudiaremos su funcionamiento con m
as detalle.
67
II
LECCION
4
1
r
do
rra
Bo
l =
0.5000
1.0000
1.0000
0
u =
2
0
4
1
x =
1
0
Ejercicio 4.6 A partir de la funcion anterior implementa una funcion que opere segun 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
II
LECCION
%
%
Nota: Realizar la comparacion A==A para testar si la matriz es simetrica. Que devuelve esta
comparacion? Como se puede utilizar para comprobar si efectivamente la matriz es simetrica?
Y para ver que es definida positiva?.
r
do
rra
Bo
69
II
LECCION
r
do
rra
Bo
70
r
do
rra
Bo
Captulo 5
M
etodo 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, especialmente 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;
Ver Lecci
on IV
71
II
LECCION
Ly = b,
U x = y,
o en codigo de Matlab2
r
do
rra
Bo
[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 fill in), esto es, la insercion de nuevos elementos en el proceso. Por
ejemplo, tras un u
nico 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
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 refleja 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 reordenamiento adecuado de filas (ecuaciones) y columnas (incognitas). Dado que en aplicaciones practicas las matrices simetricas son muy comunes3 nos restringiremos en lo que
sigue a esta familia de matrices. Con el fin de preservar la simetra, cualquier intercambio
de filas debe ser seguido por el intercambio de columnas correspondientes:
x 0 0 x x
x x 0 0 x
0 x x 0 0
x x 0 0 0
3
0 x x 0 x 1
0 0 x x x
x 0 0 x 0
0 0 x x 0
x 0 x 0 x
x 0 x 0 x
En los comandos
symrcm
symmmd
Recuerda la colocaci
on de los par
antesis.
O al menos matrices con estructura simetrica, esto es, a(i, j) 6= 0 a(j, i) 6= 0. Todo lo que sigue es
igualmente valido para este tipo de matrices.
3
72
II
LECCION
r
do
rra
Bo
Figura 5.1: Resultado de reordenar las filas y columnas con symrcm y symmmd.
El segundo argumento, que solo esta disponible si la matriz a es sparse, fija un umbral
para la realizacion del pivotaje parcial. El valor 1 es el de defecto. De esta forma, valores
proximos a cero obligan a que el pivotaje se produzca solo cuando el desequilibrio entre
73
II
LECCION
r
do
rra
Bo
01
02
03
04
p=symmmd(a);
[l,u]=lu(a(p,p));
x=l\b(p); x=u\x;
x(p)=x;
%
%
%
%
donde L es triangular inferior con elementos sobre la diagonal estrictamente positivos. El sistema se reduce ahora a dos sistemas triangulares
L> x = y.
Ly = b,
La instruccion correspondiente en Matlab es chol, que devuelve R triangular superior de forma que
A = R> R
(es decir, en la notacion de estos apuntes, L = R> ). As, el algoritmo anterior, con
reordenacion adecuada, queda ahora
Soluci
on con reordenamiento...
01
02
03
04
p=symmmd(a);
r=chol(a(p,p));
x=r\b(p); x=r\x;
x(p)=x;
%
%
%
%
74
II
LECCION
2
1
0
x
x
0
0
x
0
0
x
0
0
x
0
0
x
3
x
0
0
0
0
x
x
x
x
x
0
x
x
0
0
x
x
0
x
0
0
x
0
0
x
x
0
0
0
0
x
x
0
0
0
3
0
x
x
x
x
x
x
x
x
x
5
0
x
x
x
x
3
0
x
x
0
0
5
0
x
x
x
x
x
0
0
0
0
x
x
0
0
0
3
0
x
x
0
0
5
x
x
x
x
x
0
x
x
x
x
x
0
0
0
0
x
x
0
0
0
x
x
x
x
0
r
do
rra
Bo
x
x
x
0
x
2
1
3
x
x
0
x
0
x
0
0
0
x
0
x
x
0
x
0
x
x
0
0
0
0
0
x
x
x
x
0
x
x
x
0
0
0
0
0
x
x
0
x
0
x
x
0
0
0
0
0
x
x
x
x
0
x
x
x
0
0
0
0
0
x
0
0
0
0
x
x
0
x
x
x
x
x
x
x
0
0
0
0
0
0
0
x
x
0
x
0
0
0
0
x
x
0
0
0
0
0
x
x
x
x
x
x
x
x
0
0
0
0
0
x
0
0
0
0
x
x
0
0
0
0
0
x
0
Figura 5.2: Eliminacion gaussiana y su representacion como un grafo. Efecto del reordenamiento.
Queda mas alla de los contenidos de este curso explicar como funcionan los algoritmos implementados en symrcm y symmmd. Se puede se
nalar no obstante que ambos
se basan en identificar 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)6=0. El proceso de eliminacion gaussiana se ve como la eliminaci
on sistematica de nodos y la creacion de
nuevos enlaces entre los nodos restantes. Concretamente, si hacemos un cero con la
fila i en la fila 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 graficos de la Figura 5.1 han sido creados a traves del siguiente fichero script.
x
x
x
x
x
II
LECCION
[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
r
do
rra
Bo
5.2.
M
etodos iterativos para sistemas lineales
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.
76
II
LECCION
Para obtener una solucion hace falta realizar todo el proceso: en pasos intermedios
no se dispone de ninguna aproximacion de la solucion.
Los metodos iterativos se introducen como un intento de salvar estas dificultades.
r
do
rra
Bo
5.2.1.
Definici
on
cuando m .
Los resultados teoricos sobre convergencia son a menudo pobres. Esto es, en general
existe convergencia en situaciones mucho mas generales de lo que la teora predice.
Ademas, chequear estas hipotesis puede resultar tan costoso como resolver el mismo
sistema.
El u
ltimo punto merece cierto comentario. Los sistemas lineales provienen en general
de problemas fsicos de los que se dispone de informacion a priori, entre las que se pueden
encontrar las hipotesis que aseguran la convergencia de un metodo iterativo. Por ejemplo,
se puede saber que una matriz es definida positiva, y no hay necesidad por tanto de hacer
esta comprobacion.
Por contra, los metodos iterativos tienen las siguientes e importantes ventajas:
Son metodos no destructivos. No modifican la matriz del sistema y, en general,
precisan solo multiplicar por la matriz del sistema o por partes de ella.
Suelen ser mas estables frente a los errores de redondeo5 .
Carl Friedrich Gauss, que introdujo un metodo precursor del metodo conocido actualmente como
metodo de GaussSeidel, comentaba en una carta a su colega Christian Ludwig que los calculos se
podan realizar a
un cuando se estuviese medio dormido o pensando en cosas mas importantes. No
hay que olvidar que en su epoca todos los calculos se hacan a mano. En nuestros das, se plantea el
mismo problema con los errores de redondeo.
77
II
LECCION
5.2.2.
r
do
rra
Bo
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 finaliza el metodo.
De nuevo nos encontramos con el problema de definir peque
no. Por ejemplo, una
diferencia de 1.4 entre dos iteraciones puede ser grande si la solucion tiene un tama
no
na si kxk 1010 .
kxk 101 o peque
Por ello se puede hacer un promedio entre el error absoluto y el relativo. Concretamente, si x e y son dos iteraciones consecutivas, se puede fijar el criterio
01
02
03
04
05
En la lnea 02 tenemos en cuenta tanto el error absoluto (eps1) como el error relativo
(eps2). Estos valores son parametros que fijan 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
02
03
04
05
aux=norm(b-a*x); % residuo
if (aux<eps1+eps2*norm(b))
disp(Convergencia alcanzada...
..........
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 infinito. Es decir, fijar un n
umero maximo de iteraciones de forma que
si se supera, se termine el metodo con un mensaje de error6 . Que un residuo sea peque
no
6
78
II
LECCION
5.2.3.
M
etodos iterativos cl
asicos
r
do
rra
Bo
Comenzaremos introduciendo algunas normas vectoriales que nos serviran para medir
el tama
no de los vectores y matrices. Dado un vector
x := (x1 , x2 , . . . , xn )> Rn
kxk :=
kxk2 :=
max |xi |.
i=1,...,n
Es facil ver que efectivamente las tres expresiones definen una norma en Rn . Las relaciones
entre ellas vienen dadas por las cotas
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 define a su vez una norma sobre las matrices
kAk = sup kAxk
kxk=1
j=1,...,n
n
X
|aij |,
kAk = max
i=1,...,n
i=1
79
n
X
j=1
|aij |.
II
LECCION
La norma k k2 tiene una expresion mas complicada que dificulta su calculo practico. En
concreto
p
kAk2 = (A> A)
r
do
rra
Bo
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
kAk2 = (A).
En cualquier caso, el comando norm de Matlab aplicado a matrices devuelve las correspondientes normas matriciales:
>> norm(a,1)
>> norm(a,inf)
>> norm(a,2)
% norma 1
% norma infinito
% norma 2. Vale tambien norm(a)
norma vectorial
kAk
|{z}
norma matricial
kxk
|{z}
norma vectorial
Es decir, kAk mide el maximo alargamiento que multiplicar por A puede producir en un
vector medido en la norma k k.
Definici
on y condiciones de convergencia
Los metodos iterativos lineales (o basados en iteraciones afines) comienzan considerando una particion de A tal que
A=M N
M x = N x + b.
M xm+1 = N xm + b.
(5.1)
Teorema 5.1 El metodo iterativo converge si y solo si existe k tal que kB k k < 1.
80
II
LECCION
r
do
rra
Bo
k N.
Esta propiedad se pierde cuando se resuelven ecuaciones y sistemas no lineales. En este caso, los
metodos numericos convergen s
olo si se arranca suficientemente cerca de la solucion.
8
Si es valor propio de B, 2 lo es de A2 .
81
II
LECCION
. . . a1n
. . . a2n
..
..
. .
. . . ann
r
do
rra
Bo
A=
a11 a12
a21 a22
..
..
.
.
an1 an2
donde
a11
D =
a22
..
, L =
ann
0
a21
..
.
0
0
..
.
..
.
0
0
..
.
, U =
an1 an2 0
0 a12
0
0
..
..
.
.
0
0
a1n
a2n
..
..
.
.
El m
etodo de Jacobi consiste en tomar en la definicion del metodo iterativo M = D
y N = L + U , es decir,
Dxm+1 = (L + U )xm + b.
Para calcular xm+1 hay que resolver por tanto un sistema diagonal cuyo coste es despreciable. Visto componente a componente, tenemos que si
h
i>
(m)
(m)
xm = x1 , x2 , . . . , x(m)
Rn
n
entonces
(m+1)
xi
i
X
1h
(m)
aij xj ,
bi
aii
j6=i
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 filas si
X
|aii | >
|aij |,
i
j6=i
y por columnas si
|ajj | >
|aij |,
j.
i6=j
Teorema 5.3 Si la matriz es estrictamente diagonal dominante por filas o columnas el metodo de Jacobi converge.
82
II
LECCION
mmax =
eps2 =
n
umero maximo de iteraciones,
tolerancia relativa,
r
do
rra
Bo
y tomamos como criterio de parada la norma eucldea de la diferencia entre dos iteraciones
sucesivas del metodo. La eleccion de la norma es libre, queda a eleccion del programador
(podamos tomar por ejemplo la norma 2 o la norma infinito).
Una primera version de nuestro algoritmo es la siguiente
Jacobi
01
02
03
04
for m=1:mmax
error=0; y=x
for i=1:n
n
X
x i = bi
aij yj /aii
j=1
j6=i
05
06
07
08
09
10
11
end
if kx yk2 <eps1+eps2*norm(x)
return
end
end
disp(numero m
aximo de iteraciones alcanzado)
return
Soluci
on. Empezaremos fijando 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
02
03
04
05
06
07
08
09
10
11
12
% JACOBI
%
% X
=
%
%
%[X,IT]=
%
%
%[X,IT]=
%
%[X,IT]=
%
JACOBI(A,B)
JACOBI(A,B)
devuelve en IT el numero de
iteraciones calculadas
JACOBI(A,B,ITMAX)
II
LECCION
r
do
rra
Bo
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
for m=1:mmax
error=0;
y=x;
for i=1:n
v=[1:i-1 i+1:n];
x(i)=(b(i)-a(i,v)*y(v))/a(i,i);
end
error=norm(x-y); % otras normas con norm(x-y,1),norm(x-y,inf)
if (error<eps1+eps2*norm(x))
break
end
end
if (m==mmax)
disp(numero maximo de iteraciones sobrepasado)
end
%salida
if (nargout>1)
varargout{1}=m;
84
II
LECCION
59
60
end
return
r
do
rra
Bo
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 u
nica
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 metodo9 ?
El m
etodo de GaussSeidel10 consiste en tomar M = D L y N = U , es decir
(D L)xm+1 = U xm + b.
(5.2)
Para calcular xm+1 hay que resolver un sistema, en este caso triangular. Repasando con
cuidado las operaciones, observamos que
(m+1)
xi
i1
n
i
X
X
1h
(m+1)
(m)
=
bi
aij xj
aij xj ,
aii
j=1
j=i+1
i = 1, . . . , n.
Deberas probar con matrices grandes. La orden rand te puede servir para ese fin. 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
n
o exactamente este metodo y Philipp Ludwig von Seidel, que lo
estudio a finales 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
II
LECCION
r
do
rra
Bo
01
02
03
04
j=1
05
06
07
08
09
10
11
j=i+1
end
if kx yk<eps1+eps2*norm(x)
return
end
end
disp(numero m
aximo de iteraciones alcanzado)
return
As pues, la u
nica diferencia con el metodo de Jacobi es que GaussSeidel procede a
utilizar la nueva componente calculada xi 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 afirmacion.
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
Ejercicio 5.5 Programa el metodo de GaussSeidel modificando de forma apropiada la funcion 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)
86
II
LECCION
l=tril(a,0);
u=triu(a,1);
r
do
rra
Bo
Ejercicio 5.7 El metodo de GaussSeidel tiene una curiosa asimetra: la primera componente
de cada xm+1 se calcula utilizando los valores de la anterior iteracion xm , mientras que la ultima
componente utiliza todas las componentes de la nueva iteracion xm+1 . Se puede plantear el
metodo de GaussSeidel inverso que es el que resulta de intercambiar los papeles de L y U en
(5.2). Ahora la situacion es justamente la recproca. Mejora la velocidad de convergencia del
metodo?
El u
ltimo representante de esta familia de metodos clasicos que estudiaremos es el
m
etodo de relajaci
on de Young. Introducido y estudiado independientemente por
David M. Young (en su tesis doctoral) y Stanley P. Frankel sobre 1950, es una simple
modificacion del metodo de GaussSeidel que trataba, como buena parte de los metodos
propuestos en estos a
nos, de acelerar la convergencia de los metodos de GaussSeidel y
Jacobi.
La modificacion propuesta consiste en realizar un promedio sobre la aproximacion que
proporcionara GaussSeidel y la iteracion anterior.
Concretamente, la expresion es
(m+1)
xi
= (1
(m)
)xi
i1
n
i
X
X
h
(m+1)
(m)
bi
aij xj
aij xj ,
+
aii
j=1
j=i+1
i = 1, . . . , n.
II
LECCION
Por u
ltimo, 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
r
do
rra
Bo
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)
5.2.4.
M
etodos de tipo gradiente
, R, x, y, z Rn ;
En particular, si In es la identidad n n,
x> In y = x> y
x> y = 0
y diremos en este caso que x e y son ortogonales. La misma notacion se puede extender
al producto definido por A, de forma que
x A y
x> Ay = 0
Es interesante observar cu
antas propiedades del producto escalar eucldeo (el habitual en Rn ) dependen u
nicamente de que se cumplan estas tres propiedades y por tanto son extensibles a estos casos mas
generales.
88
II
LECCION
r
do
rra
Bo
Todas las normas son equivalentes en Rn , pero para esta norma se tiene ademas la estimacion
n kxk2 kxkA 1 kxk2
donde 1 2 .... n > 0 son los valores propios, todos reales por ser A simetrica y
positivos por ser definida positiva. La cantidad
(A) =
1
,
n
Por tanto, el u
nico 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 definida 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
12
El condicionamiento se define tambien para matrices arbitrarias reemplazando los valores propios por
los denominados valores singulares, o m
as en general, definiendolo 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
II
LECCION
r
do
rra
Bo
F (xm+1 ) = mn F (xm + dm )
R
>
g 0 () = d>
m Adm dm (b Axm )
| {z }
rm
r>
m dm
,
>
dm Adm
(5.3)
05
06
07
x0 inicial, r0 = b0 Ax0
for m=0:mmax
Escoger dm
r > dm
m := >m
dm Adm
xm+1 = xm + m dm
rm+1 = rm m Adm
end
II
LECCION
M
etodo del Gradiente
Dado que F (xm ) = b Axm = rm , la direccion de maximo descenso es la del
residuo. Por tanto, esta parece una buena eleccion para dm . El metodo as definido es el
metodo del gradiente.
r
do
rra
Bo
M
etodo del Gradiente
01
02
03
x0 inicial; r0 = b Ax0 ;
for m=0:mmax
pm = Arm
r>
m rm
>
r m pm
xm+1 = xm + m rm
rm+1 = rm m pm
if krm+1 k epskbk
break
end
m =
04
05
06
07
08
09
10
end
Soluci
on. Una posible implementacion del metodo es la que sigue
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
% GRADIENTE
%
% X
= GRADIENTE(A,B)
%
%
% X
= GRADIENTE(A,B,ITMAX)
%
% X
= GRADIENTE(A,B,ITMAX...
%
EPS)
%
% X
= GRADIENTE(A,B,ITMAX...
%
EPS, X0)
%
%[X,IT] = GRADIENTE(A,B,ITMAX...
%
EPS,XO)
91
X0 es el valor inicial
Devuelve en IT el numero de
iteraciones calculadas
II
LECCION
%[X,IT,R]= GRADIENTE(A,B,ITMAX)
%
EPS,XO)
r
do
rra
Bo
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
if (m==mmax)
disp(numero maximo de iteraciones sobrepasado)
end
if nargout>1
varargout{1}=m;
end
if nargout>2
varargout{2}=sqrt(res(:));
end
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 definida positiva (nota:
para toda matriz B, B > B es simetrica (semi) definida positiva.)
92
II
LECCION
r
do
rra
Bo
>>
>>
>>
>>
Hemos utilizado una escala logartmica para medir la norma del residuo. Observa su fuerte
comportamiento oscilatorio.
10
10
10
10
10
10
10
Residuo
10
20
30
40
50
60
70
Iteraciones
Ejercicio 5.12 En este ejercicio tratamos de nuevo aspectos de la implementacion en Matlab. Concretamente, que pasa si el usuario desea especificar el vector de arranque (x0 en
la notacion del metodo) pero desea dejar el numero maximo de iteraciones y la tolerancia
por defecto?. Como estandar en Matlab, se enva vaco ([ ]), de forma que los argumentos
intermedios se ignoran. Por ejemplo,
>> x=gradiente(a,b,[],1e-5)
especificara la tolerancia pero no el numero maximo de iteraciones. Implementa las modificaciones necesarias en el programa anterior para que la funcion soporte este estandar.
(Ayuda: La funcion isempty puede resultarte u
til.)
II
LECCION
r
do
rra
Bo
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
un es mas, de la eleccion hecha de m se sigue que
comprobar en la Figura 5.3. A
F (xm+1 ) := mn F (xm + rm )
R
y por tanto
Observa que hemos utilizado la cota kM xkA kM kA kxkA , caracterstica de toda norma
vectorial y su norma matricial inducida.
Proposici
on 5.5 Sean 1 y n el mayor y menor valor propio de A. Entonces
mn kI AkA = mn kI Ak2 =
R
1 n
< 1.
1 + n
(A) 1
kem kA .
(A) + 1
El factor de reduccion del error es siempre menor que uno, luego hay convergencia
para toda A simetrica definida positiva.
Si (A) >> 1, la convergencia puede ser muy lenta.
kBxk=1
y completa la demostracion).
94
II
LECCION
r
do
rra
Bo
kI AkA = kI Ak2 = max |1 j |.
j
1 n
.
1 + n
(Ayuda: al dibujar gc () para diferentes valores de c obtendras obtendras algo similar a esto
0.5
0
0
El Gradiente Conjugado
El metodo del Gradiente Conjugado trata de resolver alguna de las dificultades observadas 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 dm = rm dm m dm Adm = 0,
por lo que rm+1 dm . Esto es, en un metodo de descenso el residuo del paso m + 1 es
ortogonal a la direcci
on de descenso anterior.
Sin embargo, en general ya no es cierto que
rm+1 dm1
y por tanto se pierde esta propiedad de ortogonalidad.
95
(5.4)
II
LECCION
Una forma de evitar, o de mitigar, el aspecto oscilante del metodo del Gradiente, es
exigir que la direccion de descenso dm satisfaga (5.4). Es decir, tomamos
rm+1 = rm m Adm ,
r
do
rra
Bo
y concluimos que
d>
m1 rm+1 = 0
dm1 Adm
dm1 A dm .
En vista de lo anterior optamos por tomar como direccion de descenso una perturbacion
de la direccion natural rm (el residuo) en la direccion del descenso anterior (dm1 ) que
satisfaga la propiedad de ortogonalidad anterior. Es decir, tomamos
dm = rm + m dm1
>
r>
m Adm1 + m dm1 Adm1 = 0
m =
r>
m Adm1
.
>
dm1 Adm1
x0 inicial; r0 = b Ax0 ; d0 = r0 ;
for m=0:mmax
pm = Adm
r>
m dm
d>
m pm
04
m =
05
06
07
08
09
xm+1 = xm + m dm
rm+1 = rm m pm
if krm+1 k epskbk
break
end
r > pm
m+1 = m+1
d>
m pm
dm+1 = rm+1 + m+1 dm
10
11
12
13
end
disp(Numero maximo de iteraciones alcanzado)
Como puede verse, las modificaciones 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
II
LECCION
coincide con las del metodo del Gradiente: en cada paso es necesario calcular un producto
matrizvector (lnea 03) y tres productos escalares (04 y 10).
Listaremos a continuacion algunas propiedades entre los residuos y las direcciones de
descenso que permiten dar una expresion distinta del metodo, y deducir alguna de las
propiedades de convergencia.
r
do
rra
Bo
Lema 5.6 Para todo m 0
>
r>
m dm = r m r m .
Por tanto
m =
r>
m rm
.
d>
m Adm
>
>
r>
m dm = rm rm + m rm dm1 .
| {z }
(5.5)
=0
ii) rm+1 dm ,
rm+1 dm1 .
iii) rm+1 rm .
Demostracion. Los puntos i) y ii) ya se han probado. Para probar iii) basta comprobar
que
>
>
>
>
>
r>
m+1 rm = rm rm m dm Arm = rm rm m dm Adm + m m dm Adm1
| {z }
=0
r>
m rm
m d>
m Adm .
m+1
rm+1
r>
:= m+1
.
>
rm rm
Demostracion. Como
Adm =
1
(rm+1 rm ),
m
se tiene
m+1 =
r>
r>
1 r>
1 r>
m+1 Adm
m+1 (rm+1 rm )
m+1 rm+1
m+1 rm+1
=
=
=
>
>
>
dm Adm
m
dm Adm
m dm Adm
r>
m rm
II
LECCION
Ejercicio 5.15 Modifica 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 Gradiente Conjugado, es que estas propiedades de ortogonalidad se extienden a todo el conjunto
de residuos y direcciones generados en los pasos anteriores.
r
do
rra
Bo
Lema 5.9 Para todo m n
i) dm A d` ,
` m 1;
ii) rm+1 d` ,
` m;
iii) rm+1 r` ,
` m.
y hemos desplegado en la Figura 5.4 las normas de los residuos en cada paso. Como se
10
10
10
10
10
10
10
Residuo
Iteraciones
10
12
14
Figura 5.4: Historial del residuo para el metodo del Gradiente Conjugado
II
LECCION
An
alisis del m
etodo
r
do
rra
Bo
i R.
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 r0 = d0 y por tanto ii) y iii) coinciden).
Supongamos pues que el resultado esta probado para m. Concretamente, supongamos que
para m
i) dm A d` ,
ii) rm+1 d` ,
` m.
iii) rm+1 r` ,
i) dm+1 A d` ,
` m:
99
II
LECCION
r
do
rra
Bo
rm+1 A r` ,
rm+1 Ar` .
Como Ar` K`+1 (A, r0 ) y una base de este subespacio es {r0 , r1 , . . . , r`+1 } ,
concluimos que
Ar` = 0 r0 + 1 r1 + . . . + `+1 r`+1
ii) rm+2 d` ,
` m + 1
Por induccion, rm+1 d` , mientras que para el otro termino observamos que
(Adm+1 ) d`
dm+1 A d` ,
iii) rm+2 r` ,
` m + 1.
Tomemos ` m. Entonces
rm+2 r`
(5.6)
El resultado se sigue de la propiedad i) ya que dm+1 A dk para k m. Finalmente, si rm+1 6= 0 entonces {r0 , . . . , rm+1 } es una base de Km+1 (A, r0 ) por ser
ortogonales.
100
II
LECCION
r
do
rra
Bo
Ahora bien esto sucede si y solo si ha habido convergencia en el paso m (si dm+1 = 0 y
por tanto rm = 0) o en el paso m + 1 (si rm+1 = 0). Esto es, si la direccion de descenso es
la nula simplemente es porque ya hemos alcanzado la solucion, y viceversa, si el residuo
es nulo, la direccion de descenso para la siguiente iteracion es la nula.
Notas finales
101
II
LECCION
r
do
rra
Bo
Ax = b,
1
>
1
L
| AL
{z } y = L
| {z b},
c
B
x = L> y
y aplicar el metodo al sistema By = c. Para su implementacion basta con conocer simplemente la matriz producto M = LL> que recibe el nombre de precondicionador de A. En
general, la matriz L1 AL> no se construye, porque el producto por el precondicionador
hace que se pierdan algunas de las buenas propiedades de la matriz original. Ahora bien,
y he aqu la ventaja del metodo, s
olo necesitamos calcular productos por M 1 , que
se reducen sistemas lineales con M como matriz de coeficientes. Obviamente, y de forma
similar a como procedamos con la descomposicion de Cholesky, esto equivale resolver dos
sistemas lineales con L y L> . La buena noticia es que es posible construir matrices para
las que estos sistemas son faciles de resolver. Por ejemplo, L puede ser sparse y triangular.
El metodo del Gradiente Conjugado rara vez se programa sin precondicionar. De
hecho, el comando de Matlab con el Gradiente Conjugado implementado es pcg de
preconditioned conjugate gradient.
En u
ltima medida, el exito del Gradiente Conjugado origino el nacimiento de una
familia entera de metodos, los conocidos como m
etodos de Krylov, que trataban de
extender las buenas propiedades del metodo a matrices mas generales. Por ejemplo, BiCG,
BiCGSTAB, CGS, QMR, GMRES, MINRES, etc. Algunos de estos metodos requieren
que la matriz sea simetrica y otros son validos para matrices arbitrarias.
Un precondicionador universal, es valido en muchos casos, es la descomposicion de
Cholesky incompleta. Va mas alla de los contenidos de este curso describir detalladamente
en que consiste pero podemos dar una idea. Se trata de, grosso modo, aplicar el metodo
de Cholesky pero restringiendo la creacion de nuevas entradas. El resultado es una matriz
L tal que LL> A en alg
un sentido. Por tanto, L1 AL> In 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 definida positiva proveniente de resolver la ecuacion
de Poisson (una ecuacion en derivadas parciales) por el metodo de elementos finitos en un
16
102
II
LECCION
10
sin precondicionar
precondicionado
1
10
r
do
rra
Bo
2
10
10
10
Residuo
10
10
10
10
50
100
150
200
250
Iteraciones
dominio en forma de L. La matriz tiene aproximadamente 2100 filas con 14500 elementos no
nulos18 .
Con el comando spy se puede ver la forma de a, su tamano y el numero de entradas
no nulas. Aplica el comando pcg que contiene implementado el Gradiente Conjugado. Por
ejemplo, con
>>[x,flag, relres,iter,resvec] = pcg(a,b,1e-7,100);
aplicas el metodo con una tolerancia relativa de 107 y un numero maximo de 100 iteraciones.
En relres se recoge el residuo relativo de la solucion calculada (kb Axk/kbk), en resvec
un historial del residuo en cada paso y en flag una variable que informa sobre que ha sucedido
en la aplicacion del metodo. As flag==1 indica que se ha alcanzado el numero maximo de
iteraciones sin convergencia, mientras que si flag==0 entonces ha habido convergencia. Para
ver el historial de la convergencia del metodo se puede ejecutar
>> semilogy(resvec);
De nuevo, con los comandos habituales puedes ver tanto la forma como el numero de entradas
no nulas de R.
Modificando las instrucciones anteriores con
18
103
II
LECCION
r
do
rra
Bo
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
r
do
rra
Bo
Leccion III
105
r
do
rra
Bo
r
do
rra
Bo
Introducci
on
107
r
do
rra
Bo
108
r
do
rra
Bo
Captulo 6
Funciones inline
0.1231
A efectos practicos, inline es equivalente a editar una funcion con nombre f y a escribir
el correspondiente codigo. La definicion queda en memoria pero una vez cerrada la sesion
Los u
ltimos argumentos del comando inline definen las variables de la funcion. Si no se
especifican, 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 sesi
on 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
III
LECCION
r
do
rra
Bo
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 especificar el orden de las variables en la definicion 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)
9.8696
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
III
LECCION
g =
Inline function:
g(x,y,z) = x.^2.*cos(y)-y.*cos(x).*z
r
do
rra
Bo
6.2.
Es frecuente que en programacion mas avanzada se requiera que las funciones trabajen
sobre funciones. Por ejemplo, podemos plantearnos implementar una funcion que realice
la siguiente tarea
dada una funcion de una variable y dos valores dibujar la funcion entre
esos valores
% MIPLOT
%
% MIPLOT(F,A,B)
% MIPLOT(F,A,B,N)
%
function miplot(f,a,b,varargin)
if nargin<3
disp(argumentos insuficientes)
end
if nargin>3
n=varargin{1};
else
n=200;
end
III
LECCION
r
do
rra
Bo
>> 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 suficiente de puntos esto basta
para obtener una buena grafica. Este comando es una de las salidas graficas mas simples de
Matlab y admite una amplia variedad de argumentos opcionales que controlan el aspecto
final del dibujo. En una leccion posterior (Leccion V) veremos este comando y otros
relacionados con las salidas graficas.
Ejercicio 6.1 Modificar 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 grafica (lnea continua, lnea a trozos,
raya-punto, solo puntos,...), el color,...
6.2.1.
Recursividad
Matlab recomienda esta forma. El operador @ accede al handle de la funcion que es la referencia que
tiene Matlab de la funci
on. Para mayor informacion, ver helpwin function handle.
112
III
LECCION
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
% FACT
%
% FACT(N) devuelve n!
%
r
do
rra
Bo
function f=fact(n)
if (n<0)
disp(error. Argumento inapropiado);
f=[];
% devolvemos el vacio
elseif (n==0)
f=1;
else
f=fact(n-1)*n; % llamada a fact con n-1
end
return
113
III
LECCION
r
do
rra
Bo
114
r
do
rra
Bo
Captulo 7
F
ormulas de cuadratura.
Transformada r
apida de Fourier
7.1.
F
ormulas de cuadratura
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 figuras curvas. Quizas este sea el origen de la denominacion de f
ormula de cuadratura
a cualquier expresion que aproxime una integral definida.
La propia definicion de integral1 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 u
ltima 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 dificultades 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
115
III
LECCION
conoce como reglas del rectangulo. Queda por elegir el punto que al evaluar define 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.
r
do
rra
Bo
0.6
0.5
0.4
0.3
0.2
0.1
-0.1
-0.2
0
0.5
1.5
0.6
0.6
particin
Regla del punto medio
0.5
0.4
0.3
0.3
0.2
0.2
0.1
0.1
-0.1
-0.1
0.5
1.5
Particion
Regla del trapecio
0.5
0.4
-0.2
0
2.5
-0.2
0
2.5
0.5
1.5
2.5
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 =
ba
, xj = a + hj, xj+1/2 = a + h(j + 1/2)
n
n1
X
f (xj )
(Punto inferior),
f (xj ),
(Punto superior)
f (xj+1/2 ),
(Punto medio)
j=0
Q2 (f, h) := h
n
X
j=1
Qpm (f, h) := h
n1
X
j=0
Es difcil escapar a la sensacion de que la regla del punto medio goza de mejores
116
III
LECCION
r
do
rra
Bo
propiedades que las que definen el resto de elecciones3 . Esta impresion es correcta, como
veremos mas adelante.
Un analisis algo mas profundo nos descubre la regla del trapecio como una mejor
manera de aproximar la integral (ver de nuevo la Figura 7.1). En este caso la integral se
aproxima como suma del area de trapecios, como su propio nombre indica. Es un simple
ejercicio comprobar que la regla obedece a la siguiente formula
n1
i
h1
X
1
f (xj ) + f (xn ) ,
Qtr (f, h) := h f (x0 ) +
2
2
j=1
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 [xi , xi+1 ] para luego construir con ellas, simplemente
sumandolas, una formula en todo el intervalo [a, b]. Es por ello que a las reglas del rectangulo 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.
Soluci
on. Observemos primero que necesitamos cuatro argumentos de entrada:
Funcion a integrar f.
Una vez ledos estos datos podemos calcular h, la distancia entre dos puntos consecutivos, 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
02
03
04
05
06
07
08
09
10
%
%
%
%
%
%
PUNTOMEDIO
function s=puntomedio(f,a,b,n)
h=(b-a)/n;
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
III
LECCION
r
do
rra
Bo
Ejercicio 7.2 Implementa en Matlab la regla del trapecio.
Ejercicio 7.3 Tomando un numero de puntos suficientemente alto y siempre que la funcion
sea regular (sea derivable un numero suficiente de veces) puedes tomar ese valor como el
resultado exacto de la integral. Con un ejemplo arbitrario compara los resultados de la regla
del punto medio y la regla del trapecio.
Nota. Existe una cuestion, algo tonta, sobre el parametro n. Lo habitual es tomar n de
forma que h = (b a)/n sea la distancia entre los puntos que se eval
uan para construir
la regla de cuadratura. Esta eleccion hace que en la regla del punto medio la funcion se
eval
ue en n puntos mientras que en la regla del trapecio, se haga en n + 1 puntos. En
cualquier caso, y adelantandonos a lo que sigue, el parametro relevante es precisamente
h.
7.1.2.
Reglas simples
Tanto la regla del punto medio como la del trapecio se basan en interpolar la funcion
por un polinomio de grado 0 (constante) y grado 1 (una recta) sobre cada subintervalo
e integrar dicho polinomio. Esto es, si c es el punto medio de (a, b), la regla del punto
medio consiste en reemplazar la funcion por la constante, polinomio de grado 0, que pasa
por (c, f (c)) y aproximar la integral de f por la de dicha constante:
Z b
Z b
f (c)ds = f (c)(b a).
f (s)ds
a
Analogamente, la regla del trapecio se basa en aproximar la funcion por una recta p1 (s),
polinomio de grado 1, que pase por (a, f (a)) y (b, f (b)) y luego dar como resultado aproximado de la integral la de p1 (s):
Z b
Z bh
i
sa
ba
bs
f (a) +
f (b) ds =
[f (a) + f (b)] .
f (s)ds
b
a
2
a |b a
a
{z
}
p1 (s)
El estudio del error de las formulas anteriores queda as reducido a las propiedades de
aproximacion de los polinomios de grado 0 y 1 correspondientes.
Proposici
on 7.1 Existen 1 , 2 [a, b] tales que
Z b
1 00
f (s) ds (b a)f (c) =
f (1 )(b a)3 ,
24
a
Z b
ba
1
f (s) ds
f (a) + f (b) = f 00 (2 )(b a)3 .
2
12
a
118
III
LECCION
r
do
rra
Bo
Obviamente, nada se dice sobre cuales son los puntos 1 , 2 , puesto que conocer esos
puntos en cada caso sera equivalente a conocer la integral para cualquier funcion arbitraria. Es remarcable que ambas formulas son exactas para polinomios de grado 1 (porque
en tal caso f 00 = 0) y que el error que se puede esperar de la formula del punto medio es
la mitad que el de la formula del trapecio y ademas con signo opuesto4 .
Siguiendo con estas ideas, podemos avanzar un paso mas trabajando con polinomios
de grado dos. Denotando por Pn (x) los polinomios de grado n, procedemos como sigue
Construir p P2 (x) tal que (c = (a + b)/2)
p2 (a) = f (a),
p2 (c) = f (c),
p2 (b) = f (b).
f (s) ds
p2 (s) ds.
b a
f (s) ds
f (a) + 4f (c) + f (b) .
6
(7.1)
Esta regla de cuadratura recibe el nombre de regla de Simpson y es una de las mas
utilizadas en la practica. A primera vista se puede esperar que de el valor exacto de la
integral para polinomios de grado de 2, puesto que as se ha impuesto en la definicion.
Sin embargo tiene un grado de precision adicional fruto de la disposicion simetrica de los
puntos de evaluacion (es decir, del hecho de que c sea el punto medio de [a, b]), lo que lleva
a que la formula sea exacta para polinomios de grado 3. Esto es, la regla de Simpson
tiene precisi
on 3:
4
Salvando el hecho de que en principio 1 6= 2 . Un analisis mas elaborado permite probar que esta
conclusion es esencialmente cierta.
119
III
LECCION
Proposici
on 7.2 Existe 3 [a, b] tal que
Z b
1 (4)
b a
f (a) + 4f (c) + f (b) =
f (3 )(b a)5 .
f (s) ds
6
2880
a
En general, tenemos la siguiente estrategia para construir reglas de mayor precision:
r
do
rra
Bo
Tomar n N, h = (b a)/n, xj = a + jh con j = 0, . . . , n (n + 1 puntos).
Construir un polinomio pn Pn (x) tal que
pj (xj ) = f (xj ).
Aproximar
f (s) ds
pn (s) ds.
j = 0, . . . , n,
h=
ba
.
n
Ejercicio 7.5 Otra forma equivalente de definir 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
xj = a + jh,
definir
j = 0, 1, 2,
con h =
ba
,
2
y exigir que la formula sea exacta para f = 1, s, s2 . 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
III
LECCION
Ejercicio 7.6 Siguiendo las ideas del ejercicio anterior, podemos deducir las formulas con
mas puntos. Para facilitar el estudio realizamos el cambio de variables
Z
Z b
ba n
f (s) ds =
f (a + ht) dt
n
a
0
r
do
rra
Bo
Se introduce a continuacion la regla de cuadratura en [0, n]
Z n
g(t) dt n 0 g(0) + 1 g(1) + . . . + n g(n) .
0
Los pesos se determinan sin mas que exigir que sea exacta para polinomios6 , de grado n en t.
Llegamos por tanto a las condiciones
Z n
g(t) dt = n(0 g(0) + 1 g(1) + . . . + n g(n)),
g {1, t, . . . , tn }.
0
1
0
1 1 1 1
0 1 2 n
n/2
1
2
0 1 4 n2
n
/3
2 =
.
.
. . . . . . . . . . . . . . . . . ..
..
n
n
0 1 2 n
n
nn /(n + 1)
Implementa una funcion que reciba como argumento n y devuelva los pesos de la formula de
Newton-Cotes cerrada de n + 1 puntos7 .
Soluci
on. 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
02
03
04
05
06
07
08
09
10
11
12
%
%
%
%
%
%
%
%
%
%
%
PESOSNEWTONCOTES
V=PESONEWTONCOTES(N)
(b-a)*(w(1)*f(x(1))+w(2)*f(x(2))+...+w(n+1)*f(x(n+1)))
donde x(i)=a+(i-1)*(b-a)/n i=1,...,n+1,
121
III
LECCION
function w=pesosnewtoncotes(n)
r
do
rra
Bo
r=0:n;
c=1; m=ones(1,n+1);
for i=1:n
m=[m; r.^i];
% construimos matriz del sistema
c=[c; n^(i)/(i+1)]; % construimos el termino independiente
end
w=m\c;
return
1
2
3
4
5
6
1/2 1/6 1/8 7/90 19/288 41/840
1/2 2/3 3/8 16/45 25/96
9/35
1/6 3/8 2/15 25/144 9/28
1/8 16/45 25/144 34/105
7/90 25/96
9/28
19/288 9/35
41/84
7
8
9
10
322/7409 248/7109 177/5551
94/3503
337/1628 578/2783 458/2607 2431/13693
49/64
111/3391 27/224
410/5059
585/3382
97/262
451/2089 722/1587
585/3382 454/2835 282/4373 406/933
49/64
97/262
282/4373 783/1097
337/1628 111/3391 451/2089 406/933
429/9871 578/2783
27/224
722/1587
248/7109 458/2607 351/4331
177/5551 2284/12865
94/3503
7.1.3.
Se puede atenuar este mal condicionamiento utilizando la descomposicion QR (ver Leccion IV) para
resolver el sistema lineal
122
III
LECCION
r
do
rra
Bo
una gran inestabilidad numerica. Este hecho esta ntimamente con la inestabilidad de la
interpolacion numerica en estos nodos, tema al que volveremos mas adelante (Leccion V).
Una alternativa que proporciona mejores resultados, y que es muy sencilla de implementar, es volver a las formulas de cuadratura compuestas, dividiendo el intervalo original
en varios subintervalos y aplicar en cada uno de ellos una formula de cuadratura simple.
Por ejemplo la regla del trapecio es la formula de cuadratura compuesta obtenida al dividir
el intervalo de integracion en n subintervalos y aplicar en cada uno de ellos la formula de
Newton-Cotes cerrada de dos puntos:
Z b
ba
(f (a) + f (b)).
f (s) ds
2
a
n
n1
h1
i
4X
2X
1
Qsp (f, h) := h f (x0 ) +
f (x2j1 ) +
f (x2j ) + f (x2n ) .
3
3 j=1
3 j=1
3
(7.2)
La siguiente proposicion informa sobre el comportamiento de las tres formulas compuestas hasta ahora
Proposici
on 7.3 Existen 1 , 2 , 3 [a, b] tales
Z b
Qpm (f, h)
f (s) ds =
a
Z b
Qtr (f, h)
f (s) ds =
a
Z b
Qsp (f, h)
f (s) ds =
a
que
h2 00
f (1 )(b a),
24
h2
f 00 (2 )(b a),
12
h4 (4)
f (3 )(b a).
180
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
III
LECCION
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.
r
do
rra
Bo
La integral exacta se puede calcular tomando un numero muy elevado de puntos (por ejemplo 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 numero de puntos. Deberas observar que
para funciones suaves el error se divide por 4 o por 16, segun la regla que se aplique.
Testa los programas con los siguientes ejemplos
i) f1 (x) = x cos(x) en [0, ]
Un fichero script te puede venir bien para este ejercicio. Que observas con las reglas del
trapecio y del punto medio en el ultimo caso?.
124
III
LECCION
7.1.4.
Reglas gaussianas
r
do
rra
Bo
En el estudio de las formulas de Newton-Cotes vimos que los pesos estaban escogidos
de manera que la formula tuviese grado maximo de precision aunque la eleccion de los
nodos, es decir, de los puntos en los que se eval
ua la funcion, estaba fijada a priori.
Podemos plantearnos ahora hacer de la posicion de los nodos una variable mas del
problema. Para ello, y con objeto de simplificar el analisis, nos situamos en el intervalo
[1, 1] y buscamos la formula de mayor precision de dos puntos:
1 , 2 , 1 , 2 R
p(s) ds,
1 p(1 ) + 2 p(2 ) =
p {1, s, s2 , s3 }
1
+ 2 = 2,
1 1 + 2 2 = 0,
1 12 + 2 22 = 23 ,
1 13 + 2 23 = 0.
1 = 2 = 1,
3
3
1 =
, 2 =
.
3
3
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, infinitas
soluciones o ninguna soluci
on...
11
Este resultado le result
o ya muy chocante a Carl Friedrich Gauss, que fue el primero en notar que
una distribuci
on nada l
ogica de los nodos defina una formula de cuadratura de mayor grado de precision.
125
III
LECCION
r
do
rra
Bo
La teora va mas alla puesto que es constructiva: da una forma de calcular la formula
(nodos y pesos) mucho mas eficiente. 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 cientficos. Los pesos i se pueden calcular a continuacion
resolviendo un simple sistema lineal. En la Tabla 7.1 se pueden ver los coeficientes de
las primeras reglas gaussianas. Observa que la disposicion simetrica de los nodos en el
intervalo [1, 1] y de los pesos asociados.
n
n=1
n=2
3/3
3/3
1
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.538469310
0.0
0.538469310
0.906179846
0.236926885
0.478628670
0.568888889
0.478628670
0.236926885
Ejercicio 7.11 (Reglas gaussianas en un intervalo arbitrario) Las formulas gaussianas se dan en el intervalo de referencia [1, 1] por comodidad. Como se aplicaran en un
intervalo [a, b]?.
7.1.5.
Extrapolaci
on de Richardson
126
III
LECCION
Proposici
on 7.4 Existe una sucesion de numeros (b2j )j tales que para f suficientemente
regular
Z b
m
h
i
X
(2j1)
(2j1)
2j
f (s) ds Qtr (f, h) =
(b) f
(a) + O(h2m+2 ).
b2j h f
a
j=1
r
do
rra
Bo
El smbolo de Landau O(hM ) indica una cantidad que es menor que una constante
multiplicada por hM y con dicha constante independiente de h. En otras palabras, es
equivalente a escribir
Z b
m
h
i
X
2j
(2j1)
(2j1)
f (s) ds Qtr (f, h)
b2j h f
(b) f
(a) Cm h2m+2
a
j=1
m
X
j=1
I = 0 (h/2) +
m
X
1
c h2j
4j 2j
+ O(h2m+2 ).
j=1
m
40 (h/2) 0 (h) X 1
+
3
3
|
{z
} j=1 |
1
4j1
1 (h)
(1)
1 c2j h2j + O(h2m+2 ).
{z
}
(1)
c2j
I = 1 (h) +
m
X
(1)
(7.3)
j=2
Como consecuencia
I 1 (h) = O(h4 )
|I 1 (h)| C4 h4 .
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 definir12
2 (h) =
12
127
III
LECCION
Paso 0
Paso 2
Paso 3
/ 1 (h)
/ 2 (h)
/ 3 (h)
n6
n6
n6
n
n
n
n
n
n
nnn
nnn
nnn
nnn
nnn
nnn
n
n
n
n
n
n
nn
nn
nn
/ 2 (h/2)
/ 1 (h/2)
0 (h/2)
nn6
nn6
nnn
nnn
n
n
n
n
nn
nn
nnn
nnn
/ 1 (h/4)
0 (h/4)
6
n
n
nn
n
n
nnn
nnn
0 (h)
r
do
rra
Bo
c
o
n
v
e
r
g
e
n
c
i
a
Paso 1
0 (h/8)
Es facil ver que nuevamente I 2 (h) tiene un desarrollo del error que comienza con
h6 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 definir
22j j (h/2) j (h)
.
j+1 (h) =
22j 1
Cada una ellas satisfaciendo
|I j (h)| Cj h2j+2 ,
Nota. Los resultados expuestos en esta seccion, y en concreto la Proposicion 7.4, explican 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 hm para ning
un m. Esto es, el
orden de convergencia es m para cualquier m, o lo que es lo mismo
Z b
f (s)ds Qtr (f, h) Cm hm ,
m N
a
III
LECCION
r
do
rra
Bo
Q
(f,
h)
Crn
tr
a
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, segun el siguiente prototipo de
funcion
01
02
03
04
05
06
07
% RICHARDSON
%
% V= RICHARDSON(F,A,B,N,M) Aplica la formula del trapecio con
N, 2*N,4*N,..., 2^(M-1)*N puntos
Construye la matriz de extrapolacion
V M x M donde V(:,i) es el resultado
de aplicar el paso i-1 de Richardson.
Ejercicio 7.14 Existe una forma mas general de definir la extrapolacion. Para ello precisamos
que las sucesivas h decrezcan de una forma proporcional
0 (h),
0 (rh),
7.1.6.
Integraci
on adaptativa
Las formulas anteriores adolecen de un importante defecto: todas asumen que el comportamiento de la funcion es mas o menos uniforme en todo el intervalo de integracion.
La situacion 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 algoritmo numerico es dise
nar metodos adaptativos. Estos esquemas reconocen aquellas zonas
que requieren mayor trabajo (refinar, en la terminologa habitual) y aquellas donde basta
unas pocas evaluaciones para obtener una aproximacion suficientemente 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
129
III
LECCION
r
do
rra
Bo
Zona regular
Zona Irregular
Zona regular
f (s) ds
h
(1)
f (a) + 4f (c) + f (b) = c2 h4 + O(h6 )
|6
{z
}
(7.4)
Q1 (f )
f (s) ds
(1)
c
h
f (a) + 4f (d) + 2f (c) + 4f (e) + f (b) = 2 h4 + O(h6 ) (7.5)
16
{z
}
|12
Q2 (f )
donde h = (b a), c es el punto medio de (a, b), d y e, los puntos medios de (a, c) y (c, b).
(1)
El termino dominante del error, para h suficientemente peque
no, es c2 h4 de forma que
Z
(1)
f (s) ds Q1 (f ) c2j h4 .
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
(1) 4
1
Q2 (f ) Q1 (f ) 1 16
c2j h
y por tanto
16
(1)
(Q2 (f ) Q1 (f )) c2j h4
15
Z
a
|
130
f (s) ds Q1 (f ) .
{z
}
error
III
LECCION
La idea de nuestro esquema adaptativo es la que sigue: dado un intervalo [a, b] y una
tolerancia
r
do
rra
Bo
Si est > se aplica el argumento anterior en los subintervalos [a, c] y en [c, b] con
una tolerancia de /2 y se devuelve como integral la que calculada en [a, c] y en [c, b]
3. Se calcula el estimador
16
est = (integ integ2)
15
III
LECCION
r
do
rra
Bo
Si hemos seguido el esquema anterior y nos vemos forzados a dividir en dos subintervalos, 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 Q2 (f ), en
lugar de Q1 (f )14 . Otra variante es devolver
16Q2 (f ) Q1 (f )
15
%
%
%
%
%
%
%
SIMPSONRECURSIVO
function integ=simpsonrecursivo(f,a,b,tol)
c=(a+b)/2;
fa=feval(f,a);
fb=feval(f,b);
fc=feval(f,c);
integ=(b-a)*(fa+4*fb+fc)/6; %regla de Simpson
integ=simpsonadaptativo(f,a,c,b,fa,fc,fb,integ,tol);
return
Ejercicio 7.16 El metodo tal como esta programado puede entrar en un bucle infinito 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 numero de veces que ha
subdividido un intervalo. La funcion puede seguir la siguiente sintaxis
14
132
III
LECCION
1.5
r
do
rra
Bo
1
0.5
0
0
0.2
0.4
0.6
0.8
1.2
1.4
1.6
1.8
[integ,subd2]=simpsonadaptativo(f,a,c,b,fa,fc,fb,integ,tol,subd)
con x2=[x d e] donde d y e son los puntos medios de [a,c] y [c,b] respectivamente.
Implementa el metodo resultante.
(Ayuda: si al final se desea que los puntos x2 esten ordenados se puede aplicar la instrucci
on
sort(x2) que devuelve el vector con sus componentes ordenadas de menor a mayor.)
Nota final
III
LECCION
Adaptativa
Error
neval
8.91e03
7
1.41e04
15
1.57e06
29
2.12e07
47
8.48e09
77
2.64e10 133
8.27e12 233
2.25e13 421
Error
8.01e3
2.70e3
1.03e3
5.01e4
2.45e4
1.09e4
4.73e5
1.96e5
Trapecio
Simpson
Error
3.67e2
1.06e2
3.81e3
1.82e3
8.67e4
3.81e4
1.64e4
6.76e5
Error
1.01e2
3.59e3
1.40e3
6.90e4
3.33e4
1.36e4
6.41e5
2.65e5
r
do
rra
Bo
tol
101
102
103
104
105
106
107
108
Pto. medio
R2
umero de
Cuadro 7.2: Resultados numericos para 0 x dx. Tolerancia exigida (tol), n
evaluaciones (neval) y error cometido (Error). Comparativa con las reglas del punto medio,
del trapecio y de Simpson con h fijo y el mismo n
umero de evaluaciones
de 105 el error real cometido por el metodo adaptativo es 8.48 109 , un error 1000 veces
menor en magnitud. Una forma de corregir este problema es, una vez que se ha decidido
dividir el intervalo de integracion en dos subintervalos, no exigir una tolerancia tol/2 en
cada uno de ellos, sino utilizar r tol con r [1/2, 1]. Matlab utiliza de hecho r = 1.
Matlab cuenta con algunas funciones encargadas de la integracion numerica:
quad
quadl
dblquad
triplequad
Las dos u
ltimas aplican reglas de cuadratura para integrales dobles y triples respectivamente.
El comando quad implementa esencialmente el metodo de Simpson recursivo que
hemos visto en esta seccion. Por otro lado, quadl utiliza una regla de orden mayor que
da mejores resultados si el integrando es m
as regular.
El codigo de estas funciones esta abierto, luego se puede editar para ver los detalles
de su implementacion.
7.2.
Transformada r
apida de Fourier
El nombre correcto sera transformada discreta rapida de Fourier, para distinguirla de la transformada
de Fourier continua. Sus siglas en ingles, FFT, podran entonces provenir de Fast Fourier Transform o
Finite Fourier transform. De acuerdo a lo anterior, las siglas mas adecuadas seran FFFT (Fast Finite
Fourier transform), pero nadie utiliza esta nomenclatura, seguramente por el exceso de Fs)
134
III
LECCION
7.2.1.
r
do
rra
Bo
R,
f () =
fb(m) exp(2im),
(7.6)
mZ
m Z.
f () exp(2im)d,
fb(m) =
[0,1]
cuando r, s ,
m=r
es una funcion 1/m-periodica, o dicho de otra forma, su periodo es 1/m (ver la Figura
7.6).
Ademas se tiene la relacion
Z
|f ()| d =
|fb(m)|2
(7.7)
m=
que se interpreta como que la energa de funcion original f es igual a la energa del vector
infinito (. . . , fb(2), fb(1), fb(0), fb(1), fb(2), . . .)> .
16
Mucho se ha escrito sobre esto. En cualquier caso hay que especificar en que sentido converge la
serie. El sitio m
as adecuado, matem
aticamente hablando, es el espacio de las funciones cuyo cuadrado
es integrable, que se denota por L2 (0, 1). Fsicamente se interpreta como el espacio de las se
nales cuya
energa es finita.
135
III
LECCION
1.5
r
do
rra
Bo
1
0.5
-0.5
-1
-0.2
0.2
0.4
0.6
0.8
1.2
m=1
m=1
(7.8)
=: m
La expresion (7.8) puede resultar mas atractiva que (7.6), especialmente si la funcion es
real puesto que implica trabajar u
nicamente 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 definimos
xj =
j
,
N
j = 0, . . . , N 1,
se eval
ua
yj := f (xj ) ,
j = 0, . . . , N 1
136
III
LECCION
y se construye el vector
y=
y0
y1
..
.
yN 1
r
do
rra
Bo
La primera cuestion es
|k|
y de hecho de una forma muy rapida (ver Ejercicio 7.18), por lo que unos pocos coeficientes
pueden ser suficientes para reconstruir la funcion de forma muy aproximada.
Para calcular estos coeficientes 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
Z 1
b
f (k) :=
f ()exp(2ik) d
0
f (1) = f (0) = y0
N
1
i
X
1
1 h1
)
+
f (0) +
f ( Nj ) exp( 2ijk
f
(1)
N
N 2
2
j=1
N 1
1 X
yj jk
N j=0
donde
:= exp 2i
.
N
N 1
1 X
Yk :=
yj jk
N j=0
Y=
y0
y1
..
.
yN 1
III
LECCION
r
do
rra
Bo
1
2ki
f 0 () exp(2ik) d.
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 fb(k) es mas acusado.
|fb(k)|
N 1
1 X
=
exp 2ijk
N
N j=0
1,
k = `N para algun ` Z,
0,
en caso contrario.
.
:= exp 2i
N
N 1
N 1
1 X jk
1 X k j
=
( ) .
N j=0
N j=0
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 + r2 + . . . + rm1 =
1 rm
1r
obtenemos que
N 1
1 1 ( N )k
1 X k j
1 1 ( k )N
( ) =
=
.
N j=0
N 1 k
N 1 k
17
Manipulaciones que deben siempre justificarse y que son validas si, por ejemplo, la funcion tiene
derivada primera continua.
138
III
LECCION
exp
2i(mk)j
N
=
j=0
1,
0,
si m = k + `N ,
en caso contrario,
r
do
rra
Bo
por lo que
Yk =
1 Xb
f (k + mN ).
N mZ
X
b
si 0 k N2
f
(k)+
fb(k + mN ),
m6=0
{z
}
|
peque
no
(7.9)
Yk =
X
b
b
f (k + mN ),
f (k N )+
si 2 < k < N .
m6
=
0
|
{z
}
peque
no
A la operacion que a cada Y le asocia el vector original y se conoce como transformada inversa de Fourier discreta y se denota
F 1 Y = y.
N
1
X
Yj exp
2ijk
N
j=0
f () =
fb(m) exp(2im).
mZ
III
LECCION
Ejercicio 7.20 Dado que vamos a calcular aproximaciones de los coeficientes centrales de
Fourier, podramos plantearnos definir
Yek =
N
1
X
yj jk ,
j=0
r
do
rra
Bo
Sabras ver que relacion hay entre Yek e Yk ?.
7.2.2.
C
alculo de la transformada de Fourier Discreta
1
1
1
1
1
2
N 1
2
4
2(N 1)
W :=
= exp 2i
N
,
1
...............................
2
1 N 1 2(N 1) (N 1)
Con esta matriz, la relacion entre y y su transformada Y se escribe simplemente
Y = Fy =
1
W y.
N
Analogamente,
y = F 1 Y = W Y
1
1
1
1
2
N 1
1
2
4
2(N 1)
W = 1
...............................
2
1 N 1 2(N 1) (N 1)
= 1 = exp
2i
N
III
LECCION
Soluci
on. Esta es una implementacion que evita construir la matriz W . En su lugar
calcula sucesivamente las filas, la multiplica por y para hallar el correspondiente coeficiente
y calcula la siguiente fila. De esta forma se reduce la memoria utilizada pero no el n
umero
de operaciones
% FT
%
% Y=ft(y)
%
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
function Y = ft(y)
y=y(:);
% y es columna ahora
n=length(y);
w=exp(-i*2*pi*(0:n-1)/n);
W=ones(1,n);
Y=zeros(n,1);
for j=1:n
Y(j)=W*y;
W=W.*w
end
Y=Y/n;
return
Si f es real,
Re fb(k) = Re fb(k),
Im fb(k) = Im fb(k).
Re yk = Re yN k ,
Im yk = Im yN k ,
k = 1, . . . , N 1.
1
1
1
1
(W y) (W y) = 2 y W W y = y y = kyk22 .
(7.10)
2
N
N
N
N
Hay una falta de consenso en la definicion de Transformada de Fourier discreta.
Nosotros hemos tomado como definicion de la transformada y de su inversa las dadas
por
N 1
N
1
X
1 X
jk
Yk :=
yj , yk :=
Yj jk ,
= exp( 2i
).
N
N j=0
j=0
kYk22 = Y Y =
141
III
LECCION
N
1
X
j=0
jk
yj ,
N 1
1 X
Yj jk ,
yk :=
N j=0
).
= exp( 2i
N
r
do
rra
Bo
En otros textos se multiplica por 1/ N en ambos sumatorios con el fin de dar un aspecto
mas uniforme (en este caso la norma 2 del vector y de su transformada coinciden). En
cualquier caso, la diferencia entre las diferentes transformadas es simplemente el producto
por una potencia de N .
Todo lo desarrollado en esta seccion es perfectamente aplicable a funciones periodicas
con distintos periodos, sin mas que aplicar un cambio de variables y transformarla en
1periodica.
7.2.3.
Aplicaciones a la eliminaci
on de ruido
En la Figura 7.7 se muestra la funcion y sus coeficientes de Fourier, que decrecen rapidamente a cero. Tambien se muestra una evaluacion en 64 puntos (un muestreo) uniformemente distribuidos y la transformada de Fourier discreta resultante. Observese la relacion
entre transformada discreta de Fourier y los coeficientes de Fourier mostrada en (7.7).
En el campo discreto, tenemos un ruido r y el vector transformada de Fourier discreta
R = F r. Visto en el campo transformado, esta perturbacion tiene un tama
no, relacionado
con la amplitud del ruido y con el n
umero de puntos que se han tomado de muestra. Dado
el comportamiento altamente irregular, es esperable que las contribuciones en todas las
frecuencias sean similares. Pero
kRk22 =
1
krk22 max |rj |.
j=0,...,N 1
N
Por tanto, si el ruido tiene un valor maximo controlado, las componentes del vector transformado tienden a cero cuando N . De hecho es esperable que este decrecimiento
sea uniforme en todas las componentes, es decir,
1
Rj
N
142
III
LECCION
0.5
0.5
r
do
rra
Bo
0
-0.5
-0.5
-1
0
0.2
0.4
0.6
0.8
-1
0
0.4
0.6
0.8
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0
-40
0.2
-20
20
40
10
20
30
40
50
60
+ ruido
e
y
e
Y
(7.11)
Z
F 1
z.
III
LECCION
0.08
0.015
0.06
r
do
rra
Bo
0.01
0.04
0.005
0.02
10
20
30
40
0.08
0.06
0.04
0.02
50
100
10
x 10
150
20
30
40
-3
50
100
150
Figura 7.8: Ruido en un conjunto de puntos (40 arriba, 160 abajo) y su transformada
discreta
7.2.4.
Transformada r
apida de Fourier
Hemos mostrado algunas aplicaciones simples de la transformada de Fourier que son esencialmente
unidimensionales (una se
nal peri
odica). Existen aplicaciones que exigen trabajar ya con se
nales bidimensionales. En ese caso, duplicar la precisi
on 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 u
ltimos cuarenta a
nos. Esta ley
establece que la potencia de c
alculo 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
III
LECCION
64 puntos
1
0.4
0.35
0.5
0.3
r
do
rra
Bo
0.25
0.2
0.15
-0.5
0.1
0.05
-1
0.2
0.4
0.6
0.8
10
20
Truncacion de la FT
30
40
50
60
Seal filtrada
0.4
0.35
0.5
0.3
0.25
0.2
0.15
-0.5
0.1
0.05
0
10
20
30
40
50
-1
60
256 puntos
0.2
0.4
0.6
0.8
0.4
0.35
0.5
0.3
0.25
0.2
0.15
-0.5
0.1
0.05
-1
0.2
0.4
0.6
0.8
50
Truncacion de la FT
100
150
200
250
Seal filtrada
0.4
0.35
0.5
0.3
0.25
0.2
0.15
-0.5
0.1
0.05
0
50
100
150
200
-1
250
0.2
0.4
0.6
0.8
III
LECCION
r
do
rra
Bo
se tiene que
N 1
M 1
M 1
1 X
1 X
1 X
jk
2jk
yj =
y2j +
y2j+1 (2j+1)k
N j=0
N j=0
N j=0
{z
} |
{z
}
|
Pares
N = 2M
=:
(0)
Impares
M 1
M 1
i
1 X
1h 1 X
y2j 1jk + k
y2j+1 1jk
2 M j=0
M j=0
i
h
1
(0)
(1)
Yk + k Yk .
2
(7.12)
(1)
Notemos que Yk e Yk son el resultado de aplicar la transformada de Fourier discreta a los vectores (y0 , y2 , . . . , y2M 2 )> y a (y1 , y3 , . . . , y2M 1 )> respectivamente, que son
vectores de longitud M = N/2.
Si M k N 1 la relacion cambia levemente. Para ello, escribamos k = M + ,
donde ahora 0 M 1. Entonces
Yk
N 1
M 1
M 1
1 X
1 X
1 X
jk
2jk
yj =
y2j +
y2j+1 (2j+1)k
=
N j=0
N j=0
N j=0
M 1
M 1
i
1h 1 X
1 X
y2j 1jM 1j + M
y2j+1 1j .
2 M j=0
M j=0
Dado que
M = exp(i) = 1,
1M = 1;
se deduce que
1 (0)
(7.13)
Y Y(1) .
2
v
Denotando por w el vector resultado de enlazar los vectores v y w, las identidades
(7.12) y (7.13) se puede escribir en notacion vectorial
1 Y(0) + . Y(1)
Y=
(7.14)
2 Y(0) . Y(1)
Yk =
donde Y(0) e Y(1) son las transformadas de Fourier de los vectores (y0 , y2 , . . . , y2M 2 )> y
(y1 , y3 , . . . , y2M 1 )> ,
= ( 0 , 1 , . . . , M 1 )> ,
146
:= exp( 2i
),
N
(7.15)
III
LECCION
r
do
rra
Bo
f (N ) = 2f (N/2) + N.
Nada nos impide aplicar de forma reiterada el algoritmo anterior para calcular Y(0) e
Y(1) si M es divisible por 2 (o lo que es lo mismo, que N sea divisible por 4). De forma
natural, se puede programar el metodo de forma recursiva.
El caso optimo del algoritmo en la version anterior se da cuando N = 2p . El algoritmo
queda de la siguiente forma
FFT
N =length(y)
if N==1
Y=y
else
Y(0) := FFT(y(0 : 2 : N 2)) % Parte par
Y(1) := FFT(y(1 : 2 : N 1)) % Parte impar
= exp(2i/N )
:= [ 0 , 1 , . . . , N/21 ]>
Y(0 : N/2 1) = (Y(0) + . Y(1) )/2
Y(N/2 : N 1) = (Y(0) . Y(1) )/2
end
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
fila 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
III
LECCION
si se desea implementar para filas. 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
r
do
rra
Bo
. Y(1)
(Y(0) )
(Y(1) )
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
Ejercicio 7.25 Implementa una funcion recursiva que devuelva el numero de operaciones
para el calculo de la FFT. Utilzala para obtener una tabla con el numero de operaciones para
algunos valores altos de N . Compara con el numero de operaciones requerido en la version
inicial del algoritmo dada antes.
Soluci
on. Esta
es una forma simple de implementar la funcion
01
02
03
04
05
06
07
08
09
10
11
12
13
% OPERACIONESFFT(N)
%
% M=OPERACIONESFFT(N)
%
% M es el numero de operaciones de la FFT
function M=operacionesFFT(N)
if mod(N,2)==1
M=N^2;
else
M=operacionesFFT(N/2)*2+N;
end
148
III
LECCION
r
do
rra
Bo
10485760
>> operacionesfft(2^19-1)
ans =
274876858369
Observa que el n
umero de operaciones efectuadas se reduce en un factor de 26000 si
aumentamos en uno el n
umero de elementos.
Ejercicio 7.26 Implementa la Inversa de la Transformada Discreta de Fourier con nombre
InvTrRaFourier.
III
LECCION
v = (v0 , v1 , . . . , vs )>
r
do
rra
Bo
(u v)k :=
u` v j =
`+j=k
u` vk` ,
(7.16)
(k = 0, . . . , r + s).
`=m
ax{0,ks}
v0 + v1 x + . . . + vs xs
entonces el coeficiente en xk 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 Rn+1 rellenando con ceros
u = (u0 , u1 , . . . , ur ,
0, . . . , 0
| {z }
)> , v = (v0 , v1 , . . . , vs ,
N r = s ceros
0, . . . , 0
| {z }
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)
Por tanto, la FFT nos ofrece una forma muy rapida de multiplicar dos n
umeros enteros.
150
III
LECCION
Ejercicio 7.28 Implementa una funcion que calcule el producto de dos numeros enteros con
la transformada de Fourier de acuerdo al siguiente prototipo
r
do
rra
Bo
% MULTIPLICACION
%
%
% P=MULTIPLICACION(A,B)
%
%
%
%
%
Ayuda. Para que el metodo sea realmente eficiente necesitamos que los vectores sobre los
que se va a aplicar la transformada de Fourier tengan longitud una potencia de 2. Para
ello podemos insertar mas ceros de los inicialmente previstos de forma que N sea una
potencia20 de 2.
Para disponer de una precision en principio ilimitada, introduciremos los n
umeros
que deseamos multiplicar en una cadena de caracteres y haremos la salida en el mismo
formato. Para su implementacion necesitaremos manejarnos con la conversion entre los
diversos formatos de datos.
Una cadena o string es simplemente un vector de caracteres y as lo maneja Matlab:
>> p=esto es una prueba
ans=
>> p(3)
ans=
>> p(6:9)
ans =
es u
151
III
LECCION
Por u
ltimo una vez multiplicados hay un paso de acarreo, es decir, un resultado de forma
que
[4 15 11 31 21 12 6]
r
do
rra
Bo
4 + 5 101 + 2 102 + 2 103 + 4 104 + 4 105 + 7 106 = 744224.
21
152
r
do
rra
Bo
Leccion IV
153
r
do
rra
Bo
r
do
rra
Bo
Introducci
on
155
r
do
rra
Bo
r
do
rra
Bo
Captulo 8
Matlab: C
alculo simb
olico y
estructuras de datos.
8.1.
Polinomios y c
alculo simb
olico
Los polinomios constituyen las funciones mas simples en Matematicas y computacionalmente 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
ans=
-1
El producto y division de polinomios estan implementados respectivamente en los comandos conv y deconv
157
IV
LECCION
-3
r
do
rra
Bo
-2
>> 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 segun el siguiente prototipo
01
02
03
04
OPERACIONESPOL(P1,P2)
[S,R,C,P]= OPERACIONESPOL(P1,P2)
39
255
Races de polinomios
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 m
as puras. Quiz
as ahora se comprenda mejor por que recibio el sobrenombre deprncipe
de las Matem
aticas.
158
IV
LECCION
En Matlab podemos utilizar roots para calcular de forma aproximada las races de un
polinomio:
>> pol=[2 -3 -17 30]; % 2*x^2-3*x^2-17*x+30
>> roots(pol)
r
do
rra
Bo
ans =
-3.0000
2.5000
2.0000
1.0000
0.5000 + 0.8660i
0.5000 - 0.8660i
Recprocamente, dado un vector que contenga las races, podemos crear un polinomio
monico (el coeficiente que acompa
na a la mayor potencia de x es 1) cuyas races sean las
dadas:
>> poly([-3 5/2 2])
ans =
-3/2
-17/2
15
-8
19
>> roots(p).
ans =
4
1
159
-12
IV
LECCION
En la segunda parte de esta leccion nos centraremos en los metodos numericos para el
calculo de las races de estos polinomios2 .
r
do
rra
Bo
del Algebra
y la manipulaci
on simb
olica de expresiones ha conseguido que este problema pueda ser
planteado en nuestros das a un alumno de primaria.
5
Paolo Ruffini 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 m
as 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 demostraci
on. 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.
3
160
IV
LECCION
1
0
0
1
..
.
0
0
xn + an1 xn1 + . . . a0
r
do
rra
Bo
a1 a0
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 simb
olico
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 necesariamente polinomicas:
>> syms x y
>> expand(cos(x+y))
ans=
cos(x)*cos(y)-sin(x)*sin(y)
161
IV
LECCION
%derivada
ans =
cos(x^2)-2*x^2*sin(x^2)
r
do
rra
Bo
>> 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
1/6*pi^2
ans=
1.3023936842811332237346277906909
ans=
1.3023936842811332237346277906908653676509857177734375000
162
IV
LECCION
r
do
rra
Bo
ans=
factor
expand
collect
simple
0
1
-5
-3/10*sin(s)+1/10*cos(s)+C1+C2*exp(2*s)+C3*exp(-s)
-3/10*sin(s)+1/10*cos(s)+1/2+9/10*exp(2*s)-1/2*exp(-s)
Ejercicio 8.3 Utiliza solve para hallar las cuatro races de la ecuacion de cuarto grado
x4 + ax3 + bx2 + cx + d.
163
IV
LECCION
8.3 Tensores
r
do
rra
Bo
Nota. Matlab es un programa mas enfocado al calculo numerico que al simbolico. Ciertamente 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
8
realizar calculos matriciales y su habilidad en el manejo de grandes cantidades de memoria. Estas habilidades se extienden a la manipulacion de arrays multidimensionales, que
matematicamente se puede identificar 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
a(:,:,2) =
0
define un array de una fila, 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
4
2
5
3
6
2
5
3
6
164
IV
LECCION
a2(:,:,2) =
8
11
9
12
r
do
rra
Bo
7
10
>> size(a)
ans =
>> length(a)
ans =
Observa la diferencia
>> a1=a(1,:,:)
a1(:,:,1) =
1
a1(:,:,2) =
7
>> a2=a(:,1,:)
a2(:,:,1) =
1
4
a2(:,:,2) =
7
10
>> a3=a(:,:,1)
a3 =
165
IV
LECCION
8.3 Tensores
1
4
2
5
3
6
r
do
rra
Bo
3
6
4
7
9
12
10
13
b(:,:,2) =
8
11
3
3
4
3
-1
-3
-2
-4
b(:,:,2) =
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;
end
166
IV
LECCION
r
do
rra
Bo
Las funciones que operan sobre escalares, tales como sin, cos, etc., funcionan con
tensores exactamente del mismo modo que con vectores o matrices, realizando las operaciones elemento a elemento. Si se aplica una funcion de las que operan sobre los elementos
de un tensor como por ejemplo b
usqueda de maximos o mnimos (max, min) o la suma y
producto (sum, prod), devuelve un tensor de una dimension menos, resultado de realizar
la operacion sobre la primera dimension:
>> a=zeros(2,3,2);
>> a(:,:,1)=[1 2 8; 4 5 6]; a(:,:,2)=[6 2 14; 3 5 1]
a(:,:,1) =
1
4
2
5
8
6
2
5
14
1
a(:,:,2) =
6
3
>> max(a)
% 1x3x2
ans(:,:,1) =
4
ans(:,:,2) =
6
14
ans(:,:,2) =
14
IV
LECCION
8.4.
Vectores de celdas
r
do
rra
Bo
1x4
1214
cell array
celda{1}=7;
celda{2}=[1 2 3;4 5 6];
celda{3}=una cadena de caracteres;
celda{4}=inline(x+y);
Fjate en la disposicion de las llaves en los dos ejemplos anteriores. En cualquier caso, una
vez definido el vector podemos acceder a cada una de sus componentes indicando entre
llaves su posicion
>> celda{1}
ans =
3.0000
4.5000
168
% funcion!!
IV
LECCION
r
do
rra
Bo
7
celda{2} =
1
4
2
5
3
6
celda{3} =
Inline function:
(x,y) = x+y
Ejercicio 8.4 Otra manera de agrupar distintos tipos de datos es utilizar estructuras (struct).
Una estructura es un tipo de dato del que luego se pueden asignar campos distintos. Por ejemplo, la estructura Libro podra contener los campos Titulo y Autor que seran cadenas de
caracteres y A~
noPublicacion y NumeroPaginas que seran numeros.
Utiliza la ayuda de Matlab para averiguar como pueden definirse estos tipos de datos
mediante la orden struct.
169
IV
LECCION
r
do
rra
Bo
170
r
do
rra
Bo
Captulo 9
C
alculo num
erico de valores y
vectores propios.
9.1.
Introducci
on
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 6= 0 que cumplan
Av = v.
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 caracterstico para hallar los valores propios, pero pronto se comprobo que este camino no
era el mas indicado. Uno de los hechos que motivaron este abandono radicaba en la inestabilidad numerica:
171
IV
LECCION
9.1 Introduccion
r
do
rra
Bo
En vista de lo anterior se planteo el problema original: son los valores y vectores propios
sensibles a peque
nas modificaciones 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 modifica1
ciones en los valores propios . Para matrices arbitrarias este resultado dista mucho de ser
cierto, las condiciones para asegurar la estabilidad son mas complicadas, y podemos encontrarnos con lo que en la terminologa habitual se denomina, matrices mal condicionadas
para el calculo de valores propios.
Ejemplo Estas lneas muestran la sensibilidad de una matriz muy simple ante una
peque
na variacion en una entrada.
>> a=[149 50 154;-537 -180 -546;27 9 25];
>> p= poly(a)
p =
1.0000
6.0000
11.0000
6.0000
>> roots(p).
ans =
-3.0000
-2.0000
-1.0000
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
IV
LECCION
Nota. Este
y otros detalles no eran conocidos en los inicios del calculo cientfico. James
Hardy Wilkinson relata la siguiente anecdota2 . Cuando estaba programando en uno de los
primeros ordenadores electronicos el metodo de Newton para la resolucion de ecuaciones
no lineales, decidio testarlo con el siguiente polinomio
(x 20)(x 19) (x 1).
r
do
rra
Bo
El metodo fallaba de forma reiterada, a pesar de las sucesivas revisiones del codigo, hasta
que Wilkinson cayo en la cuenta de que el error no radicaba en su programa sino que
las races eran tan sensibles numericamente que se vean afectadas por los errores de
redondeo. Wilkinson demostro que al cambiar el coeficiente de x19 en p, que es 210,
por 210 223 , las races 16 y 17 se transforman3 en el par complejo 16.73 2.81i.
El polinomio en cuestion paso a la historia del Numerico con el nombre de el perfido
polinomio de Wilkinson.
9.2.
Matrices semejantes
Dos matrices A y B son semejantes si existe una matriz P invertible tal que
B = P AP 1 .
En este caso,
es decir, A y B tienen el mismo polinomio caracterstico y por tanto los mismos valores
propios.
Este resultado sugiere una estrategia para encontrar los valores propios de A: buscar
matrices semejantes para las que el calculo de los valores propios sea sencillo. En particular,
cuando B es triangular sus valores propios son simplemente los elementos diagonales.
Si podemos tomar los n vectores propios linealmente independientes, la matriz P :=
[v1 |v2 | . . . |vn ] (su iesima columna es el vector vi ) es invertible. Entonces
AP = P D
P 1 AP = D,
donde D es una matriz diagonal con los valores propios sobre la diagonal. Si una matriz
es semejante a una matriz diagonal se dice que es diagonalizable.
Particularmente interesante es el caso en que P se puede tomar ademas ortogonal.
Esto es, P 1 = P > , y por tanto
P > AP = D.
Las matrices ortogonales son muy estables numericamente y posibilitan el dise
no de metodos 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 Cientfico. 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
IV
LECCION
Teorema 9.1 Si A es simetrica, existe Q ortogonal tal que Q> AQ = D con D diagonal con
los valores propios de A. En particular, los valores propios de una matriz simetrica son todos
reales.
r
do
rra
Bo
En las Secciones 9.4 y 9.5 de esta leccion se estudiaran dos metodos basados en transformaciones de semejanza (producto por matrices ortogonales) que tratan de llevar una
matriz simetrica a una forma diagonal como forma de calcular los valores propios. Estos
metodos se pueden adaptar, con mas o menos exito, a matrices arbitrarias llevando en
este caso la matriz a una forma triangular o cuasitriangular.
9.3.
M
etodo de potencias
9.3.1.
Descripci
on del m
etodo
Asumiremos para empezar que la matriz A tiene un valor propio dominante, es decir,
sus valores propios pueden ordenarse en la forma
|1 | > |2 | |3 | . . . |n |.
Supongamos ademas que tenemos una base formada por vectores propios, esto es podemos tomar {vi }ni=1 vectores propios linealmente independientes (la matriz A es por tanto
diagonalizable). Entonces, cualquier vector x0 puede escribirse en la forma
x0 =
n
X
i vi
i=1
A x0 =
n
X
i m
i vi
m
1
1 v1 + 2
i=1
2
1
m
v2 + . . . + n
n
1
m
vn .
(9.1)
Entonces, si 1 6= 0 y m es grande
xm := Am x0 m
1 1 v1 ,
es decir, xm 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:
x> Axm
x> xm+1
(m)
1 := m 2 = m 2 1 .
kxm k
kxm k
174
IV
LECCION
Proposici
on 9.2 Bajo las hipotesis anteriores
(m)
= 1 + O
(m)
= 1 + O
1
Si ademas A es simetrica
1
2
2m
1
2
r
do
rra
Bo
m
x0 6= 0
02
y0 =
03
for m=1:mmax
vector inicial
x0
kx0 k2
04
xm = Aym1
05
>
xm
(m) = ym1
xm
ym =
kxm k2
06
07
08
09
10
end
return
end
Soluci
on. He aqu una implementacion del metodo.
01
02
03
%POTENCIAS
%
%LB=POTENCIAS(A)
IV
LECCION
r
do
rra
Bo
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
MMAX
function [lb,x,m]=potencias(a,varargin);
n=length(a);
if nargin>1 & ~isempty(varargin{1})
mmax=varargin{1};
else
mmax=n*2;
end
if nargin>2 & ~isempty(varargin{2})
eps=varargin{2};
else
eps=1e-6;
end
if nargin>3 & ~isempty(varargin{3})
y=varargin{3};
else
y=rand(n,1);
end
y=y/norm(y);
for m=1:mmax
x=a*y;
lb=y*x;
x=x/norm(x);
if norm(x-y)<eps
return
end
y=x;
end
disp(numero maximo de iteraciones superado)
IV
LECCION
>> [lb,v]=potencias(a,[],[],v0);
r
do
rra
Bo
1 3 0
1 3 0
1
4 2
9 4 ,
9 4 ,
9 1 .
A= 4
B = 3
C= 4
2 1 5
0
4 5
2 1
5
Nota. Cuando no se conoce una aproximacion del vector propio asociado al valor propio
dominante, se suele iniciar el algoritmo partiendo de un vector generado aleatoriamente.
Podra ocurrir que para el vector inicial 1 = 0, pero la probabilidad de que se de este
problema es (practicamente) nula. En este caso, si |2 | > |3 |, salvo por errores de redondeo4 , el metodo proporcionara el valor propio subdominante 2 y su vector propio
asociado normalizado.
No es necesario que la matriz sea diagonalizable para que el metodo de potencias
converja. Tampoco que el subespacio asociado al valor propio dominante este generado
por un u
nico vector. En este caso, que solo puede darse si 1 es un valor propio repetido, el
metodo puede converger a distintos vectores propios normalizados dependiendo del vector
inicial considerado.
Si |1 | = |2 |, es decir, 1 = 2 o 1 y 2 son n
umeros complejos conjugados, entonces
el metodo de potencias falla.
Ejercicio 9.4 Consideremos la matriz
0
1
A=
0
0
0
0
1
0
0 24
0
50
0 35
1
10
2. Sabiendo que v1 = (24, 26, 9, 1)> y v2 = (12, 19, 8, 1)> son vectores propios
asociados a los valores propios 1 y 2 respectivamente, que crees que ocurrira si se toma
como vector inicial v1 3v2 = (12, 31, 15, 2)> ?
3. Observa para distintas tolerancias la diferencia entre partir del vector del apartado anterior y de (12, 31, 15, 2.0001)> .
177
IV
LECCION
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
fichero script
r
do
rra
Bo
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 propios5 {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 m
etodo de potencias
M
etodo de la potencia inversa
A1 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 A1 para calcular el menor
valor propio en valor absoluto de A.
En lugar de calcular el producto xm = A1 ym1 (lnea 04 en el metodo de potencias)
resolveremos en cada iteracion el sistema6
Axm = ym1 .
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 u
nica 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 xm1 , 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.
M
etodo de potencias desplazado
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
IV
LECCION
donde es una constante conocida, podemos obtener el valor propio de A mas alejado
de . Mas interesante desde el punto de vista practico es aplicar el metodo de potencias
a (A I)1 , que nos proporcionara el valor propio de A mas proximo a .
r
do
rra
Bo
Ejercicio 9.7 Modifica el programa del Ejercicio 9.6 para implementar el metodo de potencias desplazado. Los argumentos obligatorios de entrada seran ahora A y alpha.
Comentarios finales
El metodo de potencias tiene una ventaja evidente: su simplicidad. Ni siquiera necesitamos la matriz en s, solo saber multiplicar por ella.
El algoritmo de la potencia desplazada se puede utilizar para el calculo de un vector
propio si se conoce , el valor propio asociado. Basta para ello aplicar el metodo con
= + con << 1. Puede plantearse si esto tiene efectos perniciosos habida cuenta
de que A I esta muy cerca de ser singular. Wilkinson probo sin embargo que el efecto
de esta inestabilidad se da precisamente en la direccion del vector propio, que a fin de
cuentas es lo que nos interesa.
Se puede sugerir una version alternativa del metodo de potencias desplazada consistente en tomar un nuevo en cada iteracion, por ejemplo el u
ltimo valor calculado (m) .
Aunque esto acelera enormemente la convergencia del metodo, dispara el costo por iteracion, ya que en cada paso hay que resolver un sistema lineal nuevo, por lo que salvo
en contados casos no es recomendable.
Si se conoce un valor propio de una matriz A de tama
no n, puede construirse una
nueva matriz de tama
no n 1 que tiene exactamente los mismos valores propios que A
salvo . Podra aplicarse ahora el metodo de potencias (o cualquiera de sus variantes) a la
nueva matriz para determinar un nuevo valor propio de A. Este tipo de tecnica, en la que
no entraremos en estos apuntes, se conoce como deflacion. Debemos se
nalar que mediante
esta tecnica los errores de redondeo se van acumulando, de modo que solo es factible para
calcular unos cuantos valores propios. El n
umero final depende obviamente de la propia
matriz y de la precision con que se van calculando los valores propios.
9.4.
M
etodo de Jacobi
En esta seccion estudiaremos un metodo que nos proporcionara todos los valores propios de una matriz sim
etrica (todos son reales) mediante un esquema iterativo basado
en transformaciones de semejanza.
9.4.1.
Descripci
on del m
etodo
El metodo de Jacobi transforma en cada paso una matriz simetrica A en otra semejante
con estructura mas diagonal mediante el producto a izquierda y derecha por matrices
apropiadas. Una matriz de Givens, tambien llamada de rotacion, es una matriz de la
179
IV
LECCION
1
..
Rpq () =
.
cos
fila p
fila q
sin
1
.
r
do
rra
Bo
..
sin
cos
...
col. p
col. q
(9.2)
Es facil ver que son ortogonales, es decir, Rpq ()1 = Rpq ()> .
Mediante
>
ARpq
A1 := Rpq
1
(aqq app ) sen(2) + apq cos(2).
2
si aqq = app ,
cos(2) = 0,
2apq
,
en caso contrario.
tan(2) =
aqq app
aqq app
,
2apq
entonces
cos =
t :=
1
,
t2 + 1
sign()
,
|| + 2 + 1
sen =
t
.
t2 + 1
1
cos = ,
2
sen m =
sign(aqq )
.
2
180
IV
LECCION
r
do
rra
Bo
Am D :=
cuando m .
,
.
.
.
n
Por tanto, las columnas de Qm 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 Frobenius8
kAkF :=
n
hX
|ai,j |
i1/2
i,j=1
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 Rpq (), 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 suficientemente peque
nos. En concreto, se suele tomar el siguiente criterio
de parada
!1/2
n
X
(m)
|a(m)
|aii |2
.
pm qm | < eps
i=1
Fjate que las matrices Am y Am+1 solo difieren en las filas y columnas pm y qm . 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 Am+1 a partir de Am .
181
IV
LECCION
Soluci
on. La parte central del programa se puede implementar con las siguientes lneas
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
JACOBI
D=JACOBI(A)
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[D,Q]= JACOBI(A)
[D,Q,NITER]= JACOBI(A)
D=JACOBI(A,NMAX)
D=JACOBI(A,NMAX)
D=JACOBI(A,NMAX,EPS)
Q=eye(n);
for m=1:mmax
d=diag(a);
%Calculo del mayor elemento extradiagonal
[max1,p]=max(abs(a-diag(d)));
[max2,q]=max(max1);
p=p(q);
if max2<eps*norm(d)
return % convergencia
end
%calculo sen y cos
if abs(a(q,q)-a(p,p))<eps
c=1/sqrt(2);
s=-c*sign(a(p,q));
182
IV
LECCION
else
theta=(a(q,q)-a(p,p))/(2*a(p,q));
t=sign(theta)/(abs(theta)+sqrt(theta^2+1));
c=1/sqrt(t^2+1);
s=c*t;
end
r=[c s ;-s c];
%La rotacion solo afecta a las filas y col. p y q
a([p q],:)=r*a([p q],:);
a(:,[p q])=a(:,[p q])*r;
Q(:,[p q])=Q(:,[p q])*r; % guardamos Q
r
do
rra
Bo
42
43
44
45
46
47
48
49
50
51
52
53
54
55
end
disp(numero maximo de iteraciones sobrepasado);
return
Observa bien las lneas 32-33 que sirven para encontrar la posicion del maximo elemento
extradiagonal.
9.4.2.
Variantes del m
etodo de Jacobi
Ahora Matlab va a llevar un control sobre el tiempo que consume cada lnea de codigo9 .
A continuacion ejecuta el programa jacobi para a con un n
umero maximo de iteraciones
suficientemente alto de forma que asegures convergencia. La instruccion
>> profile report
despliega un informe donde puedes ver el tiempo que ha consumido cada parte del programa. Se observa claramente que las lneas mas costosas son aquellas empleadas en la
b
usqueda del maximo elemento extradiagonal (observa la Figura 9.1). Es precisamente
183
IV
LECCION
r
do
rra
Bo
Calls Time/call
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: for m=1:mmax
0.07643962 1% 34:
35:
0.07000000 0% 39:
d=diag(a);
p=p(q);
if max2<eps*norm(d)
40:
42:
0.09000000 1% 43:
return % convergencia
if abs(a(q,q)-a(p,p))<eps
44:
51:
0.10819591 1% 52:
53:
0.31000000
0.12000000
0.17000000
0.05000000
2%
1%
1%
0%
c=1/sqrt(2);
end
54:
a([p q],:)=r0'*a([p q],:);
55:
a(:,[p q])=a(:,[p q])*r0;
56:
r(:,[p q])=r(:,[p q])*r0; % guardamos r
57: end
184
IV
LECCION
r
do
rra
Bo
9.5.
M
etodo QR de Francis
El metodo QR y sus variantes son sin lugar a dudas la eleccion mas apropiada para el
calculo de todos los valores propios de una matriz llena.
El metodo es muy facil de entender y sencillo de implementar. Sin embargo, es difcil
de comprender por que funciona (el analisis no es nada trivial).
Ya hemos visto descomposiciones matriciales del tipo A = LU con L (permutacion
de) triangular inferior con 1s en la diagonal y U triangular superior. Una descomposicion
alternativa es
A = QR
(factorizar)
(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
185
IV
LECCION
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 Am son semejantes y por tanto comparten los
mismos valores propios.
r
do
rra
Bo
9.5.1.
Factorizaci
on 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 m n, tambien lo es Q y R es n n).
Este algoritmo es, sin embargo, muy inestable numericamente y rara vez se utiliza en
la practica10 .
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 multiplicando a izquierda por matrices ortogonales, ya sean rotaciones como las que aparecen
en el algoritmo de Jacobi (matrices de Givens), o matrices (reflexiones) de Householder.
Factorizaci
on QR con Matrices de Householder
Una matriz de Householder viene dada por
Q = I 2 u u> ,
entonces
Qx = (, 0, . . . , 0)> .
10
Existe el algoritmo de Gram-Schmit modificado que dota de algo mas de estabilidad al metodo
original.
186
IV
LECCION
r
do
rra
Bo
1 . . .
(9.3)
Q1 A = 0.
..
A2
0
2. Repetimos el proceso con la matriz A2 que es (n 1) (n 1) para construir la
matriz de Householder Q2 tal que
2 . . .
Q2 A2 = .
(9.4)
.
..
A3
0
Ahora basta considerar
Q2 =
1 0 ... 0
0
..
.
0
Q2
(9.5)
que cumple
1 . . .
0 ...
Q2 Q1 A =
0 0
.
..
..
A3
0 0
k . . .
"
#
I
k1
Qk :=
Qk Ak = 0.
,
,
..
Qk
Ak+1
0
donde Ik1 es la matriz identidad de tama
no k 1.
1
Definiendo Q := Q1 Qn1 , tenemos que Q1 = Q1
n1 Q1 = Qn1 Q1 . Por tanto,
A = QR
IV
LECCION
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
n=length(a)
q=eye(n);
r=a;
for k=1:n
u=r(k:n,k); %primera columna
alpha=-sign(u(1))*norm(u);
u=u-alpha*[1;zeros(length(u)-1,1)];
u=u/norm(u);
qhouse=eye(length(u))-2*u*u;
r(k:n,k:n)=qhouse*r(k:n,k:n);
q(:,k:n)=r(:,k:n)*qhouse;
end
return
Ejercicio 9.12 Adapta el programa para calcular la factorizacion QR de matrices rectangulares, es decir, matrices generales de m filas y n columnas.
(Ayuda: el for de la lnea 11 es ahora for k=1:min([m,n]). El resto de cambios son inmediatos
sin mas que tener en cuenta los tama
nos de las matrices implicadas.)
(9.6)
Es decir, en ning
un momento se requiere construir la matriz Q y u
nicamente 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 n2 m. De forma analoga se puede
calcular el producto BQ con B m n tambien en mn operaciones.
Ejercicio 9.13 Implementa la factorizacion QR utilizando las indicaciones previas. Compara
con algun ejemplo la reduccion del tiempo de calculo.
Factorizaci
on QR con matrices de Givens
IV
LECCION
aqq
,
cos = p 2
aqq + a2pq
r
do
rra
Bo
sin = p
Notemos que las matrices Rpq ()A y A solo difieren en las filas p y q.
El metodo consistira entonces en ir transformado la matriz original (de tama
no n) en
una matriz triangular superior del siguiente modo: en primer lugar se hacen ceros en las
posiciones de la primera columna por debajo del elemento de la diagonal multiplicando
por n 1 matrices como (9.2), de modo que
...
0 ...
% QRGIVENS
%
% [Q,R]=QRGIVENS(A) Calcula Q ortogonal y R triangular
%
superior cumpliendo A=QR
%
% Utiliza el algoritmo basado en matrices de Givens
%
function [q,r]=QRGivens(a)
n=length(a);
q=eye(n);
for j=1:n-1
for i=j+1:n
if a(i,j)~=0
aux=sqrt(a(j,j)^2+a(i,j)^2);
c=a(j,j)/aux;
189
IV
LECCION
r
do
rra
Bo
20
21
22
23
24
25
26
27
28
29
30
end
end
q=q;
r=a;
return
Factorizaci
on QR con Matlab
En Matlab podemos obtener una factorizacion QR mediante el comando qr. Por ejemplo,
>> a=rand(4);
>> [q,r]=qr(a)
q =
-0.3685
-0.7715
-0.3858
-0.3466
0.7147
-0.4099
-0.2967
0.4829
-0.2407
0.4388
-0.8391
0.2131
-0.5436
-0.2102
0.2429
0.7754
-1.0282
0.6539
0
0
-0.7184
0.5720
-0.6839
0
-1.1168
0.3849
-0.4834
-0.0530
r =
-1.2078
0
0
0
190
IV
LECCION
q2 =
-0.6815
-0.6680
-0.2989
0.6346
-0.7428
0.2132
-0.3644
-0.0444
0.9302
r
do
rra
Bo
r2 =
-1.3726
0
0
-0.7532
0.5993
0
R1 = R(1 : m, :),
Este sistema de ecuaciones recibe el nombre de ecuaciones normales. Se prueba entonces que, bajo la hipotesis de que las columnas de A sean linealmente independientes,
la solucion anterior cumple
kb Axk2 < kb Azk2 ,
z Rn .
R1 x = Q>
1 b.
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
IV
LECCION
r
do
rra
Bo
Otra aplicacion de la factorizacion QR es el calculo del rango de una matriz. Concretamente, el rango de A coincide con el n
umero de filas de R distintas de cero. Asumiendo
que estamos trabajando con un rango numerico, examinaremos cuantas filas son claramente 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, numericamente, 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
11 13
A=
22 26
9.5.2.
M
etodo QR de Francis
A = A1 matriz inicial
for k=1:mmax
Descomponer Ak = Qk Rk
Calcular Ak+1 := Rk Qk
Dk+1 =diag(Ak+1 )
n
n1 X
n
X
X
(k+1) 2
(k+1)
|aii |2 )
if (
|aij | < eps
j=1 i=j+1
i=1
return
end
end
IV
LECCION
Ejercicio 9.19 Que modificacion haras del algoritmo anterior para que tambien devolviera
los vectores propios?.
Ejercicio 9.20 Implementa el algoritmo QR de Francis utilizando cualquiera de las descomposiciones QR vistas.
r
do
rra
Bo
Si A no es simetrica pero es diagonalizable, el metodo converge, tambien bajo condiciones muy generales a una matriz quasitriangular, es decir, a una matriz de la forma
D1 . . . . . . . . . . . .
D2 . . . . . . . .
T =
,
donde Dj es 1 1 o 2 2.
.
.
.. ..
Dm
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 Dj de
orden 2. En particular, si la matriz tiene u
nicamente 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.
9.5.3.
Comentarios adicionales
T
ecnicas de aceleraci
on
...
...
.
H=
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
IV
LECCION
r
do
rra
Bo
Trabajar sobre una matriz de Hessemberg tiene importantes ventajas. En primer lugar,
la factorizacion QR es mucho mas economica: si utilizamos matrices de Givens u
nicamente
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 traslaci
on. Utilizando la notacion de la Seccion 9.5.2, se tratara de en
lugar de factorizar la matriz Am , descomponer
Am m I = Qm Rm ,
Am+1 := m I + Rm Qm .
Es trivial comprobar que Am y Am+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
Bn1 0
Am
.
0
n
En este caso, n es un valor propio, se guarda en memoria y se empieza a trabajar con Bn1
que es de orden n 1. Este tipo de tecnica se denomina deflacci
on. Existen algoritmos
que permiten seguir la pista a los vectores propios, relacionando los vectores propios de
Am con los de Bn1 .
Ap
endice: reducci
on a la forma de Hessenberg
b>
A=
A1
1
0
.
H :=
0 H1
194
IV
LECCION
Entonces
HAH =
b> H 1
H1 c
H 1 A1 H 1
r
do
rra
Bo
Nota. En Matlab la funcion hess reduce una matriz a forma de Hessenberg. Puede
utilizarse de las siguientes maneras:
>>H=hess(A);
%H es una matriz de Hessenberg semejante a A
>>[P,H] = hess(A); %Ademas P ortogonal tal que A = P*H*P
9.6.
Para determinar todos los valores y vectores propios de una matriz podemos utilizar
el comando eig. Esta funcion es de hecho una compilacion de funciones que se aplican
dependiendo de la forma de la matriz. Este comando tambien sirve para resolver el problema de valores propios generalizados: dadas dos matrices cuadradas A y B encontrar
escalares y vectores v 6= 0 tales que
Av = Bv.
13
195
IV
LECCION
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 calcula 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.
r
do
rra
Bo
9.7.
Notas hist
oricas15
El problema del calculo numerico de los valores propios de una matriz puede remontarse 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
deflaccion 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 U L. Se
trataba de aplicar de forma simultanea el metodo de potencias y para evitar que todas las direcciones degeneran hacia la direccion dominante, se haca una descomposicion
LU que aseguraba la independencia de los vectores. Desgraciadamente, el metodo era
inestable numericamente salvo para algunos casos particulares. J. G. F. Francis y V. N.
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 deflacion y estrategias de desplazamiento.
El calculo estable de la descomposicion QR tuvo que esperar a los a
nos 1950, cuando
Wallace Givens y Alstom S. Householder propusieron sus metodos en 1954 y 1958 respectivamente. 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.
Google16
Google17 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 Pageranktm . Este sistema eval
ua las paginas web seg
un el n
umero de enlaces
que permiten llegar a ella.
15
196
IV
LECCION
r
do
rra
Bo
Figura 9.2: Una web muy sencilla.
Esta probabilidad es la que se utiliza para evaluar las paginas. A priori hay dos formas
de llegar a una pagina:
i) a traves de un enlace desde otra pagina (probabilidad p),
0 0 1 0 0 0
1 0 0 1 1 0
0 1 0 0 0 0
G = (gij ) =
0 0 1 0 0 0
0 0 0 1 0 1
0 0 0 1 0 0
donde
gij = 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(n2 ) que se correspondera con una matriz llena.
Sea
cj =
n
X
gij
(n
umero de enlaces que salen de j).
i=1
197
IV
LECCION
9.8 Google
Entonces la probabilidad de llegar a i si estamos en j es
gij
cj
|{z}
1p
n }
| {z
Tecleando la direccion
r
do
rra
Bo
Esta informacion se puede recoger en la matriz A de tama
no n n cuyas componentes
vienen dadas por
gij 1 p
aij = p
+
.
cj
n
e + 1 p en e>
pG
n
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
e + 1 p en e> x = p G
Ax = p Gx
n
n
x./c
|{z}
1p
n
(en x)
| {z }
en .
Prod. escalar
(0)
(0)
(1)
aij xj =: xi
j=1
y por tanto
(1)
x1
(1)
x2
(1)
xn
(0)
x1
a11 a12 a1n
(0)
..................
(0)
an1 an2 ann
xn
= Ax0 .
(m)
(m)
>
xm = (x1 , x2 , . . . , x(m)
n )
IV
LECCION
Proposici
on 9.5 Existe un unico x de componentes no negativas tal que
x = Ax,
>
x en =
n
X
xi = 1.
i=1
r
do
rra
Bo
El resultado dice, en palabras llanas, que la probabilidad de que estemos en una pagina
web (esto es, x), despues de navegar una cantidad suficiente de tiempo18 es independiente
de como hemos empezado (es decir, de x0 ). Matematicamente hablando, dice que existe
un u
nico vector propio asociado al valor propio 1 de componentes positivas con kxk1 = 1
y que ademas la sucesion xm converge a x independientemente del vector inicial escogido.
Observa que la sucesion de vectores xm son el resultado de aplicar el metodo de potencias
a la matriz A (sin normalizar respecto de k k2 ) y que por su forma particular19 siempre
que se parta de un vector inicial cumpliendo los requisitos de la proposicion tendremos
que xm 0 y kxm k1 = 1.
Aqu vemos una forma completamente directa de programar este calculo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%
%
%
%
%
%
PAGERANK(G)
function y=pagerank(g)
p=0.85;
% probabilidad de llegar a traves de un enlace
eps=0.0001; % criterio de parada
nmax=1000; % numero maximo de iteraciones
n=length(g);
x=1/n*ones(n,1); % vector inicial
for j=1:nmax
y=producto(g,x,p);
if norm(x-y)<eps
disp(convergencia)
return
end
x=y;
x=x/sum(x);
end
18
199
IV
LECCION
9.8 Google
disp(Convergencia no alcanzada)
return
% Y= PRODUCTO(G,X,P)
% calcula el producto a*x
% notese que la matriz no llega a construirse
r
do
rra
Bo
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function y=producto(g,x,p)
c=sum(g);
c=c(:);
x=x(:);
n=length(x);
en=ones(n,1);
y=p*g*(x./c)+(1-p)/n*en*(en*x);
return
Nota. Aplicando la funcion pagerank al ejemplo de la Figura 9.2, obtenemos este resultado
x = [0.1370 0.2806 0.2636 0.1370 0.1181 0.0638]>
Por orden de preferencia nos encontramos los nodos
2,
3,
1 y 4,
5,
6.
A pesar de que el nodo 3 solo se enlaza a traves del 2, la importancia de este nodo influye
en su buena puntuacion.
En problemas reales, las matrices son enormes, en Febrero de 2006 google haba catalogado 9.680.000.000 paginas20 . Despues de la evaluacion hay que hacer un filtrado de
acuerdo a las palabras clave con las que se hace la b
usqueda.
Es posible hacer subir la evaluacion de una pagina mediante la creacion de paginas web
que se enlacen entre ellas y especialmente sobre una. Este tipo de tecnicas, denominada
google bombing ha sido utilizado reiteradas veces por objetivos de diversa naturaleza,
economicos, polticos, de protesta.... Los algoritmos del buscador tratan de detectar este
tipo de trampas y reconstruir la evaluacion para que sea mas imparcial.
Nota hist
orica
Google fue fundado en 1995 por Sergey Brin y y Larry Page, el primero ingeniero
electrico y el segundo licenciado en matematicas y que contaban entonces con 23 y 24
a
nos. El nombre proviene del n
umero 10100 que, aunque no oficialmente, se llama Googol21
El ambiente desenfadado y el origen matematico del buscador tuvo un curioso reflejo
en la primera oferta p
ublica de acciones que tuvo lugar a principios del 2004. Brin y Page
sacaron al mercado una participacion de la compa
na cuyo valor era 2.718.281.828$, el
n
umero e con 10 cifras decimales22 .
20
Basta hacer la b
usqueda de una palabra inexistente precedida de un - para obtener el n
umero de
paginas catalogadas.
21
As lo denomino el matem
atico Edward Kasner. En ingles existe la palabra goggles que son unas gafas
de natacion (?).
22
Muy pocos se dieron cuenta de este gui
no. Se hizo de nuevo palpable la escasa cultura cientfica
200
IV
LECCION
r
do
rra
Bo
en general y matem
atica en particular del mundo periodstico.
201
IV
LECCION
9.8 Google
r
do
rra
Bo
202
r
do
rra
Bo
Leccion V
203
r
do
rra
Bo
r
do
rra
Bo
Introducci
on
Trataremos en este proyecto uno de los aspectos mas potentes de Matlab: las salidas
graficas. 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 especficos, 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 graficas. 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 grafico.
205
r
do
rra
Bo
r
do
rra
Bo
Captulo 10
Matlab: Salidas gr
aficas 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 manipulacion. Los niveles iniciales son basicos y por tanto faciles de utilizar. El acceso a niveles
finos 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
graficas. 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 suficiente en un 99 % de los casos, y en u
ltima medida, se puede acceder a todos los
aspectos de un dibujo desde la ventana grafica a golpe de raton.
Primer nivel
El primer comando que trataremos es plot. Es una instruccion muy versatil y la mas
indicada para dibujar graficas 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 suficientemente elevado de puntos trazamos
con ello una grafica suave, sin esquinas visibles.
Al ejecutar este comando se abre una ventana, figure en el vocabulario de Matlab,
donde se traza la correspondiente figura.
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
V
LECCION
r
do
rra
Bo
Figura 10.1: Ventana grafica.
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)
azul
verde
rojo
cian
magenta
amarillo
negro
.
o
x
+
*
s
d
v
^
punto
circulo
:
equis
-.
cruz
-estrella
cuadrado
diamante
triangulo (hacia abajo)
triangulo (arriba)
208
linea solida
punteado
punto-linea
linea-linea
V
LECCION
triangulo (izquierda)
triangulo (derecha)
estrella pentagonal
estrella hexagonal
r
do
rra
Bo
La primera columna especifica el color utilizado, la segunda la marca sobre cada punto y
la tercera el patron que siguen las lneas utilizadas para unir los puntos.
Por ejemplo el siguiente fichero script
x=linspace(0,4,100);
y=exp(-x).*cos(2*pi*x);
figure(1); plot(x,y,.)
figure(2); plot(x,y,r-.)
figure(3); plot(x,y,sm--)
figure(4); plot(x,y,hg)
figure(5); plot(x,y,kv:)
>> plot(x1,y1,x2,y2,x3,y3,x4,y4)
mediante el cual dibujaremos y1 vs. x1, y2 vs. x2, etc., o si queremos dar un formato
personalizado a cada dibujo podemos usar
>> plot(x1,y1,r-,x2,y2,b:,x3,y3,m-.,x4,y4,k--)
Esta opcion es mas versatil dado que permite superponer graficas construidas con
diferentes comandos. La superposicion se desconecta con hold off, de forma que
un nuevo dibujo borrara los anteriores.
209
V
LECCION
r
do
rra
Bo
Figura 10.2: Ventana grafica.
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 memorizacion3 . Destacamos entre las mas importantes
color: color de la lnea.
MarkerSize: tama
no de la marca
210
V
LECCION
el estandar RGB4 .
Por ejemplo
r
do
rra
Bo
>>x=0.01:0.2:2; y=sin(x)./x;
>>plot(x,y,o-.,color,[0.2 0.4 0.6],linewidth,2,...
markeredgecolor,k,markerfacecolor,[0.9 0.6 0.4],...
markersize,9)
Ejercicio 10.2 Dibuja las funciones seno y coseno en [2, 2], la primera en rojo y la
segunda en azul. El ancho de lnea debe ser de dos puntos y deben seguir dos estilos diferentes,
a tu eleccion.
Puedes empaquetar las instrucciones en un fichero script. Sera mas comodo para editar y
cambiar lo que desees.
La ventana gr
afica
t=linspace(-2*pi, 2*pi,200);
y1=cos(t);
y2=sin(t);
plot(t,y1,t,y2)
Desde la ventana grafica modifica su aspecto para que tenga el que le habas dado en el
Ejercicio 10.2.
211
V
LECCION
r
do
rra
Bo
Figura 10.3: Edicion de un dibujo.
212
V
LECCION
10.1.2.
Hay una serie de comandos que controlan el entorno donde se despliega la grafica.
Entre los mas elementales (o al menos, mas faciles de utilizar), podemos destacar:
r
do
rra
Bo
hold: hold on permite que sucesivas graficas se vayan solapando; hold off
desconecta esta opcion (es la que esta por defecto).
axis: un comando algo complejo. Puede controlar entre otros detalles el ratio
entre los ejes OX y OY, la parte del dibujo que se muestra por pantalla,
las coordenadas utilizadas, el ajuste del marco al dibujo...
xlim, ylim: especifican los lmites del dibujo. Se puedn utilizar para centrar el
dibujo.
grid: grid on muestra una malla en pantalla; grid off la desconecta.
legend: despliega una leyenda, esto es, un cuadro explicativo sobre las graficas
presentes.
text: a
nade un texto en las coordenadas especificadas.
xlabel, ylabel: a
nade ttulos (etiquetas) a los ejes OX y OY.
title: coloca un ttulo en la cabecera del dibujo.
V
LECCION
r
do
rra
Bo
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.5
exp(-x/3).*cos(x/3)
exp(-x).*cos(x)
exp(-3x)*cos(3x)
exp(-9x).*cos(9x)
0.4
0.3
Eje OY
0.2
0.1
-0.1
-0.2
Eje OX
Nota. En el comando title hemos utilizado los atributos fontname y fontsize para
especificar la fuente y su tama
no utilizada en el ttulo. Otros atributos son
fontweight: los valores posibles son light, normal, demi, bold. Especifica el trazo
de los caracteres, desde fino (light) hasta negrita (bold).
fontangle: sus valores son normal, italic u oblique. Fija la inclinaci
on de la fuente.
rotate: especifica 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
V
LECCION
r
do
rra
Bo
Estos atributos estan disponibles para cualquier comando que se ocupe de desplegar
textos en la pantalla grafica. Por ejemplo, xlabel, ylabel, title,...
Quizas lo mas difcil sea saber que fuentes tenemos instaladas y su correspondiente
nombre. La solucion mas sencilla a esta cuestion es ir a la venta grafica, y editar las
caractersticas del dibujo5 . All podremos ver que fuentes estan a nuestra disposicion y su
nombre correspondiente.
Ejercicio 10.4 En este ejercicio trataremos de visualizar el efecto del comando axis con
diferentes opciones sobre el aspecto final de un dibujo.
Teclea
>> clf
>> x = 0:.025:pi/2;
plot(x,tan(x),-ro)
La funcion tangente presenta una asntota vertical6 en /2. Teclea los siguientes comandos y
observa el aspecto final de la figura.
>>
>>
>>
>>
>>
axis equal
axis image
axis normal
axis([0 pi/2 0 5])
axis tight
10.1.3.
Los comandos get y set permiten acceder y cambiar los atributos de cualquier grafica.
Todo objeto grafico, desde una simple curva hasta la propia ventana donde se despliega
el dibujo tiene asociado un puntero, un handle al que se encuentra enlazado. Los valores
de cada uno de los parametros se pueden visualizar (get) y editar (set) desde la lnea de
comandos o desde una funcion.
Nos limitaremos de momento a dar unas ideas a grandes trazos para el comando plot.
Ejecuta
>> x=0:0.01:pi;
>> h=plot(x,x.*cos(4*x));
La variable h es un puntero que enlaza con el dibujo desplegado sobre la ventana. Ahora
se puede recabar informacion sobre este:
>> get(h,linestyle)
ans =
-
215
V
LECCION
>> get(h,marker)
ans =
r
do
rra
Bo
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 grafica 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 grafico:
>> 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
V
LECCION
r
do
rra
Bo
Parent = [101.001]
Selected = off
SelectionHighlight = on
Tag =
Type = line
UIContextMenu = []
UserData = []
Visible = on
De forma similar
h= legend(x*cos(x));
x=linspace(0,4,1000);
y=x.*log(x);
figure(1);
clf
% borramos
plot(x,y,--,linewidth,3);
h2=gca;
% accedemos al handle de la grafica
set(h2,xtick,[0 0.25 0.5 1 2 4],fontsize,16,ygrid,...
off,xgrid,on,linewidth,2,gridlinestyle,-.)
title(x*log(x),fontangle,oblique,fontname,...
Comic Sans ms ,fontweight,bold,fontsize,20)
que accede a la estructura de la grafica (gca), que esencialmente es el marco donde desplegamos los dibujos. Las lneas 07-08 edita los atributos xtick, que se
nala los puntos
donde se colocan las marcas en el eje OX, la fuente utilizada en el dibujo, activa la malla
u
nicamente en la direccion OX, especifica la anchura de la lnes y el patron que sigue. El
resultado se puede ver en la Figura 10.5.
Todas las propiedades anteriores se pueden modificar mas facilmente en la ventana
grafica. Su manejo es facil e intuitivo (seleccionar, doble click, boton derecho del raton....).
Con helpwin line y helpwin axes obtenemos la informacion de las diferentes opciones para la instruccion plot (y similares) y para la figura.
Finalmente gca y gcf devuelven el puntero al axis y figure utilizado en ese momento
(get current axis y get current figure). Si quieres ver todos sus atributos, ejecuta
>> get(gca), get(gcf)
217
V
LECCION
x log(x)
6
r
do
rra
Bo
4
-1
0 0.25 0.5
Un ejemplo de caractersticas m
as avanzadas
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 fin de cadena de caracteres.
En u
ltima medida, estas caractersticas enlazan con las interfaces graficas de Matlab (gui), donde los objetos graficos pueden ser men
us desplegables, campos de textos,
items,... Matlab dispone de una gua para el desarrollo de interfaces graficos con su tutorial 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
V
LECCION
10.1.4.
El comando subplot
r
do
rra
Bo
define en la figure seis zonas para volcar las salidas graficas dispuestas en 2 3 (dos filas,
tres columnas) y accede a la primera de ellas. La numeracion es la desplegada en la figura
10.6.
x=linspace(0,2*pi,150);
subplot(321)
plot(x,sin(x),linewidth,2);
title(sin(x),fontsize,14)
axis tight
subplot(322)
plot(x,cos(x),linewidth,2);
title(cos(x),fontsize,14)
axis tight
subplot(323)
plot(x,sin(2*x),linewidth,2);
title(sin(2x),fontsize,14)
axis tight
subplot(324)
plot(x,cos(2*x),linewidth,2);
title(cos(2x),fontsize,14)
axis tight
219
V
LECCION
r
do
rra
Bo
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
10.1.5.
Otras salidas gr
aficas
Se
nalaremos a continuacion otros comandos relacionados con dibujos y graficas bidimensionales de manejo similar a plot
plotyy:
polar:
semilogx, semilogy:
loglog:
stem:
stairs:
curvas en polares.
similar a plot pero utilizando, respectivamente, una escala logartmica en el eje OX y en el eje OY.
escala logartmica en ambos ejes.
despliega graficas en forma de barras. Muy apropiada para representar datos y estadsticas (estilo excel).
area:
muestra los datos en una grafica de forma acumulada. El color utilizado se controla mediante el comando colormap, cuyo
funcionamiento veremos mas adelante.
line:
une puntos mediante lneas. Es una instruccion de bajo nivel cuyo funcionamiento es similar a plot. De hecho, plot se
construye a partir de line.
fill:
patch:
Comandos f
aciles de usar
V
LECCION
sin(x)
cos(x)
1
0.5
0.5
-0.5
-0.5
r
do
rra
Bo
0
sin(2x)
cos(2x)
0.5
0.5
-0.5
-0.5
sin(4x)
cos(4x)
0.5
0.5
-0.5
-0.5
ezplot
ezpolar
La ayuda de Matlab es, en nuestra opinion, suficiente para hacernos con su manejo.
10.2.
Gr
aficas en 3D
Comenzaremos con curvas en el espacio para pasar y tratar con mayor profundidad
las superficies en 3D. Hemos decidido incluir en este apartado las instrucciones relativas
a curvas de nivel aunque hablando propiamente son dibujos bidimensionales. Su origen y
su posterior interpretacion nos conducen de nuevo al entorno espacial.
10.2.1.
El comando plot3
Este comando sirve, grosso modo, para dibujar curvas en el espacio. Su manejo es muy
Las opciones son esencialmente las mismas que aparecan en plot. He aqu un ejemplo
sencillo
221
V
LECCION
10.2 Graficas en 3D
r
do
rra
Bo
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
25
eje OZ
20
15
10
5
0
30
20
30
10
20
10
-10
-10
-20
eje OY
-20
-30
-30
eje OX
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 grafico 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
V
LECCION
r
do
rra
Bo
Figura 10.9: Icono para rotar los dibujos.
10.2.2.
El comando surf
Primer nivel
x 1 . . . xn
..
X = ...
.
x 1 . . . xn
y 1 . . . y1
.. .
Y = ...
.
y m . . . ym
Es decir, las m filas 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
0
0.3300
0.3300
0.3300
0.6700
0.6700
0.6700
1.0000
1.0000
1.0000
223
V
LECCION
10.2 Graficas en 3D
Y =
-1
0
1
-1
0
1
-1
0
1
r
do
rra
Bo
-1
0
1
f (x1 , y1 ) . . . f (xn , y1 )
..
..
Z = f (X, Y) =
.
.
.
f (x1 , ym ) . . . f (xn , ym )
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)
V
LECCION
r
do
rra
Bo
Figura 10.11: Otro ejemplo de surf.
x=linspace(-1,1,101); y=x;
[X,Y]=meshgrid(x,y);
Z=-X.^2-Y.^2;
Z(sqrt(X.^2+Y.^2)<0.5)=nan;
surf(X,Y,Z)
hace que los puntos situados dentro del crculo de radio 1/ 2 (que es donde la expresion
logica es 1), tomen como valor NaN. De todos modos se observa la deficiente aproximacion
de los cuadrados, propios de surf, del crculo interior. Al final de esta leccion veremos
una forma mas elaborada para trabajar con superficies definidas sobre conjuntos mas
generales.
Comandos del entorno 3D
Nos limitaremos a hablar de cinco comandos que controlan las propiedades del entorno
3D, aunque estos no son los u
nicos disponibles en Matlab:
225
V
LECCION
10.2 Graficas en 3D
r
do
rra
Bo
Figura 10.12: Utilizacion de nan en un dibujo.
colorbar:
colormap:
bone
hot
spring
colorcube
hsv
summer
cool
jet
white
copper
lines
winter
flag
pink
default
daspect:
controla la relacion entre los ejes del dibujo. Baste decir que
daspect([1 1 1])
fija 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
V
LECCION
pbaspect:
view:
r
do
rra
Bo
MeshStyle tiene tres opciones posibles both (por defecto), row y column.
Especifica como despliega la red: entera, solo las filas o solo
columnas, respectivamente.
Marker: indica que marca colocar en cada punto del dibujo. Sigue el mismo formato que plot (por defecto no coloca ninguna marca).
MarkerEdgeColor
MarkerFaceColor: igual que en plot.
MarkerSize
Por ejemplo, la Figura 10.13 se obtiene con
7
227
V
LECCION
10.2 Graficas en 3D
r
do
rra
Bo
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)
Ejercicio 10.5 Observa las diferencias entre estas dos salidas de la misma superficie
>>
>>
>>
>>
>>
>>
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
V
LECCION
r
do
rra
Bo
interp
AlphaData = [1]
AlphaDataMapping = scaled
CData = [ (60 by 60) double
CDataMapping = scaled
EdgeAlpha = [1]
EdgeColor = none
EraseMode = normal
FaceAlpha = [1]
FaceColor = interp
LineStyle = LineWidth = [0.5]
Marker = none
MarkerEdgeColor = auto
MarkerFaceColor = none
MarkerSize = [6]
MeshStyle = both
XData = [ (60 by 60) double
YData = [ (60 by 60) double
ZData = [ (60 by 60) double
FaceLighting = flat
EdgeLighting = none
................
................
array]
array]
array]
array]
Observaramos as algunas de las opciones que hemos comentado y otras muchas mas que
no hemos estudiado.
Para cambiar una propiedad utilizamos de nuevo el comando set:
>> set(h, edgecolor,[0.2 0 0],linewidth,1);
>> set(h, facaalpha,.5);
229
V
LECCION
10.2 Graficas en 3D
Mallados especiales
Con sphere podemos obtener el mallado de una esfera. Puede utilizarse para dibujar
bien una esfera o incluso funciones definidas sobre una superficie esferica. Por ejemplo,
mediante el siguiente fichero script hemos obtenido las representaciones graficas de la
Figura 10.14.
r
do
rra
Bo
[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]
Comandos similares son ellipsoid (elipsoides) y cylinder (cilindros). Son algo mas
flexibles de lo que pueda parecer. As, y aunque parezca paradojico,
230
V
LECCION
>> cylinder(0:0.1:1,40)
dibuja un cono.
r
do
rra
Bo
Ejercicio 10.6 Lee bien la ayuda de cylinder. Podras dibujar una semiesfera utilizando
este comando?.
10.2.3.
Otros comandos
Proporciona un dibujo bidimensional de una superficie vista desde arriba. Es equivalente a dibujar primero la superficie con la orden surf y posteriormente cambiar el punto
de vista mediante view(0,90). Puedes ver un ejemplo en la Figura 10.15.
contour y contourf
Despliegan las lneas de nivel del dibujo. Propiamente generan una grafica en 2D. La
diferencia entre ellas es que la primera instruccion solo traza las curvas de nivel mientras
que la segunda colorea el espacio entre ellas.
Es posible a
nadir un texto sobre cada lnea de nivel utilizando clabel. Para ello basta
hacer como en el ejemplo siguiente
231
V
LECCION
10.2 Graficas en 3D
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
r
do
rra
Bo
>>
>>
>>
>>
>>
>>
>>
>>
>>
0.
04.
2
8
0.
6
.
0
-1
-0.5
6
0.
0. 6
0.2
9
.5
-0
9
99
0.2
1.5
0.6
-1
-0.5
-0.4
-0.6
-0.8
0.4
0.2
0
-0.2
-0.4
0 .6
0.2
-0.6
-0.2
-1.5
-0.2
0.6
0.2 -0.2
6
0.
-0
.2
2
-0.0.2
-2
-2
0
2 .4
-0. -0.6
-0 . 8
-0
0.5
1
-0
.8
0 0.4
- 0.06.40.2 0.2 0.6
0.8
0.6
0.4
0.4
-0 0
-0 .2
-0.4
-0 .6
.8
-1.5
0.6
0.2
00.2.2
.8
-0
0.20
.6 4 - 0.02.4
-0-0.
-2
-2
-1
0 .4
0.6
0.8
0.2
0.
2
-1
-0.2
-0
.
-02
.5
99 0.
99 2
.4
8
0. .6 0
0
.
0.2 -0
-0 .6 .8
-0 -0
0.60.4
0.8
-0
.2
-0 -0.-0. 0
.8 6 4
0.5
1.5
-0.8
surfc y surfl
V
LECCION
10.2.4.
Comandos f
aciles de usar
Los comandos
r
do
rra
Bo
ezplot3
ezcontour
ezmesh
ezcontourf
ezmeshc
ezsurf
ezsurfc
10.3.
Campos vectoriales
2.5
1.5
0.5
-0.5
-1
-1.5
-2
-2.5
-2.5
-2
-1.5
-1
-0.5
0.5
1.5
2.5
%
%
%
%
233
V
LECCION
% calculamos vectores
r
do
rra
Bo
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 fin hemos utilizado una variable (en realidad una matriz)
logica ind que toma valor uno u
nicamente si el punto correspondiente (X,Y) esta cerca
del origen.
Una vez salvada esta dificultad, 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)
Ejercicio 10.8 Utilizando el comando quiver3, dibuja el campo de velocidades que a cada
punto le asigna el vector (velocidad) dado por
x
y
z
p
, p
, p
)
2
2
2
2
2
2
2
x +y +z
x +y +z
x + y2 + z2
(Ayuda: el comando meshgrid es tambien el apropiado para construir mallas en 3D)
10.4.
Los comandos que hemos estudiado a lo largo de la seccion precedente estan pensados
para dibujar superficies definidas esencialmente sobre una cuadrcula. Aunque en muchos
casos esto es suficiente, en otras muchas ocasiones se trabaja con funciones definidas 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 superficie solapando diferentes planos definidos sobre cada triangulo9 . Los
resultados que se obtienen son bastante satisfactorios, puesto que los triangulos son mas
flexibles que los cuadrilateros a la hora de adaptarse a los dominios.
Esta division en triangulos de un dominio se denomina triangulaci
on o mallado del
dominio. Se dice que un mallado se hace mas fino 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
234
V
LECCION
r
do
rra
Bo
Figura 10.18: Triangulacion no conforme.
se admite que un lado de un triangulo pueda ser parte de dos lados de dos triangulos
diferentes (vease la Figura 10.18). Por otro lado, una familia de triangulaciones se dice
regular si los triangulos no se aplanan, es decir, los angulos de los triangulos no se hacen
muy peque
nos.
La siguiente cuestion es como almacenar la informacion de una triangulacion. Si
optaramos por guardar cada triangulo, con sus correspondientes vertices, guardaramos
informacion redundante. Por ejemplo, un vertice compartido por 6 triangulos sera almacenado 6 veces.
En lugar de ello se opta por una estructura mas elaborada pero mas economica. Se
empieza almacenando las dos coordenadas de los vertices en dos vectores que denotaremos
por x e y. En segundo lugar, apuntamos los vertices que corresponden a cada triangulo.
Esto se hace mediante una matriz, que llamaremos en lo que sigue t, de tres columnas y
n
umero de filas igual al n
umero de triangulos. Para saber los vertices que corresponden
al triangulo i basta leer la correspondiente fila de t y sus coordenadas seran
[x(t(i,1)),y(t(i,1))],
[x(t(i,2)),y(t(i,2))],
[x(t(i,3)),y(t(i,3))]
3
2
5
6
1
4
9
8
7
11
16
15
21
20
14
17
21
17
14
20
235
V
LECCION
0.6
0.4
11
r
do
rra
Bo
12
0.2
-0.2
-0.4
-0.6
25
17
20
12
19
20
16
15
26
13
14
10
15
18 22 13
18
24 14
16 27 23
9
19
21
7 21
5
17
28
-0.5
11
10
0.5
10
12
7
11
13
15
9
13
13
16
14
15
13
18
17
18
16
19
19
20
15
15
20
20
16
19
17
17
19
18
21
19
20
20
21
21
coordenadas:
x
236
V
LECCION
r
do
rra
Bo
0.5033
0.5033
-0.4967
-0.4967
0.0033
0.0033
0.5033
-0.4967
-0.2523
0.2590
0.2590
-0.2523
-0.0716
0.2924
0.2820
-0.2806
-0.2641
0.1204
0.0838
0.0113
-0.1031
La informacion anterior es suficiente para construir la malla, la triangulacion del dominio. Si ademas se desea construir una superficie definida sobre ese dominio, basta a
nadir
un vector adicional z de forma que z(j) sea el valor de la funcion en el nodo j.
V
LECCION
Esta
es una forma ya estandar de definir y trabajar con una triangulacion que tambien
sigue Matlab10 con los comandos trimesh y trisurf.
El primero despliega la malla triangular especificada por t, (la matriz conteniendo los
triangulos), x e y (que dan las coordenadas de los vertices),
r
do
rra
Bo
trimesh(t,x,y)
Nota. Un tema nada trivial es la construccion de un mallado sobre un dominio (poligonal) 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 considerable, con los triangulos lo mas regulares posibles (sin deformar, alargar, en demasa los
triangulos).
Posteriormente, se trata de refinar 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 finitos, probablemente del metodo11
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 refinamiento puedes consultar refinemesh. .
Existe otra posibilidad mas visual, y por tanto mas amigable para empezar a trabajar.
Teclea
>> pdetool
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
r
do
rra
Bo
Captulo 11
Interpolaci
on. Curvas B
ezier
11.1.
Interpolaci
on polin
omica
11.1.1.
Interpolaci
on polin
omica de Lagrange
j = 0, . . . , n.
V
LECCION
x 10
-9
r
do
rra
Bo
3
-1
7.994
z6-46*z5+ 884*z4-9088*z3+52736*z2-163840*z+212992
(z-8)4*(4+(z-8)*(2+(z-8))
7.996
7.998
8.002
8.004
8.006
Como aproxima pn a esta funcion f ?. Este punto es crucial ya que se trata del error
que podemos esperar de nuestra aproximacion.
Cual es la mejor forma de evaluar un polinomio?. Es decir, nos interesa el polinomio escrito en la manera tradicional o simplemente poder evaluarlo de forma facil,
rapida y estable numericamente?
11.1.2.
V
LECCION
j = 0, . . . , n,
r
do
rra
Bo
1 x x2 xn
1
1
1
1 x2 x22 xn2
..................
1 xn x2n xnn
a0
a1
a2
..
.
an
y0
y1
y2
..
.
yn
(11.1)
Y x xi
(x x0 ) (x xj1 )(x xj+1 ) (x xn )
=
.
(xj x0 ) (xj xj1 )(xj xj+1 ) (xj xn ) i6=j xj xi
Lj (xi ) :=
1,
0,
i = j,
i 6= j.
Por tanto,
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 f
ormula de Lagrange del polinomio de interpolaci
on y la base del espacio de polinomios Pn formada por {Lj }j se denomina base
de Lagrange del problema de interpolaci
on.
Ejercicio 11.1 Programar una funcion que evalue el polinomio de interpolacion segun la
formula de Lagrange en un conjunto de puntos.
1
241
V
LECCION
LAGRANGEP
Y=LAGRANGEP(X0,Y0,X)
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function y=lagrangep(x0,y0,x)
Hemos testado el programa anterior para interpolar la funcion exp(sen(6x)) en [0, ]
en diversos puntos uniformemente distribuidos (a igual distancia). El resultado, junto con
el error cometido se muestra en la Figura 11.2.
Ejercicio 11.2 Implementa la construccion del polinomio de interpolacion mediante la resolucion directa del sistema dado en (11.1). Que observas cuando el grado del polinomio
crece?.
11.1.3.
F
ormula de Newton
242
V
LECCION
exp(-x).*sin(6.*x)
polinomio de grado 5
polinomio de grado 9
polinomio de grado 13
1.5
1
r
do
rra
Bo
0.5
0
-0.5
-1
0.5
1.5
2.5
3.5
Error
1.5
1
0.5
0
-0.5
polinomio de grado 5
polinomio de grado 9
polinomio de grado 13
-1
-1.5
0.5
1.5
2.5
3.5
Observa que la formula de Lagrange se basa en tomar como base de Pn la dada por
{L0 (x), L1 (x), . . . , Ln (x)}.
En esta base, las coordenadas del polinomio de interpolacion son simplemente los valores
que toma la funcion en los puntos donde se interpola. Es decir, no es necesario resolver
ning
un sistema de ecuaciones lineales (la matriz del sistema sera la matriz identidad).
El precio que se paga como contrapartida es una evaluacion mas cara del polinomio de
interpolacion.
Podemos explorar otras bases que, aumentando el costo de la resolucion del sistema,
ofrezcan formulas del polinomio de interpolacion cuya evaluacion sea menos costosa.
Planteamos as utilizar la base
{1, (x x0 ), (x x1 )(x x0 ), . . . , (x xn1 )(x xn2 ) (x x0 )}.
Es inmediato probar que es una base de los polinomios de grado n. Dicho de otra forma,
cualquier polinomio de grado n se puede escribir (de forma u
nica) como
0 + 1 (x x0 ) + . . . + n (x xn1 )(x xn2 ) (x x0 ).
(11.2)
Ademas el sistema lineal que hay que resolver para obtener los coeficientes j es ahora triangular superior, por lo que su resolucion es practicamente directa en O(n2 ) operaciones.
243
V
LECCION
A
un es mas, si pn (x) interpola a f en n + 1 puntos, a
nadir un punto mas (xn+1 , yn+1 ) es
simplemente corregir el polinomio anterior en la forma siguiente
pn+1 (x) = pn (x) + n+1 (x x0 ) (x xn ),
donde
r
do
rra
Bo
yn+1 pn (xn+1 )
.
(xn+1 xn )(xn+1 xn1 ) (xn+1 x0 )
(11.3)
n+1 =
(11.4)
j = 0, . . . , n.
f [xk ] + f [xk , xk+1 ](x xk ) + . . . + f [xk , xk+1 , . . . , xk+m ](x xk ) (x xk+m1 ). (11.5)
La identidad (11.3) justifica el uso de esta notacion es correcta. Esto es, el coeficiente
de (x xk ) (x xk+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 [xk , xk+1 , . . . , xk+r ] son todava simples coeficientes del polinomio de cuyo calculo
nos ocupamos a continuacion. Es inmediato comprobar que si
n
o
p
interpola
en
(x
,
f
(x
)),
(x
,
f
(x
)),
.
.
.
,
(x
,
f
(x
))
,
n
0
0
1
1
n
n
n
o
qn interpola en (x1 , f (x1 )), (x2 , f (x2 )), . . . , (xn+1 , f (xn+1 )) ,
entonces
x xn+1
(pn (x) qn (x)),
x0 xn+1
(11.6)
f [x1 , . . . , xn+1 ]
f [x0 , . . . , xn+1 ].
f [x0 , x1 . . . , xn+1 ] =
(11.7)
V
LECCION
Como
f [xj ] = f (xj )
r
do
rra
Bo
(simplemente porque el polinomio de grado 0 que pasa por (xj , f (xj )) es la constante
f (xj )), obtenemos una forma recursiva de calcular los coeficientes del polinomio de interpolacion. El algoritmo resultante se puede representar esquematicamente mediante el
diagrama de la Figura 11.3.
En la literatura, f [xk , . . . , xk+r ] recibe el nombre de diferencia dividida de order
r, mientras que la forma de escribir el polinomio expuesta en (11.2) y (11.5) recibe el
nombre de f
ormula de Newton3 .
Obviamente, a partir de la formula de Newton podemos expresar el polinomio que
interpola a f en los puntos {x0 , . . . , xn } en la forma
f [x0 ] + (x x0 ) f [x0 , x1 ] + (x x1 ) f [x0 , x1 , x2 ] + (x x2 ) . . .
(11.8)
+(x xn1 )f [x0 , x1 , . . . , xn ]
,
que es mucho mas apropiada desde el punto de vista computacional que la forma clasica.
En forma de pseudocodigo podemos proceder del siguiente modo para evaluar el polinomio de interpolacion utilizando la formula de Newton:
Diferencias divididas
01
02
03
04
05
06
07
08
09
10
11
12
13
14
x0 , y0 % datos
n = length(x0 ) 1
D(:, 0) = y0 ;
for j=1:n
for i=0:n-j
D(i + 1, j 1) D(i, j 1)
D(i, j) =
x0 (i + j) x0 (i)
end
end
% Evaluacion del polinomio
y=D(0,n)
for i=n-1:-1:0
y = (x x0 (i)) y + D(0, i)
end
245
V
LECCION
Orden 0
x0
Orden 1
Orden 2
Orden 3
/ f [x0 , x1 , x2 ]
/ f [x0 , x1 , x2 , x3 ]
/ f [x0 , x1 ]
6
6
m
m
ll6
m
m
lll
mmm
mmm
l
m
m
l
m
m
lll
mmm
mmm
lll
mmm
mmm
/ f [x1 , x2 ]
/ f [x1 , x2 , x3 ]
f (x1 ) = f [x1 ]
6
6
m
mm
mmm
mmm
mmm
m
m
m
m
mm
mm
mmm
mmm
/ f [x2 , x3 ]
f (x2 ) = f [x2 ]
m6
m
m
mmm
mmm
m
m
mm
f (x0 ) = f [x0 ]
r
do
rra
Bo
x1
x2
x3
f (x3 ) = f [x3 ]
Soluci
on. Nuestra intencion es, si no se especifican 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
02
03
04
05
06
07
08
09
10
11
12
13
% NEWTONP
%
% Y= NEWTONP(X0,Y0)
%
%
% Y= NEWTONP(X0,Y0,X)
%
function y=newtonp(x0,y0,varargin)
V
LECCION
return
end
if nargin>2
x=varargin{1};
% evaluamos x
else
syms x;
% x es una variable simbolica
end
% calculo de las diferencias divididas
D=zeros(n+1);
% matriz n+1 x n+1 de ceros
D(:,1)=y0.;
for j=2:n+1
for i=1:n-j+2
D(i,j)=(D(i+1,j-1)-D(i,j-1))/(x0(i+j-1)-x0(i));
end
end
% evaluacion del polinomio
D=D(1,:);
% tomamos las diferencias que vamos a usar
y=x.^0.*D(n+1); % asi y tiene la longitud de x
for i=n:-1:1
y=(x-x0(i)).*y+D(i);
end
return
r
do
rra
Bo
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Ejercicio 11.4 El bucle interno en las lneas 25-27 se puede vectorizar. Hazlo.
Un analisis mas detenido muestra que no es necesario definir 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 modificando las lneas 03-08 del algoritmo como sigue
Modificaci
on
03
04
05
06
07
08
D = y0 ;
for j=1:n
for i=n:-1:j
D(i) D(i 1)
D(i) =
x0 (i) x0 (i j)
end
end
247
V
LECCION
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
atr
as. Con esta modificacion
D(i) =f [x0 , x1 , . . . , xi ].
r
do
rra
Bo
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 Modificar los algoritmos anteriores para trabajar con las diferencias regresivas.
Interpolaci
on en Matlab
X
i
248
(p(xi ) yi )2 .
V
LECCION
Ejercicio 11.8 Interpola la funcion cos(8x) en [0, 1] con 20,40, 80 y 160 puntos utilizando
el comando polyfit y las funciones lagrangep y newtonp y dibuja el resultado. Que observas?.
11.1.4.
An
alisis del error de interpolaci
on
r
do
rra
Bo
El error entre la funcion y el polinomio de interpolacion se puede estudiar utilizando algunas propiedades de las diferencias divididas que detallaremos mas adelante. En
cualquier caso, el resultado relevante es el siguiente: si f es la funcion regular que interpolamos en {x0 , x1 , . . . , xn } [a, b], entonces el error en cada punto se puede escribir
f (x) pn (x) =
1
f (n+1) (x ) (x x0 )(x x1 ) (x xn )
|
{z
}
(n + 1)!
(11.10)
n (x)
donde x [a, b] depende de x. Vemos que hay varias contribuciones al error final:
el factor 1/(n + 1)! que tiende rapidamente a 0,
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.
5
on anterior es falsa. Uno de los primeros (conDesafortunadamente , la conclusi
6
tra)ejemplos lo encontro Carl Runge a finales del siglo XIX7 . Consista en interpolar la
funcion
1
f (x) =
1 + 25x2
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 terminos8
Que eleccion de los nodos {x0 , x1 , . . . , xn } hace que maxx |n (x)| sea
mnimo?.
5
Y contraintuitivamente. C
omo 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 alem
an de finales del siglo XIX. Tambien es conocido por ser codesarrollador del Metodo
Runge-Kutta para la resoluci
on de problemas de valor inicial.
7
Este fue el siglo de la fundamentaci
on 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 mostr
o 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 infinito de maximos y mnimos
locales. Tambien se construyeron curvas que rellenaban el plano, curvas cerradas que englobando una area
finita tenan una longitud infinita (fractales)... Algunas de estas construcciones, originarias esencialmente
en las Matem
aticas puras han encontrado en el siglo XX aplicaciones a problemas de ndole esencialmente
practico.
8
Un problema min-max: minimizar un maximo.
249
V
LECCION
2
1.5
1
0.5
0
r
do
rra
Bo
2
1./(1+25.*x. )
polinomio de grado 5
polinomio de grado 10
polinomio de grado 15
polinomio de grado 20
-0.5
-1
-1.5
-2
-1
-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
Error
4
3
2
1
0
-1
polinomio de grado 5
polinomio de grado 10
polinomio de grado 15
polinomio de grado 20
-2
-3
-4
-1
-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
Este
es un problema clasico que fue resuelto por Pafnuty Lvovich Chebyshev9 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 maxx[a,b] |wn (x)| es la dada por los puntos
a+b ba
k
xk :=
+
cos
+
,
2
2
2n + 2 n + 1
k = 0, . . . , n.
(11.11)
Matematico ruso del siglo XIX. Estos polinomios surgieron en sus estudios en aproximacion de funciones por polinomios. Chebyshev hizo tambien importantes contribuciones en Teora de la Probabilidad.
10
Dicho de otra manera, es m
as difcil dar con un ejemplo para el que esta disposicion de nodos de un
polinomio interpolante que no converja a la funcion original.
250
V
LECCION
r
do
rra
Bo
1.5
1
0.5
0
1./(1+25.*x.2)
polinomio de grado 5
polinomio de grado 10
polinomio de grado 15
polinomio de grado 20
-0.5
-1
-1.5
-2
-1
-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
Error
4
3
2
1
0
-1
polinomio de grado 5
polinomio de grado 10
polinomio de grado 15
polinomio de grado 20
-2
-3
-4
-1
-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
Ejercicio 11.9 Elege un intervalo arbitrario [a, b] y crea un fichero script que muestre la
disposicion de los puntos dados por (11.11). Dibuja los puntos obtenidos para diferentes
valores de n. Dibuja tambien el polinomio n (x). A que funcion te recuerda?.
Ejercicio 11.10 (teorico) Se trata de probar una serie de propiedades de las diferencias
divididas de las que finalmente se deduce la estimacion del error del polinomio de interpolacion
dada en (11.10).
(1) Prueba que f (j) (x) p(j) (x) se anula en n + 1 j puntos para j = 0, . . . , n + 1.
(2) Utilizando (1), prueba que existe tal que
f [x0 , . . . , xn ] =
f (n) ()
.
n!
V
LECCION
(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 0 (c) = 0.
Aplicando este resultado, concluimos que existe j (xj , xj+1 ) (j = 0, . . . , n 1) tal que
r
do
rra
Bo
f 0 (j ) p0 (j ) = 0.
Se puede aplicar el mismo resultado para probar que existen n 2 puntos tales que f 00 (j ) =
p00 (j ) y as sucesivamente.)
11.2.
Extensiones adicionales
11.2.1.
Interpolaci
on de Hermite
La interpolacion de Hermite incorpora las derivadas como datos adicionales. Concretamente, partimos de este conjunto de datos
..............................
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 := (m0 + 1) + (m1 + 1) + + (mn + 1),
m1 +1
mn +1
m!
f [xi , xi+1 , . . . , xi+m ] :=
si xi = xi+m ,
en otro caso,
V
LECCION
r
do
rra
Bo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
x0 , y0 datos
n = length(x0 ) 1
D = y0 ;
for j=1:n
for i=n:-1:j
if x0 (i) == x0 (i j)
D(i) = D(i)/j
else
D(i) D(i 1)
D(i) =
x0 (i) x0 (i j)
end
end
end
% Evaluacion del polinomio
y=D(n);
for i=n-1:-1:0
y = (x x0 (i)) y + D(i)
end
HERMITEP
V
LECCION
r
do
rra
Bo
11.2.2.
Interpolaci
on de funciones peri
odicas
cos(nx),
n N {0}
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 equidistantes:
2k
,
k = 0, . . . , 2n.
xk =
2n + 1
El problema queda as definido: calcular
p2n+1 (x) :=
n
X
j exp(ijx)
j=n
tal que
n
X
2ijk
.
yk = p2n+1 (xk ) =
j exp
2n + 1
j=n
2i(2n + 1 j)k
2ijk
exp
= exp
.
2n + 1
2n + 1
n
X
j=0
2n
2ijk
2ijk
X
j exp
+
2n+1j exp
.
2n + 1
2n + 1
j=n+1
V
LECCION
Nota. El interpolante converge a la funcion bajo hipotesis mucho mas debiles que en
el caso no periodico. Por ejemplo, basta con que la funcion tenga derivada continua. No
existen por tanto fenomenos como el de Runge para funciones periodicas con condiciones
mnimas de regularidad.
r
do
rra
Bo
11.2.3.
Interpolaci
on polin
omica a trozos
1.5
0.5
-0.5
0
0.2
0.4
0.6
0.8
Como forma de solventar estos problemas se opta por utilizar elementos mas complicados pero que sean mas flexibles.
Uno de los elementos mas populares son los splines. Un spline12 es una funcion
polinomica a trozos que cuenta con cierta regularidad. Es decir, diferentes polinomios
sobre diferentes subintervalos se unen exigiendo ademas que la funcion resultante sea continua y derivable hasta cierto orden. Los representantes mas sencillos son las constantes a
11
Es un smil con lo que sucede si se dobla una vara muy rgida. El problema al utilizar polinomios es
que basta modificar un s
olo dato para que el polinomio se cambie en todo el dominio, en muchas ocasiones
sin ning
un control. Sin embargo, en un interpolante uno debera esperar que la modificacion de un punto
afectara solo al entorno de dicho punto.
12
aceptaremos el anglicismo a partir de ahora.
255
V
LECCION
r
do
rra
Bo
i = 0, . . . , n 1,
i = 0, . . . , n,
esto es, que tome unos valores prefijados en los puntos de interpolacion y de modo que
tanto la funcion sn como sus derivadas primera y segunda sean continuas13 en todo el
intervalo [a, b]. Por tanto tenemos que exigir que
lm s(j)
m s(j)
n (x) = l
n (x),
xx+
j
j = 0, 1, 2.
xxj
Condiciones de periodicidad: si los datos son periodicos se puede imponer s0n (x0 ) =
odico.
s0n (xn ), s00n (x0 ) = s00n (xn ), spline peri
256
V
LECCION
r
do
rra
Bo
Nota. Los splines tienen un origen muy natural. Exista una herramienta de dibujo,
ya anticuada, que reciba el nombre de spline, o trazador en castellano. Consista en
una especie de regla hecha de un material flexible que se moldeaba para hacer coincidir
el trazado por una serie de puntos. La curva as trazada es fsicamente equivalente a
resolver el problema de construir una curva que pase por una serie de puntos y que
minimice la energa elastica. La solucion matematica a este problema es un spline natural
(polinomio c
ubico a trozos con derivada segunda nula en los extremos) lo que justifica su
denominacion.
Se pueden definir splines de mayor grado, siguiendo exactamente la idea anterior, esto
es, pegando polinomios a trozos y dando la mayor regularidad posible.
Splines en Matlab
spline
x0=linspace(0,1,21);
y0=[zeros(1,6) ones(1,15)];
p1=spline(x0,y0);
% spline natural
x=linspace(0,1,200);
h=plot(x0,y0,o,x,ppval(p1,x),r,linewidth,2);
Por otro lado Matlab tiene implementada una serie de funciones para trabajar con
splines mas generales en una toolbox. Al ejecutar splinetool podemos acceder a un
entorno grafico donde testar las capacidades de Matlab en este campo.
Ejercicio 11.14 Se plantea el siguiente problema: dada una serie de puntos en el plano
n
o
(x0 , y0 ), (x1 , y1 ), . . . , (xn , yn )
construir una curva en parametricas
t [0, T ]
(11.12)
tal que
x(tj ) = (xj , yj ).
(11.13)
Una buena eleccion es utilizar splines. Para ello se trata de calcular dos splines cx(t) y cy(t)
que satisfagan, obviamente,
cx(tj ) = xj ,
14
cy(tj ) = yj .
Los splines siguen conservando cierta rigidez pero se adaptan mucho mejor a los datos.
257
V
LECCION
1.2
r
do
rra
Bo
0.8
0.6
0.4
0.2
-0.2
0
0.2
0.4
0.6
0.8
Tenemos as dos problemas de interpolacion desacoplados, esto es, cada uno se resuelve independiente del otro. Queda como cuestion pendiente la eleccion de T en (11.12) y de los
puntos tj en (11.13). Una buena eleccion es tomar
q
hj := (xj+1 xj )2 + (yj+1 yj )2 ,
que coincide con la longitud del segmento que une (xj , yj ) y (xj+1 , yj+1 ), y hacer luego
t0 = 0,
tk := h0 + h1 + . . . + hk1 ,
T = tn .
t [0, T ].
01
02
03
04
05
SPLINE2D
Ejercicio 11.15 El comando ginput permite introducir los puntos a traves del raton. Lee
bien la ayuda y modifica 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
V
LECCION
r
do
rra
Bo
Nota. El comando gtext es similar a ginput. Despliega un texto en el punto seleccionado con el raton.
11.3.
Curvas B
ezier
Las curvas Bezier son curvas en el plano que quedan determinadas por un conjunto
de puntos que marcan su recorrido, aunque estas curvas no pasan necesariamente por
{Bjn }nj=0 son una base de Pn . Dicho de otra forma, cualquier polinomio se puede
escribir como una combinacion de estos polinomios.
259
V
LECCION
Bjn (t) = 1,
t R.
j=0
r
do
rra
Bo
xi = (xi , yi ),
n
X
Bjn (t)xj
j=0
n
X
Bjn (t)xj ,
j=0
n
X
Bjn (t)yj
t [0, 1].
j=0
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0.2
0.4
0.6
0.8
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0.2
0.4
0.6
0.8
0.2
0.4
0.6
0.8
0.2
0.4
0.6
0.8
260
V
LECCION
Ejercicio 11.16 Utilizando el codigo mostrado en el Ejercicio 11.15, programa las curvas
Bezier. Compara con las curvas que definen la interpolacion por splines y la polinomica.
r
do
rra
Bo
Ejercicio 11.17 Implementa la siguiente extension del programa anterior: permitir que el
usuario seleccione puntos y pueda moverlos o borrarlos (por ejemplo, con el boton derecho del
raton) y as comprobar la sensibilidad de la curva al polgono de control.
Una sugerencia: una vez ledos los puntos, y dibujada la correspondiente curva nos situamos
de nuevo en la ventana grafica con ginput y leemos la seleccion hecha por el raton. Ahora
hay tres opciones
Si pulsamos cerca de un punto, entendemos que hemos seleccionado dicho punto.
Si pulsamos lejos de todos los puntos, entendemos que anadimos un nuevo punto.
Llamemoslo y. En este punto hay un tema no trivial: como ordenamos el nuevo punto
y respecto a los puntos anteriores {xj }.
xj
x j+1
x j+2
Una forma de determinar15 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
|u v|
| cos(j )| =
.
kukkvk
15
261
V
LECCION
Escogeremos entonces j para que | cos(j )| sea mnimo, y construiremos la curva Bezier
con puntos
{x1 , . . . , xj , y, xj+1 , . . . , xn }
{xj , xj+1 }.
r
do
rra
Bo
Nota. Las curvas Bezier fueron introducidas por los ingenieros Pierre Bezier y Paul
de Casteljau, que trabajaban entonces en Renault y Citroen. Concretamente, buscaban
herramientas para el dise
no de parachoques de forma que la curva que diera su forma
fuera controlada por una serie de puntos y que tuviera buenas propiedades geometricas. Los algoritmos iniciales (todava se utilizan en la practica hoy en da) seguan ideas
un tiempo en darle la forma que hemos mostrado, mas
muy geometricas16 , y se tardo alg
matematica. Como resultado de este estudio surgieron las curvas B-spline, que reemplazaban a los polinomios de Bernstein por splines de grados adecuados. Las curvas B-spline
son mas flexibles 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 eficientes de evaluar y calcular este tipo de
curvas que permiten en u
ltima 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
262
r
do
rra
Bo
Bibliografa
[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 Scientific 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 century en J. Comput. Appl. Math. 123 (2000), 3565.
[11] Greenbaum, A. (1997): Iterative Methods for Linear Systems. SIAM.
[16] Infante, J.A. y Rey, J.M. (2002): Metodos numericos. Teora, problemas y pr
acticas
con Matlab. Anaya.
[17] Kharab, A. y Guenther, R.B. (2001): An Introduction to Numerical Methods: A MATLAB Approach. Chapman & Hall.
r
do
rra
Bo
[21] Marchand, P. y Holland, T.O. (2003): Graphics and GUIs with Matlab, tercera edicion. 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.
[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.
[34] S
uli, E. y Mayers, D. (2003): An Introduction to Numerical Analysis. Cambridge
University Press.
264
r
do
rra
Bo
Indice de figuras
2.1.
2.2.
2.3.
2.4.
Pantalla Principal.
Pantalla de ayuda.
Ayuda con helpwin
Ayuda on line. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4.1.
5.1.
5.2.
5.3.
5.4.
5.5.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
73
75
93
98
103
7.1.
7.2.
7.3.
7.4.
7.5.
7.6.
7.7.
7.8.
7.9.
Integracion adaptativa de x . . . . . . . . .
Primeras exponenciales trigonometricas. . . . .
Coeficientes de Fourier y transformada discreta
Ruido y su Transformada de Fourier Discreta .
Filtrado del ruido . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
116
119
128
130
133
136
143
144
145
9.1.
9.2.
10.1.
10.2.
10.3.
10.4.
10.5.
10.6.
10.7.
10.8.
10.9.
10.10.
10.11.
Ventana grafica. . . . . . . . . . . . . . . . . . .
Ventana grafica. . . . . . . . . . . . . . . . . . .
Edicion de un dibujo. . . . . . . . . . . . . . . .
Una muestra de dibujos. . . . . . . . . . . . . .
Modificacion del entorno del dibujo. . . . . . . .
Ejemplo de numeracion con subplot. . . . . . .
Disposicion simultanea de graficas con subplot.
Un dibujo en 3D con plot3. . . . . . . . . . . .
Icono para rotar los dibujos. . . . . . . . . . . .
Ejemplo de una superficie creada con surf. . . .
Otro ejemplo de surf. . . . . . . . . . . . . . .
265
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
de Fourier .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
15
16
17
208
210
212
214
218
219
221
222
223
224
225
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
226
228
230
231
232
233
235
236
237
11.1.
11.2.
11.3.
11.4.
11.5.
11.6.
11.7.
11.8.
11.9.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
240
243
246
250
251
255
258
260
261
r
do
rra
Bo
10.12.
10.13.
10.14.
10.15.
10.16.
10.17.
10.18.
10.19.
10.20.
266
r
do
rra
Bo
Indice general
1. Introducci
on
1.1. Que es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Como trabaja? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Como aprenderemos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
2
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
14
16
19
19
19
22
22
24
25
27
30
30
31
.
.
.
.
.
.
.
.
37
37
38
41
43
44
44
47
48
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3. M
etodos directos para sistemas de ecuaciones lineales
3.1. Metodo de Gauss . . . . . . . . . . . . . . . . . . . . . .
3.1.1. Metodo de Gauss sin pivotaje . . . . . . . . . . .
3.1.2. Metodo de Gauss con pivotaje parcial . . . . . . .
3.1.3. Metodo de Gauss con pivotaje parcial ficticio . .
3.2. Descomposiciones matriciales . . . . . . . . . . . . . . .
3.2.1. Descomposicion LU . . . . . . . . . . . . . . . . .
3.2.2. Casos particulares . . . . . . . . . . . . . . . . . .
3.2.3. Comandos correspondientes en Matlab . . . . . .
267
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
II
Programaci
on Avanzada. M
etodos iterativos
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
55
55
55
60
64
66
iterativos
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
71
76
77
78
79
88
.
.
.
.
.
r
do
rra
Bo
4. Matlab: programaci
on avanzada
4.1. Retorno a las matrices . . . . . . . . . . . . . . . .
4.1.1. Acceso a partes estructuradas de una matriz
4.1.2. Mas operaciones sobre matrices . . . . . . .
4.1.3. Matrices sparse . . . . . . . . . . . . . . . .
4.2. Argumentos de funciones . . . . . . . . . . . . . . .
51
105
Recursividad
109
. . . . . . . . . . . . . . . . . . . . . 109
. . . . . . . . . . . . . . . . . . . . . 111
. . . . . . . . . . . . . . . . . . . . . 112
7. F
ormulas de cuadratura. FFT
7.1. Formulas de cuadratura . . . . . . . . . . . . . . . . .
7.1.1. Primeras nociones . . . . . . . . . . . . . . . . .
7.1.2. Reglas simples . . . . . . . . . . . . . . . . . . .
7.1.3. Retorno a las reglas compuestas . . . . . . . . .
7.1.4. Reglas gaussianas . . . . . . . . . . . . . . . . .
7.1.5. Extrapolacion de Richardson . . . . . . . . . . .
7.1.6. Integracion adaptativa . . . . . . . . . . . . . .
7.2. Transformada rapida de Fourier . . . . . . . . . . . . .
7.2.1. Transformada de Fourier discreta . . . . . . . .
7.2.2. Calculo de la transformada de Fourier Discreta .
7.2.3. Aplicaciones a la eliminacion de ruido . . . . . .
7.2.4. Transformada rapida de Fourier . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
115
115
115
118
122
125
126
129
134
135
140
142
144
IV C
alculo simb
olico, arrays y celdas en Matlab. Valores y
vectores propios. Google.
153
8. Matlab: C
alculo simb
olico y estructuras de datos.
157
8.1. Polinomios y calculo simbolico . . . . . . . . . . . . . . . . . . . . . . . . . 157
8.1.1. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
268
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
171
171
173
174
174
178
179
179
183
185
186
192
193
195
196
196
r
do
rra
Bo
9. C
alculo num
erico de valores y vectores propios.
9.1. Introduccion . . . . . . . . . . . . . . . . . . . . .
9.2. Matrices semejantes . . . . . . . . . . . . . . . . .
9.3. Metodo de potencias . . . . . . . . . . . . . . . .
9.3.1. Descripcion del metodo . . . . . . . . . . .
9.3.2. Variantes del metodo de potencias . . . . .
9.4. Metodo de Jacobi . . . . . . . . . . . . . . . . . .
9.4.1. Descripcion del metodo . . . . . . . . . . .
9.4.2. Variantes del metodo de Jacobi . . . . . .
9.5. Metodo QR de Francis . . . . . . . . . . . . . . .
9.5.1. Factorizacion QR . . . . . . . . . . . . . .
9.5.2. Metodo QR de Francis . . . . . . . . . . .
9.5.3. Comentarios adicionales . . . . . . . . . .
9.6. Valores y vectores propios en Matlab . . . . . . .
9.7. Notas historicas . . . . . . . . . . . . . . . . . . .
9.8. Google . . . . . . . . . . . . . . . . . . . . . . . .
10.Matlab: Salidas gr
aficas en Matlab
10.1. Dibujos bidimensionales . . . . . .
10.1.1. El comando plot . . . . . .
10.1.2. Comandos asociados a plot
10.1.3. Comandos get y set . . . .
10.1.4. El comando subplot . . . .
10.1.5. Otras salidas graficas . . . .
10.2. Graficas en 3D . . . . . . . . . . .
10.2.1. El comando plot3 . . . . .
10.2.2. El comando surf . . . . . .
10.2.3. Otros comandos . . . . . . .
10.2.4. Comandos faciles de usar .
10.3. Campos vectoriales . . . . . . . . .
10.4. Dibujos sobre dominios mallados en
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
triangulos
203
.
.
.
.
.
.
.
.
.
.
.
.
.
11.Interpolaci
on. Curvas B
ezier
11.1. Interpolacion polinomica . . . . . . . . . . . . .
11.1.1. Interpolacion polinomica de Lagrange . .
11.1.2. Existencia del polinomio de interpolacion
11.1.3. Formula de Newton . . . . . . . . . . . .
11.1.4. Analisis del error de interpolacion . . . .
11.2. Extensiones adicionales . . . . . . . . . . . . . .
11.2.1. Interpolacion de Hermite . . . . . . . . .
269
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
207
207
207
213
215
219
220
221
221
223
231
233
233
234
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
239
. 239
. 239
. 240
. 242
. 249
. 252
. 252
r
do
rra
Bo
270
r
do
rra
Bo
[], 30
%, 10
|, 32
&, 32
, 57
., 58
./, 24
/, 24
<, 32
<=, 32
==, 32
>, 32
>=, 32
@, 110
\, 24
\., 24
~=, 32
:
def. de vectores, 27
seleccion de submatrices, 28
abs, 13
acos, 15
acosh, 15
acot, 15
acsc, 15
angle, 13
ans, 11
area, 218
asec, 15
asin, 15
asinh, 15
atan, 15
atanh, 15
axis, 211, 213
bar, 218
bar3, 218
barh, 218
blkdiag, 57
break, 31
ButtonDownFcn, 216
celldisp, 167
chol, 49
cholinc, 100
cla, 211
clabel, 230
clear, 18
clf, 211
collect, 161
colorbar, 223
colormap, 223
cond, 63
continue, 31
contour, 229
contourf, 229
conv, 150, 155
cos, 10, 15
cosh, 15
cot, 15
csc, 15
cylinder, 228
daspect, 223
dblquad, 132
dct, 147
deconv, 155
det, 24
diag, 55
dot, 60, 63
dsolve, 161
dst, 147
edit, 19
eig, 193
eigs, 193
ellipsoid, 228
271
hilb, 26
hold, 207
i,j, 13
idct, 147
idst, 147
if, 33
ifft, 147
ifourier, 160
ilaplace, 160
inf, 12
initmesh, 236
inline, 107
input, 110
inv, 24
invhilb, 26
isempty, 91, 174
r
do
rra
Bo
else, 33
elseif, 34
end
con for, 30
con if, 33
con while, 35
en arrays, 35
eps, 20
exp, 15
expand, 161
eye, 26
ezcontour, 231
ezcontourf, 231
ezmesh, 231
ezmeshc, 231
ezplot, 218
ezplot3, 231
ezpolar, 218
ezsurf, 231
ezsurfc, 231
factor, 161
factorial, 111
feval, 109
fft, 147
figure, 207
fill, 218
fontangle, 212
fontname, 212
fontsize, 212
fontweight, 212
for, 30
format, 12
fourier, 160
full, 65
function, 20
gca, 215
gcf, 215
get, 213
ginput, 256
grid, 211
gtext, 257
help, 14
helpwin, 14
hess, 193
laplace, 160
legend, 211
length, 25
limit, 160
line, 218
linspace, 27
load, 18
log, 15
log10, 10, 15
log2, 15
logical, 33
loglog, 218
lookfor, 14
lu, 49
maple, 162
max, 42, 61
mesh, 230
meshc, 230
meshgrid, 221
meshz, 230
mhelp, 162
min, 61
mldivide, 25
mod, 146
mrdivide, 25
NaN, 12
en dibujos, 223
272
nargin, 66
nargout, 66
nnz, 65
norm, 62
num2str, 149
roots, 157
rotate, 212
r
do
rra
Bo
save, 18
schur, 191
sec, 15
semilogx, 218
semilogy, 91, 218
set, 213
sign, 15
simple, 161
simplify, 161
sin, 10, 14, 15
sinh, 15
size, 25
solve, 161
spalloc, 65
sparse, 64
spdiags, 66
speye, 66
sphere, 228
spline, 255
splinetool, 255
spones, 66
sprand, 66
sprandn, 66
spy, 65
sqrt, 11
stairs, 218
stem, 218
str2num, 149
subplot, 217
sum, 61
surf, 221
EdgeAlpha, 225
EdgeColor, 225
FaceAlpha, 225
FaceColor, 225
LineStyle, 225
LineWidth, 225
Marker, 225
MarkerEdgeColor, 225
MarkerSize, 225
MeshStyle, 225
surfc, 230
surfl, 230
ones, 26
pascal, 26
patch, 218
pbaspect, 223
pcg, 100
pcolor, 229
pdetool, 236
pi, 12
plot, 110, 205
color, 208
LineWidth, 208
Marker, 208
MarkerEdgeColor, 208
MarkerFaceColor, 208
MarkerSize, 208
plot3, 219
plotyy, 218
polar, 218
poly, 157
polyder, 161
polyfit, 246
polyint, 161
polyval, 156
power, 15
ppval, 255
profile, 181
qr, 49, 188
quad, 132
quadl, 132
quiver, 231
quiver3, 231
rank, 63
rcond, 63
realmax, 20
realmin, 20
refinemesh, 236
reshape, 60
return, 20
273
r
do
rra
Bo
svd, 194
switch, 35
symamd, 72
symmmd, 70
symrcm, 70
symsum, 160
tan, 15
tanh, 15
taylor, 160
text, 211
tic, 183
title, 211
toc, 183
tril, 55
trimesh, 236
triplequad, 132
trisurf, 236
triu, 55
varargin, 66
varargout, 66
vectorize, 108
view, 223
vpa, 160
waterfall, 230
while, 35
whitebg, 211
who, 17
whos, 17
xlabel, 211
xlim, 211
ylabel, 211
ylim, 211
zeros, 23, 26
zlabel, 220
zlim, 220
274