Vous êtes sur la page 1sur 22

MTODOS MATEMTICOS (Curso 2011-2012)

Segundo Curso del Grado en Ingeniera Civil


Departamento de Matemtica Aplicada II. Universidad de Sevilla
Leccin 1: Introduccin a Matlab y al Anlisis Numrico
ndice
1. Aspectos Generales de Matlab 2
1.1. Acceso a Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Formatos numricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Datos en Matlab 3
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Direccionamiento y manipulacin de matrices . . . . . . . . . . . . . . . . . 4
2.3. Operaciones bsicas con matrices . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Archivos y Programacin en Matlab 5
3.1. Archivos de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. Archivos de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. Subfunciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4. rdenes de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4. Grcas en Matlab 9
4.1. Grcas bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.2. Grcas tridimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5. Errores 10
5.1. Errores relativos y errores absolutos . . . . . . . . . . . . . . . . . . . . . . . 10
5.2. Aritmtica exacta y de precisin nita . . . . . . . . . . . . . . . . . . . . . 11
5.3. Errores de redondeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.4. El formato IEEE de doble precisin . . . . . . . . . . . . . . . . . . . . . . . 13
6. Condicionamiento y Estabilidad en Anlisis Numrico 14
6.1. Condicionamiento de los problemas numricos . . . . . . . . . . . . . . . . . 14
6.2. Estabilidad de los mtodos numricos . . . . . . . . . . . . . . . . . . . . . . 16
6.3. Cancelacin numrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7. Problemas 18
1
2 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
1. Aspectos Generales de Matlab
El material expuesto en las cuatro primeras secciones de esta leccin debe entenderse
solamente como una sencilla introduccin a aquellos aspectos del programa Matlab que
van a ser utilizados repetidamente durante el curso. Es muy recomendable profundizar en
algunos de los temas aqu tratados, especialmente en todo lo relacionado con el manejo de
archivos *.m y con la programacin. Para ello, puede consultarse cualquiera de los textos
mencionados en el proyecto docente de la asignatura.
1.1. Acceso a Matlab
Para empezar a trabajar con Matlab, debe iniciarse el ordenador siguiendo las corres-
pondientes instrucciones del Centro de Clculo de la Escuela hasta que aparezca el smbolo
>> (prompt) que nos indica que el programa est a la espera de nuestras instrucciones.
Para salir de Matlab basta teclear exit o quit y para ejecutar cualquier instruccin la
tecla Return . Hemos de tener en cuenta que una instruccin termina al cambiar de lnea. Si
necesitamos escribir ms de una lnea, debemos poner el smbolo ... (tres puntos) al nal
de la misma y continuar en la siguiente. Si lo que queremos es escribir varias instrucciones
dentro de la misma lnea, basta separarlas por comas.
El cursor se posiciona con las echas izquierda/derecha , y para borrar caracteres
pueden usarse las teclas Backspace o Supr . Si lo que se desea es borrar toda la lnea de
edicin puede usarse la tecla Esc . Tambin son accesibles otras posibilidades de edicin en
lnea (de signicado completamente intuitivo) con las teclas Inicio , Fin o Insert . Otra
opcin muy til es usar las echas arriba/abajo , para recuperar las rdenes previas. De
esta manera, se puede recuperar una lnea anterior de rdenes, editarla y ejecutarla revisada.
Para limpiar completamente la pantalla se utiliza la orden clc.
Conviene precisar que los parntesis ( ) y los corchetes [ ] tienen signicados bien
distintos en Matlab. Los primeros se utilizan para evaluar funciones y los segundos para
denir vectores o matrices.
El resultado de ejecutar en Matlab cualquier expresin matemtica se guarda, caso de
no asignarle ningn nombre, en una variable denominada ans (de answer) que sale inmedia-
tamente en pantalla y que toma como valor el correspondiente resultado. Si deseamos que el
resultado de nuestra operacin no aparezca en pantalla, basta teclear al nal de la expresin
el smbolo ; (punto y coma).
Ejercicio 1. Para este ejercicio, se recomienda usar las rdenes help y lookfor. Compruebe
que Matlab permite determinar el mximo comn divisor (greatest common divisor) de dos
enteros. Determine el mximo comn divisor del par (30,24).

>> lookfor divisor
>> gcd(30,24)
Datos en Matlab 3
1.2. Formatos numricos
Para visualizar los resultados, Matlab ofrece numerosas posibilidades aunque, por de-
fecto, representa los nmeros en pantalla con redondeo a cuatro cifras decimales. Tambin
decide si representa un nmero en notacin convencional (coma ja) o en notacin cientca
(coma otante). La orden bsica para la representacin en pantalla es format.
Es fundamental entender que Matlab no cambia la representacin interna de un nmero
cuando se escogen diferentes formatos, slo modica su visualizacin.
Ejercicio 2. Escriba el nmero en varios formatos de Matlab.

>> format short pi
>> format long pi
>> format short e pi
>> format long e pi
2. Datos en Matlab
2.1. Matrices
En Matlab se trabaja fundamentalmente con matrices. De hecho, para Matlab, los
nmeros son simplementes matrices cuadradas de orden uno. Las matrices pueden denirse
de diversas maneras. Las dos ms usuales son:
Escribir la matriz entre corchetes, colocando las las una a continuacin de otra, sepa-
radas por el simbolo ;. Entre los elementos de una misma la podemos colocar una
coma o dejar un espacio en blanco.
Escribir la matriz entre corchetes, colocando cada la en un rengln distinto.
Matlab incluye una orden muy til para generar vectores cuyas coordenadas estn en
progresin aritmtica. En concreto, la estructura a:b:c crea un vector entre los nmeros a y
c, incrementando cada coordenada con el nmero b. Si slo se escribe a:c se considera que b
es igual a uno.
Ejercicio 3. Genere tres vectores cuyos elementos representen una particin del intervalo
[-1,1] en cinco, ocho y diez subintervalos iguales. Con las tres primeras coordenadas de cada
uno de ellos, genere las tres las de una matriz 3 3 y calcule el determinante de dicha
matriz y de su traspuesta.

>> p5=-1:2/5:1;
>> p8=-1:2/8:1;
>> p10=-1:2/10:1;
>> A=[p5(1:3);p8(1:3);p10(1:3)]
>> det(A)
>> det(A)
4 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
2.2. Direccionamiento y manipulacin de matrices
Para seleccionar un elemento determinado de una matriz se escribe el nombre de la matriz
seguido del nmero de la y columna separados por una coma y entre parntesis.
Si se desea extraer una submatriz, basta colocar en vez de nmeros, vectores cuyas com-
ponentes son los nmeros de las correspondientes las y columnas. El smbolo dos puntos es
muy til para crear submatrices. Cuando no se le dan valores a derecha e izquierda recorre,
por defecto, todos las las o columnas. Si colocamos datos fuera del rango actual de una
matriz se rellenan con ceros las zonas no especicadas.
Ejercicio 4. Obtenga de cuatro maneras distintas la submatriz formada por la segunda y
la tercera la de la siguiente matriz
A =
_

_
1 1 1 1
1 2 2 2
1 2 3 3
1 2 3 4
_

_
.

>> A=[1 1 1 1;1 2 2 2;1 2 3 3;1 2 3 4]
>> A(2:3,1:4)
>> A(2:3,:)
>> A([2 3],:)
>> A([1 4],:)=[]
2.3. Operaciones bsicas con matrices
Para trabajar con matrices y vectores, Matlab cuenta con una serie de operaciones
bsicas que citamos a continuacin. En todas ellas es fundamental el que las dimensiones
sean las adecuadas.
El smbolo + para sumar matrices y el - para restar matrices.
El smbolo * para multiplicar matrices. Si el smbolo lo precedemos de un punto se
obtiene la multiplicacin coordenada a coordenada.
El smbolo ^ para la la potenciacin de matrices. Con el punto delante se obtiene la
operacin coordenada a coordenada.
El smbolo ./ para dividir dos matrices coordenada a coordenada. Cuando una de
ellas es un nmero puede quitarse el punto.
Funciones elementales sobre vectores/matrices (de signicado completamente intuitivo
en ingls): max, min, sort, sum, size,...
Adems, Matlab incorpora funciones que permiten generar matrices que surgen con
frecuencia en los clculos: eye, zeros, ones, diag, rand, randn, ...
Archivos y Programacin en Matlab 5
Ejercicio 5. Escriba las matrices A y B denidas por
A(i, j) = 10(i j) + 1; i, j = 1, ..., 10.
B(i, j) =
_
1, i j = 1
0, en otro caso
, i, j = 1, ..., 40.

>> A=[1:10]*ones(1,10); A=100*(A-A)+1
>> B=[zeros(1,40);eye(39,40)]
3. Archivos y Programacin en Matlab
Tanto para trabajar con datos de cierto tamao, como para disear nuevas funciones
en Matlab, es completamente imprescindible trabajar con M-archivos (archivos ASCII con
extensin *.m). De hecho, una parte importante de cada sesin con Matlab es crear y
renar este tipo de archivos. Atendiendo a su uso, los M-archivos suelen dividirse en dos
grandes grupos: archivos de instrucciones o tipo script y archivos de funciones.
3.1. Archivos de instrucciones
Un M-archivo de este tipo consiste en una sucesin de instrucciones de Matlab. Para
ejecutarlas y ver el correspondiente resultado en pantalla, basta escribir el nombre del archivo
(sin la extensin) y pulsar Return . Las variables en un archivo de instrucciones son globales
y, por tanto, pueden afectar a los valores de las variables que se hayan creado durante la
sesin de trabajo con Matlab.
Los archivos de instrucciones son utilizados, por ejemplo, para introducir datos en ma-
trices de grandes dimensiones, pues en un archivo de este tipo es fcil corregir errores sin
repetir todo el trabajo.
Ejercicio 6. Obtenga la matriz cuadrada de orden veinte tal que los elementos de su diagonal
son todos iguales a 3 y las dos subdiagonales principales estn formadas por unos. Calcule
su determinante. Posteriormente cambie la diagonal por el vector cuyas coordenadas son los
primeros veinte nmeros naturales y vuelva a calcular el determinante de la nueva matriz.

Trabajamos con un archivo de instrucciones denominado prueba.m
v=3*ones(20,1);
A=diag(v)+diag(v(1:19),1)+diag(v(1:19),-1);
det(A)
>> prueba
v=1:20;
A=diag(v)+diag(v(1:19),1)+diag(v(1:19),-1);
det(A)
>> prueba
6 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
3.2. Archivos de funciones
Los M-archivos de funciones son los que permiten incrementar la coleccin de funciones
que ejecuta Matlab. Es decir, se pueden crear funciones especcas para algn problema
concreto y, a partir de su introduccin, dichas funciones tienen el mismo rango que las
funciones del sistema y se ejecutan de igual forma. Las variables en los archivos de funciones
son locales, es decir, no afectan a los valores de las variables que se hayan creado durante la
sesin de trabajo con Matlab.
Se aconseja que el nombre de un archivo de funcin sea el nombre de la funcin seguido,
obviamente, de la extensin *.m. La primera lnea de un archivo de este tipo debe ser como
sigue:
function [argumentos de salida]=nombre de la funcin(argumentos de entrada).
A continuacin, puede haber diversas lneas de comentario que han de estar precedidas
necesariamente por el smbolo %. Conviene decir que son precisamente estas lneas las que
aparecern en pantalla al usar la orden help. Finalmente, aparece el programa, esto es, las
instrucciones necesarias para poder evaluar la funcin.
Tanto los argumentos de entrada como los de salida no son obligatorios y, si no aparecen,
no hace falta escribir los correspondientes corchetes o parntesis.
Para hacerse una idea de las rdenes que incorpora Matlab en un cierto rea, puede
usarse la orden lookfor seguida de una cierta palabra. Por ejemplo, si esa palabra es eigen-
value, obtenemos un listado de aquellas rdenes relacionadas con el clculo de autovalores.
Ejercicio 7. Disee una funcin que devuelva el producto escalar de dos vectores x e y de
R
n
. Los argumentos de entrada deben ser los vectores x e y. Adems, el correspondiente
archivo debe incluir algunas lneas de comentario.

function p=L01_ejer_07(x,y)
% Esta funcion calcula el producto escalar de dos vectores x e y
x=x(:);
y=y(:);
p=sum(x.*y);
end
La orden de Matlab sum calcula la suma de las componentes de un vector. Otra opcin,
sin utilizar dicha orden es
function p=L01_ejer_07_bis(x,y)
% Esta funcion calcula el producto escalar de dos vectores x e y
x=x(:);
y=y(:);
p=x*y;
end
Archivos y Programacin en Matlab 7
3.3. Subfunciones
Cualquier funcin puede incluir subfunciones. Esto es, en un mismo chero se pueden
incluir funciones adicionales (o subfunciones) con nombres diferentes del nombre de la funcin
principal. Estas subfunciones slo pueden ser llamadas por las funciones contenidas en ese
archivo, resultando invisibles para otras funciones externas.
Las subfunciones son particularmente tiles en el manejo de mtodos numricos que
actan sobre funciones. Por citar un ejemplo, mencionamos que el clculo numrico de inte-
grales en Matlab se realiza mediante la orden quadl (QUADrature of Lobatto) y uno de
sus argumentos es la funcin a integrar.
Ejercicio 8. Utilizando la orden quadl y para a = 10, obtenga una tabla con los valores de
las siguientes quince integrales
I
n
=
_
1
0
x
n
a + x
dx, n = 1, 2, . . . , 15.

function L01_ejer_08(a,n)
for k=1:n
Q=quadl(@(x)fun(x,a,k),0,1);
fprintf(Int(%2.0f)=%16.15f\n,k,Q)
pause(0.1)
end
function y=fun(x,a,k)
y=(x.^k)./(a+x);
end
end
3.4. rdenes de control
Como cualquier lenguaje de programacin, Matlab dispone de instrucciones de control
para realizar (o romper) bifurcaciones, repeticiones y bucles. Las bifurcaciones permiten
realizar distintas operaciones, segn se cumpla o no una determinada condicin lgica. Para
su diseo, Matlab incorpora las rdenes if y switch. Por otro lado, los bucles y repeticiones,
permiten hacer las mismas o anlogas operaciones sobre datos distintos; regidos por una
cierta condicin lgica en el caso de los bucles y recorriendo unos ciertos valores previamente
dados, en el caso de las repeticiones. Para generar repeticiones, Matlab dispone de la orden
for y para generar bucles de la orden while.
La orden for. La sintaxis para la utilizacin de esta orden de control es
_
_
_
for variable=vector
instrucciones sobre la variable
end
El signicado es el siguiente: mientras la variable recorre los valores del vector, se
realizan las instrucciones descritas, con la variable tomando dichos valores. Matlab
permite anidar varias rdenes for.
8 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
Ejercicio 9. Dada una matriz cuadrada de orden n, disee una funcin, usando la instruccin
for, que sume los elementos de mayor mdulo de cada una de las columnas de dicha matriz.

function s=L01_ejer_09(A)
[~,n]=size(A);
s=0;
for j=1:n
[~,i]=max(abs(A(:,j)));
s=s+A(i,j);
end
end
La orden if. La sintaxis habitual para la utilizacin de esta orden de control es
_

_
if relacin lgica P
1

instrucciones Q
1

else
instrucciones Q
2

end
El signicado es el siguiente: si P
1
es cierto se ejecutan las instrucciones Q
1
y si P
1
es
falso se ejecutan las instrucciones Q
2
. Las lneas tres y cuatro anteriores pueden suprimirse
y, en este caso, cundo P
1
sea falso, no se ejecuta ninguna instruccin.
Ejercicio 10. Disee una funcin que calcule todos los divisores de un nmero natural dado.

function d=L01_ejer_10(n)
d=[];
for i=1:n
if rem(n,i)==0
d=[d,i];
end
end
end
La orden while. La sintaxis para la utilizacin de esta orden de control es
_
_
_
while relacin lgica
instrucciones
end
El signicado de este esquema es que las instrucciones se irn ejecutando mientras la
relacin lgica sea cierta.
Grcas en Matlab 9
Ejercicio 11. Un famoso resultado de L. Euler (1707-1783) arma que

n=1
1
n
2
=

2
6
.
Obtenga el menor nmero de sumandos de la serie anterior, de modo que la correspondiente
suma nita aproxime

2
6
con un error menor o igual que 10
6
.

function n=L01_ejer_11(tol)
s=0;
n=1;
e=1;
while e > tol
s=s+1/n^2;
e=abs(s-pi^2/6);
n=n+1;
end
>> L01_ejer_11(1e-6)
4. Grcas en Matlab
Para mostrar las correspondientes grcas, Matlab abre una nueva ventana, la deno-
minada ventana de gura. Si ya hubiera una ventana de gura, se borra la ventana de gura
actual y se dibuja en ella la nueva grca. Para utilizar dos o ms grcas en diferentes
ventanas de gura, se usa la orden gure. La orden gure(n) muestra, o crea si no la hay,
la ventana de gura n-sima y sta pasa a ser la ventana de gura activa. La orden close
cierra la ventana grca activa.
4.1. Grcas bidimensionales
Para obtener grcas 2-D, Matlab admite cuatro opciones: grcas en coordenadas
cartesianas, grcas en coordenadas polares, grcas de barras y grcas de escaleras. La
orden para representar datos bidimensionales en coordenadas cartesianas es plot, para crear
grcas en coordenadas polares es polar y, nalmente, los grcos de barras y escaleras se
generan usando las ordenes bar y stairs, respectivamente.
La orden plot escala los ejes para ajustar los datos, representa los puntos y, a continua-
cin, conecta los puntos con una lnea recta. Tambin aade una escala numrica y coloca
de forma automtica marcas en ambos ejes.
Ejercicio 12. Dibuje la grca de la funcin exponencial en el intervalo [-2,2]. Obtenga una
segunda grca donde a la curva anterior se le aada la recta tangente en x = 0.

function L01_ejer_12
10 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
x=-2:0.01:2;
figure(1)
plot(x,exp(x));
xlabel(x);
ylabel(y);
title(Curva y=e^x);shg
pause
figure(2)
plot(x,exp(x),x,1+x,r)
xlabel(x);
ylabel(y);
title(Curva y=e^x y recta tangente y=1+x en x=0);
legend(y=e^x,y=1+x,Location,SouthEast);shg
end
4.2. Grcas tridimensionales
Para obtener grcas 3-D, Matlab admite tres opciones: grcas de lneas, grcas de
supercies y grcas de contorno. La orden bsica para realizar grcas de lneas es plot3,
las rdenes para grcas de supercies son mesh y surf y, nalmente, para grcas de
contorno es contour.
5. Errores
En la modelizacin computacional, los errores pueden proceder de muy diversas fuen-
tes. Por un lado, hay errores inherentes a dicha modelizacin. Por ejemplo, aquellos errores
debidos a las hiptesis realizadas para convertir un modelo real en un modelo matemti-
co susceptible de tratamiento computacional. Por otro lado, estn los errores propiamente
computacionales que surgen al implementar los distintos mtodos matemticos. En este cur-
so, nos jaremos exclusivamente en este ltimo tipo de errores.
5.1. Errores relativos y errores absolutos
Resolver un problema numrico es casi sinnimo de obtener una cierta aproximacin a
un cierto valor numrico x
T
. Si x
A
es una de esas aproximaciones al valor x
T
, se dene el
error absoluto como
Abs(x
A
) = |x
T
x
A
|.
Para muchos propsitos, sin embargo, es preferible considerar el porcentaje de error en x
A
o
error relativo
Rel(x
A
) =
|x
T
x
A
|
|x
T
|
, (se supone que x
T
= 0).
En trminos generales, la utilidad de manejar el error relativo radica en que nos protege
contra armaciones precipitadas sobre la bondad de una aproximacin, sobre todo cuando
nos movemos en escalas extremas (nmeros muy grandes o muy pequeos).
Errores 11
El concepto de error relativo est relacionado con la representacin decimal a travs de
la nocin de dgitos signicativos (i. e., el primero no nulo y todos los dgitos sucesivos)
correctos. En concreto, puede armarse que si
Rel(x
A
) 0, 5 10
m
, m N
entonces, x
A
comparte m dgitos signicativos correctos con x
T
despus de redondear ambos
valores a m cifras signicativas.
Ejemplo 1. Consideremos el problema de aproximar z = 0.8886110521 10
7
. Puesto que
z es realmente grande, incluso aproximaciones intuitivamente buenas, dan lugar a errores
absolutos apreciables. Por ejemplo, si w = 0.888611051710
7
, se tiene que |zw| = 410
3
,
a pesar de que w y z comparten nueve dgitos correctos. Sin embargo, si miramos el error
relativo vemos que

z w
z

= 0.4501 10
9
.
Ejercicio 13. Estime razonadamente los seis primeros dgitos signicativos correctos de la
suma de la serie convergente

n=1
3
n
n!
(2n)!
.
5.2. Aritmtica exacta y de precisin nita
Recordemos que cuando escribimos 3, 1416 lo que estamos realmente representando es el
nmero racional
3 +
1
10
+ 4
1
10
2
+
1
10
3
+ 6
1
10
4
.
Utilizando series numricas, este proceso conduce al conocido concepto de representacin
decimal en base . En concreto, si es un nmero natural estrictamente mayor que uno y
tomamos x (0, 1], siempre existe una sucesin de naturales (d
j
) con 0 d
j
1 tal que
x =

j=1
d
j
1

j
.
La sucesin (d
j
) es esencialmente nica y permite, por tanto, introducir la notacin
(x)

= 0, d
1
d
2
d
n

Multiplicando adecuadamente, es claro que la restriccin al intervalo (0, 1] no es relevante.
Es ms, si nos restringimos a representar nicamente dgitos signicativos, se tiene que
dado x > 0, existen un nmero entero E y una sucesin de naturales (d
j
) con 0 d
j
1
y d
1
= 0 tal que
x =
E

_
d
1

+
d
2

2
+ +
d
j

j
+
_
.
Es la denominada representacin decimal (en base ) en coma otante.
Puesto que la memoria de cualquier ordenador es nita, es evidente que todos los dgitos
d
j
de la representacin anterior no pueden almacenarse. De hecho, los ordenadores actuales
12 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
manejan exclusivamente representacionesn decimales en una cierta base pero con un nme-
ro nito t de dgitos. El conjunto de tales nmeros reales suele representarse por M= M(, t).
En concreto, si x M y x = 0, se tiene que
x = sig(x)
E

_
d
1

+
d
2

2
+ +
d
t

t
_
,
donde sig(x) denota el signo de x; es un nmero natural mayor o igual que 2 denominado
base de la representacin; E es un nmero entero denominado exponente; cada dgito d
i
verica 0 d
i
1 con d
1
= 0; y el grupo de cifras d
1
d
2
d
t
se denomina mantisa de la
representacin. Evidentemente, el exponente E vara en un cierto intervalo [E
mn
, E
max
].
Ejercicio 14. Determine la representacin del nmero 350 en un ordenador basado en
M(2, 7).
5.3. Errores de redondeo
Dado un nmero real x arbitrario, es casi seguro que x no pertenece a M = M(, t).
Para salvar esta dicultad, se utiliza el redondeo a t dgitos de x. La idea es simplemente
determinar un nmero en M donde se alcance la distancia mnima entre x y M.
En concreto, dado un nmero real con representacin decimal en base en coma otante
x = sig(x)
E
0, d
1
d
2
d
j
,
se dene el redondeo de x a t dgitos como el nmero
(x) := sig(x)
E

_
0, d
1
d
2
d
t
, si d
t+1
< /2
0, d
1
d
2
d
t
+
t
, si d
t+1
/2
Ejercicio 15. Consideremos en notacin decimal (base diez) el nmero x = 23, 346. Repre-
sente dicho nmero en un ordenador M con = 10 y t = 3.

Si queremos representar el nmero dado en un ordenador M(10, 3), debemos redondear.
En concreto,
23.346 = +10
2
0.23346 +10
2
0.233 | 46,
como 4 < 5, la representacin por redondeo de x en M ser +10
2
0.233. Conviene observar
que si t fuera 4, la representacin sera +10
2
0.2335.
Puede observarse que (x) M(, t) siempre que E [E
mn
, E
max
]. Cuando x es de-
masiado grande (E > E
max
) se dice que hay overow y cuando x es demasiado pequeo
(E < E
mn
), que hay underow.
Desde el punto de vista del error relativo, el proceso de redondeo est controlado por la
denominada unidad de redondeo u :=
1
2

1t
. En concreto, se tiene que para x R,
(x) = x(1 + ), || u

(x) x
x

u.
Errores 13
El diseo en M de las operaciones algebraicas bsicas (suma, resta, multiplicacin y
divisin) tambin sigue el mismo patrn de control del error relativo cometido. En concreto,
dados x, y M, se tiene que
(x op y) = (x op y)(1 + ), || u, op = +, , /,
Conviene observar que, en general, x op y no necesariamente pertenece a M; de ah, el
redondeo despus de realizar la operacin.
Puede comprobarse, adems, que las leyes habituales de la aritmtica exacta, como por
ejemplo la propiedad asociativa de la suma, no se verican, en general, en este contexto de
la aritmtica de precisin nita.
Ejercicio 16. Usando format long, ejecute en Matlab la expresin 3(4/3 1) 1 y
compruebe que el resultado no es realmente cero.
5.4. El formato IEEE de doble precisin
En el mencionado contexto de aritmtica de precisin nita, Matlab utiliza (esencial-
mente) el denominado formato IEEE de doble precisin. El IEEE (Institute of Electrical
and Electronics Engineers) es una asociacin del mundo de la ingeniera dedicada, entre
otras muchas cosas, a la estandarizacin. En concreto, Matlab maneja nmeros (adems
del cero) que puedan expresarse como
x = (1 + f)2
e
,
donde f es un nmero racional en [0, 1) representable en binario con 52 dgitos a lo sumo y
1022 e 1023.
Cualquiera de estos nmeros puede almacenarse en una palabra de 64 bits: 52 bits para
f, 11 bits para e y 1 bit para el signo. El menor nmero positivo que maneja Matlab (es
decir, f = 0, e = 1202) se denomina realmin y el mayor (e = 1023 y f cerca de uno)
realmax.
Ejercicio 17. Ejecute las rdenes realmin y realmax para conocer el rango real, en binario
y en base diez, en el que se mueven los nmeros que maneja Matlab.
En este contexto, el mencionado fenmeno de overow signica simplemente que se ha
obtenido, o se ha generado, un valor superior a realmax. Cuando eso ocurre, el formato IEEE
asigna a ese resultado un valor excepcional denominado innite (Inf en Matlab). Por otro
lado, cuando se produce underow (manejo de valores inferiores a realmin), la regla usual
es considerar dicho resultado como cero, dando un mensaje de aviso. No obstante, algunas
versiones (es el caso de la versin Matlab 7 y sucesivas) permiten considerar puntualmente
ciertos valores inferiores a realmin (denominados nmeros denormales) para simular una
aproximacin a cero menos abrupta. Adems, para manejar expresiones/indeterminaciones
del tipo Inf/Inf, 0/0, InfInf, . . . el formato IEEE tiene otro valor excepcional denominado
Not-a-Number (NaN in Matlab).
14 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
Ejercicio 18. Disee una funcin que devuelva el trmino n-simo de la iteracin
x
n+1
= x
2
n
2x
n
, x
0
= 4.
Cual es el primer valor de n al que Matlab asigna el valor NaN?
Adems, Matlab tiene la variable predenida eps, denominada epsilon de la mquina o
del sistema de coma otante, estrechamente ligada a la correspondiente unidad de redondeo
u =
1
2
2
153
= 2
53
1.11 10
16
. En concreto, el valor eps se dene como la distancia del
nmero uno al siguiente nmero mayor que uno y representable en Matlab.
Ejercicio 19. Determine el valor de la precisin de la mquina usando un bucle while.
Compare el valor obtenido con la variable predenida eps de Matlab y compruebe que
dicho valor es exactamente 2u. Qu consecuencias tiene este valor en el manejo de los
errores relativos en Matlab?
function mieps
u=1;
while 1+u > 1
u=u/2;
end
epsilon=2*u
end
>> format long, mieps,eps, format
6. Condicionamiento y Estabilidad en Anlisis Numrico
El objeto del Anlisis Numrico es el diseo y estudio de mtodos que permitan obte-
ner, con la mayor precisin posible, soluciones numricas de problemas matemticos. Estos
mtodos resuelven dichos problemas mediante algoritmos, es decir, una lista ordenada de
operaciones aritmticas y lgicas que transforman ciertos datos de entrada en ciertos da-
tos de salida. Adems de su correcto funcionamiento en aritmtica exacta, la idoniedad de
un algoritmo est ligado tambin a su coste temporal y a su comportamiento respecto a los
errores de redondeo.
La implementacin real de un algoritmo mediante algn lenguaje de programacin tie-
ne en cuenta otros numerosos factores; algunos no propiamente matemticos como el uso
de la memoria del ordenador. En general, estos nuevos factores tienen un indudable sesgo
informtico y no sern tratados en el presente curso.
6.1. Condicionamiento de los problemas numricos
Los resultados o datos de salida de los problemas tratados en Anlisis Numrico deben
(o al menos, deberan) estar perfectamente determinados por los datos de entrada. En la
inmensa mayora de los casos, puede asumirse incluso que dichos resultados dependen conti-
nuamente de los datos de entrada. Sin embargo, en general, el grado de continuidad entre esos
datos de entrada y los correspoondientes resultados es muchas veces realmente bajo. Aquellos
Condicionamiento y Estabilidad en Anlisis Numrico 15
problemas que poseen esta ltima, y no deseable, propiedad se denominan problemas mal
condicionados. Si ocurre lo contrario, se habla de problemas bien condicionados.
La gravedad de un problema mal condicionado reside en que su resolucin puede producir
soluciones muy dispares en cuanto los datos de entrada varan un poco. Por otro lado, esta
variabilidad es un hecho comn e inevitable en todo tipo de aplicaciones a problemas reales.
Conviene volver a subrayar que el mal condicionamiento de un problema no depende del
algoritmo utilizado para resolverlo, es una propiedad inherente al problema.
Por ejemplo, el popularizado efecto mariposa en la prediccin del tiempo atmosfrico,
no es sino una forma ms atractiva de armar el mal condicionamiento, para periodos no muy
cortos de tiempo, de los modelos matemticos utilizados en dicha prediccin. Otro ejemplo
bastante conocido de mal condicionamiento, se muestra en el siguiente ejercicio.
Ejercicio 20. Disee una funcin en Matlab que proporcione una grca conjunta de las
rectas del plano
_
x + y = 1
x + y = 0
0 < < 1,
resaltando el punto de corte. El argumento de entrada debe ser el valor > 0. Tomando
distintos valores de , analice geomtricamente el condicionamiento del anterior sistema de
ecuaciones lineales respecto a variaciones en el parmetro .

Puede comprobarse que el punto de corte de las dos rectas es
_
1
1
2
,

1
2
_
.
Como (0, 1), dicho punto de corte est siempre en el cuarto cuadrante.
function L01_ejer_20(alfa,perturbacion)
% Punto de corte del sistema (alfa)
pcx=1./(1-alfa^2);
pcy=-alfa/(1-alfa^2);
% Dibujo del par de rectas (alfa)
t=-1:0.01:10;
r1=(1-t)/alfa;
r2=-alfa*t;
plot(t,r1,g,t,r2,g,pcx,pcy,o,MarkerEdgeColor,k,...
MarkerFaceColor,g)
axis([-1,10,-10,1])
shg
pause
% Punto de corte del sistema (nalfa=alfa+perturbacion)
nalfa=alfa+perturbacion;
npcx=1./(1-nalfa^2);
npcy=-nalfa/(1-nalfa^2);
% Dibujo conjunto de los dos pares de rectas (alpha,nalfa)
t=-1:0.01:10;
nr1=(1-t)/nalfa;
16 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
nr2=-nalfa*t;
plot(t,r1,g,t,r2,g,pcx,pcy,o,MarkerEdgeColor,k,...
MarkerFaceColor,g)
hold on
axis([-1,10,-10,1])
plot(t,nr1,r,t,nr2,r,npcx,npcy,o,MarkerEdgeColor,k,...
MarkerFaceColor,r)
shg
hold off
end
>> L01_ejer_20(0.9,0.01)
>> L01_ejer_20(0.1,0.01)
6.2. Estabilidad de los mtodos numricos
Al ejecutar un programa que implemente un cierto algoritmo y estar, por tanto, en un
contexto de aritmtica de precisin nita, podemos dar casi por seguro que cada paso que
vaya a realizar dicho algoritmo conllevar un cierto error. En otras palabras, inevitablemente
el error de redondeo se propaga. Sin embargo, en muchos casos, la acumulacin de todos esos
errores tiene un resultado realmente despreciable en el resultado nal desde el punto de vista
de la precisin requerida. Aquellos mtodos numricos con esta deseable propiedad se dice
que son estables numricamente y, en caso contrario, inestables.
Es ms, en la prctica, suelen darse casi exclusivamente dos situaciones: o bien el error
crece muy lentamente y estamos en una situacin de estabilidad numrica, o bien se tiene
un crecimiento exponencial del error y esto conduce relativamente pronto a resultados real-
mente disparatados. Conviene mencionar, que esta segunda situacin de clara inestabilidad
numrica puede habitualmente arreglarse tras realizar un anlisis en profundidad del mtodo
numrico elegido.
Ejercicio 21. Considere el problema de evaluar las integrales (a > 0)
y
n
=
_
1
0
x
n
a + x
dx, n = 1, 2, . . . ,
mediante la relacin de recurrencia
y
n+1
=
1
n + 1
ay
n
, n 1.
1. Disee una funcin en Matlab que implemente la recurrencia anterior y obtenga una
tabla, para a = 10, con los valores de las veinte primeras integrales. Hay algn valor
absurdo en la tabla?
2. En las hiptesis del apartado anterior, sea y
n
el valor realmente computado por el
ordenador para y
n
. Supongamos, adems, que se comete algn error al calcular y
1
,
pero que el resto de las operaciones se realizan en aritmtica exacta. Verique que
y
n
:= y
n
y
n
= (10)
n1
( y
1
y
1
), para n 1.
Condicionamiento y Estabilidad en Anlisis Numrico 17
3. A tenor de la identidad anterior, cmo puede explicarse el fenmeno numrico obser-
vado en el primer apartado? para qu valores de a debera funcionar correctamente el
algoritmo implementado en dicho primer apartado?
Los fenmenos numricos que hemos estado comentando son algo ms que curiosidades
matemticas desde el punto de vista de las aplicaciones. Por ejemplo, durante la guerra
del Golfo, en Febrero de 1991, un misil Patriot americano se desvi de su objetivo inicial
causando 28 muertos entre las tropas aliadas. El error fue consecuencia, en ltima instancia,
de una pobre gestin de los errores de redondeo generados en el programa principal. Otro
ejemplo, debido a una aparicin no esperada de overow, origin la explosin del cohete
Ariane 5 justo despus del despegue en Junio de 1996.
En cualquier caso, es importante subrayar que la evolucin de clculos en aritmtica
de precisin nita es normalmente predecible y de relativa fcil comprensin. Casos como
los mencionados en el prrafo anterior son la excepcin, no la norma. De hecho, durante el
curso, slo ocasionalmente tendremos que jarnos en fenmenos ligados a roundo (errores
de redondeo), overow o underow.
6.3. Cancelacin numrica
Uno de los fenomnos ms conocidos y relacionados con la inestabilidad numrica es la
cancelacin numrica. ste fenmeno se observa cuando, durante un clculo en aritmtica
de precisin nita, se restan dos numros casi idnticos y alguno de ellos con un cierto error
previo. Ms que en el error cometido en dicha cancelacin, el autntico efecto de inestabilidad
se produce cuando dicha diferencia se usa en operaciones posteriores. Es decir, la casi segura
prdida de dgitos signicativos correctos en dicha resta genera una cierta propagacin del
error que suele reducir fuertemente la exactitud del resultado nal.
El siguiente ejemplo muestra un fenmeno extremo de cancelacin numrica en un terico
ordenador basado en M(10, 5).
Ejemplo 2. Consideremos x = 0, 732112 e y = 0, 732110, cuya diferencia vale 0, 000002. Al
trabajar en M(10, 5), ambos valores deben redondearse y, por tanto, la diferencia realmente
calculada en M(10, 5) es
x = (x) = 0, 73211, y = (y) = 0, 73211, x y = 0.
Tomar 0, 000002 como cero, supone ya la prdida de un dgito signicativo correcto. Ahora
bien, si se realiza posteriormente alguna operacin adicional, el error cometido se acenta.
Por ejemplo, al intentar evaluar (x y)y = 0, 14642 10
5
en M(10, 5) obtenemos de nuevo
cero, perdiendo ahora cinco dgitos signicativos correctos.
Ejercicio 22. Un ejemplo simple, pero importante, donde surge de modo natural la cance-
lacin numrica es la resolucin de ecuaciones de segundo grado. En aritmtica exacta, el
problema de resolver ax
2
+ bx + c = 0 (a = 0) es muy conocido y sencillo: hay dos races
dadas por la frmula
x =
b

b
2
4ac
2a
.
1. Usando la frmula anterior en Matlab, calcule las correspondientes races para
a = 1, b = 10
8
, c = 1.
18 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
2. Compare los resultados obtenidos con los proporcionados por la orden roots.
3. Describa donde se estn produciendo fenmenos de cancelacin numrica. Cmo po-
dran solventarse dichos problemas?

Las races x
1
, x
2
de la ecuacin de segundo grado verican las denominadas frmulas de
Cardano:
b = a(x
1
+ x
2
), c = ax
1
x
2
.
function L01_ejer_22(a,b,c)
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
r=roots([a b c]);
x1_roots=r(1);
x2_roots=r(2);
x1_recal=(-b-sign(b)*sqrt(b^2-4*a*c))/(2*a);
x2_recal=c/(a*x1_recal);
display(*** Directamente ***)
fprintf((Frmula) x1=%16.15e (roots) x1=%16.15e\n,x1,x1_roots)
fprintf((Frmula) x2=%16.15e (roots) x2=%16.15e\n,x2,x2_roots)
pause
display(*** Cardano ***)
fprintf((Frmula) x1=%16.15e (roots) x1=%16.15e\n,x1_recal,x1_roots)
fprintf((Frmula) x2=%16.15e (roots) x2=%16.15e\n,x2_recal,x2_roots)
end
>> L01_ejer_22(1,-1e8,1)
7. Problemas
Problema 1. Compruebe que la sucesin de recurrencia
_
x
0
= 1, x
1
=
x
n+1
= (3 + )x
n
3x
n1
permite calcular todas las potencias naturales de un nmero > 0 arbitrario.
Verique en Matlab, con = 1/7, que el algoritmo asociado a la recurrencia anterior
es numricamente inestable. Cal es el problema?
Indicacin: Consulte cmo puede resolverse una ecuacin en diferencias de coecientes cons-
tantes de segundo orden. En concreto, la solucin en aritmtica exacta de la ecuacin de
recurrencia anterior es
x
n
= A3
n
+ B
n
, n 0,
donde A, B se obtienen imponiendo las condiciones iniciales.
Problemas 19
Problema 2. Si a M es un nmero de gran magnitud, es previsible que a
2
quede fuera
del sistema de coma otante M. Este hecho supone un problema para el clculo numrico
eciente de la norma de un vector como [a, 1]
T
. Sin embargo, observando que
_
x
2
1
+ x
2
2
= |x
1
|

1 +

x
2
x
1

2
,
disee un algoritmo que proporcione la norma eucldea de un vector arbitrario y que evite
calcular el cuadrado de todas aquellas componentes de tamao relativamente grande. El
argumento de entrada debe ser el vector x R
n
.
Aplique la funcin diseada al vector [10
4
, 10
6
, 10
8
, 10
10
]. Compare el resultado con el
proporcionado con la orden norm de Matlab.
Problema 3. Eligiendo adecuadamente valores prximos a cero, muestre en Matlab que
la expresin
1 cos (x)
x
2
puede presentar cancelacin numrica. Obtenga una expresin equivalente que elimine este
problema.
Problema 4. Explique la salida que proporciona Matlab al ejecutar los siguientes rdenes
t=0.1, n=1:10, e=n/10-n*t.
Problema 5. Explique brevemente qu hace cada uno de los tres siguientes conjuntos de
instrucciones:
1. x=1, while 1+x>1, x=x/2, pause(0.02), end.
2. x=1, while x+x>x, x=2*x, pause(0.02), end.
3. x=1, while x+x>x, x=x/2, pause(0.02), end.
Problema 6. Considere la funcin
f(x) =
e
x
1
x
, x > 0.
La manera, digamos natural, de evaluar f en Matlab sera utilizar la expresin
f=(exp(x)-1)/x.
Compruebe, sin embargo, que este algoritmo sufre de cancelacin severa para |x| << 1.
Problema 7. La serie de potencias para sen(x) es
sen(x) = x
x
3
3!
+
x
5
5!

x
7
7!
+ . . . .
Considere la funcin de Matlab
function s=powersin(x)
s=0;t=x;n=1;
20 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
while s+t ~=s
s=s+t;
t=-x.^2/(n+1)*(n+2)).*t;
n=n+2;
end
Cundo termina el bucle while? Para x = /2, 11/2, 21/2, 31/2, responda a las
siguientes cuestiones:
1. Cmo de precisos son los resultados proporcionados por la funcin?
2. Cuntos trminos se han requerido?
3. Cal es el mayor trmino de la serie en cada caso?
Problema 8. Supongamos que se quiere evaluar una cierta funcin sucientemente dife-
renciable g : R
n
R en un punto x = (x
1
, ..., x
n
) R
n
. Para tales problemas se dene el
nmero de condicin, cuando sea posible, respecto a variaciones en una de las variables x
j
como
Cond(g, x
j
) =

x
j
g(x)
g
x
j
(x)

.
1. Aplicando la frmula de Taylor a una cierta funcin h : R R, esto es,
h(x + x) h(x) = h

(x)x +
h

(x + x)
2
(x)
2
, (0, 1),
muestre que la denicin anterior es ms que razonable.
2. Considere la media aritmtica m de n nmeros reales {x
1
, ..., x
n
}, es decir,
m =
1
n
(x
1
+ + x
n
).
Determine el nmero de condicin de m respecto a perturbaciones en cualquier x
j
.
3. Hay alguna diferencia entre manejar solamente nmeros positivos y manejar nmeros
arbitrarios?
4. Disee una funcin en Matlab tal que, dados n nmeros reales {x
1
, ..., x
n
}, una cierta
coordenada j y una cierta perturbacin en dicha coordenada, proporcione el error
relativo generado al calcular la media aritmtica de los n nmeros y, adems, el error
relativo al calcular x
j
. Utilizando esta funcin, proporcione ejemplos en Matlab que
corroboren sus armaciones sobre el apartado anterior.
Indicacin: Se tiene que
Cond(m, x
k
) =

x
k
x
1
+ + x
n

.
Problema 9. Se desea calcular usando el mtodo ideado por Arqumedes, esto es, ins-
cribiendo polgonos regulares de n lados en una circunferencia de radio unidad y haciendo
tender n hacia innito. En concreto, denotemos por f(n) a la mitad del permetro del pol-
gono regular de n lados inscrito en una circunferencia de radio unidad.
Problemas 21
1. Demuestre que
f(n) = nsen(/n), n 3,
y que su lmite es . Si denotamos y
k
= f(2
k+1
) con k 1, demuestre que
y
k+1
= 2
k+2

_
1
2
_
1
_
1
_
y
k
2
k+1
_
2
_
, k N.
2. Utilizando la recurrencia anterior, implemente una funcin en Matlab para evaluar
. El argumento de entrada debe ser el nmero k de la ltima iterada y
k
a obtener.
Muestre una tabla de resultados con las primeras 25 entradas. Hay valores extraos?
Qu ocurre si seguimos iterando?
3. Era previsible la aparicin del fenmeno numrico observado en el apartado dos?
cmo podra reformularse la recurrencia anterior para eliminar dicho fenmeno?
4. Repita el apartado dos con las variaciones expuestas en el apartado tres y verique la
bondad numrica de la nueva recurrencia.
Indicacin: El siguiente chero proporciona una tabla con los n primeros valores de la recu-
rrencia mencionada en el problema, as como el correspondiente error absoluto cometido.
function arquimedes(n)
k=1;
y=2*sqrt(2);
rel=abs(pi-y)/pi;
fprintf(k=%2.0f // y=%16.15f, error relativo= %6.5e \n,k,y,rel)
for k=2:n
y=(2^(k+1))*sqrt(0.5*(1-sqrt(1-(y/(2^k))^2)));
rel=abs(pi-y)/pi;
fprintf(k=%2.0f // y=%16.15f, error relativo = %6.5e \n,k,y,rel)
pause(0.2)
end
end
Problema 10. Denotemos por F el conjunto de todos los nmeros en coma otante del
sistema IEEE de doble precisin de Matlab eliminando los valores excepcionales tales
como Inf, Nan, nmeros denormales, ...
1. Cantos elementos hay en F?
2. Qu tanto por ciento de elementos de F pertenecen al intervalo 1 x < 2? y al
intervalo 1/64 x < 1/32?
3. Determine por muestreo aleatorio el tanto por ciento de elementos de F que satisfacen
la relacin lgica de Matlab
x*(1/x)==1.
22 Leccin 1.- Introduccin a Matlab y al Anlisis Numrico
Indicacin: La relacin lgica del apartado tres es, obviamente, satisfecha en aritmtica exac-
ta por todo nmero no nulo. Sin embargo, a partir del muestreo aleatorio se obtiene que
solamente un 85 por ciento de los elementos de F la verican.
Problema 11. La orden format hex de Matlab muestra en pantalla y en formato hexa-
decimal (base 16) la representacin interna en Matlab de un nmero dado. En concreto, si
dicho nmero x viene dado en formato IEEE de Matlab como 2
e
(1 + f), al ejecutar
>> format hex, x
obtenemos una sequencia nita de valores hexadecimales de modo que los tres primeros
dgitos representan el valor de e y los restantes el valor de f. Por ejemplo,
>> format hex, 5
>> ans= 4014000000000000
Esto signica que e = 1023 + 1 16
0
+ 0 16
1
+ 4 16
2
= 2 (10 en binario) y f =
4 16
1
= 1/4. Como 1/4 es 0.001 en binario, vemos que
2
(10)
2
(1 + (0.001)
2
) (en base diez) 4 (1 + 1/4) = 5.
Utilizando el formato hexadecimal de Matlab compruebe que incluso expresiones tan
sencillas como >>t=0.1 conllevan errores de redondeo.

Vous aimerez peut-être aussi