Anda di halaman 1dari 17

Nmero, algoritmo y errores

ndice
1.! Introduccin
2.! Errores absolutos y relativos
3.! Almacenamiento de nmeros en un ordenador
!
!

4.!
5.!
6.!
7.!

Nmeros enteros
Nmeros reales

Concepto de algoritmo
Clasificacin de los errores
Propagacin de los errores
Condicionamiento numrico

Veamos que pasa si ejecutamos la siguientes


instrucciones con Matlab
>> a = 7/pi
>> a*pi-7
Qu resultado deberamos obtener?
Qu resultado obtenemos?
Y si calculamos sin(pi)?
Obtenemos el resultado esperado?

Los resultados anteriores son debidos a la


existencia de errores numricos de
almacenamiento.
Debido al hecho inevitable que los ordenadores
digitales slo pueden almacenar una cantidad finita
de informacin, se producen errores numricos por
el mero hecho de almacenar un nmero en general.
Aunque algunos nmeros pueden ser almacenados
exactamente, en general al almacenar un nmero
en un ordenador cometeremos errores de
almacenamiento o redondeo.

En el ejemplo que hemos visto:


>> a = 7/pi
>> a*pi-7
Matlab almacena el nmero pi con un nmero finito de
decimales cometiendo un error de almacenamiento.
Naturalmente, al efectuar operaciones con este nmero, el
resultado se ve afectado por estos errores tambin y por eso
no obtenemos cero como se esperaba.
Adems, los resultados se vuelven a almacenar en el
ordenador por lo que de nuevo se cometen errores de
almacenamiento. Por lo tanto, cuando se opera con un
ordenador, se comenten errores de almacenamiento que a
su vez se van propagando (propagacin de errores).

En general, los resultados proporcionados por los


ordenadores son muy precisos, pero siempre
debemos tener presente la existencia de los
errores de almacenamiento y su propagacin
y asegurarnos que estos errores son despreciables
en relacin a la precisin con la que necesita
obtener los resultados.
En la pgina
http://www.ima.umn.edu/~arnold/disasters/disasters.html

pueden encontrarse algunos ejemplos de


problemas causados por la propagacin del error en
la resolucin de problemas en ingeniera.

Fallo del Misil Patriot (Guerra del Golfo, 1991)


Durante la guerra del golfo, un misil americano fall
al intentar interceptar un misil iraqu.
Motivo: se calcul con poca precisin el tiempo
interno del misil.
El ataque del misil iraqu mat a 28 soldados e hiri
unas 100 personas.

El reloj interno meda en dcimas de segundo, y para


calcular el tiempo en segundos se multiplicaba por 1/10.
El nmero 1/10 es un nmero peridico en binario, y al
almacenar ste nmero se cometi un error de redondeo de
0.00000009510.
La bateria del misil Patriot llevaba unas 100 horas
funcionando que medido en dcimas de segundo son
3600000.
Al pasar este tiempo a segundos, se cometi un error de
3600000 ! 0.000000095 = 0.342 segundos
En este tiempo, el misil iraqu recorri ms de medio
quilmetro respecto de la posicin prevista de intercepcin.

En este tema entenderemos el origen de dichos


errores.
Aunque no ser objetivo de este curso, es
importante adems, tratar de cuantificarlos con el
objetivo de controlarlos, esto es, obtener cotas del
error.

Errores
Definiciones
! Error absoluto y relativo
x valor exacto y x valor aproximado
! Error absoluto

Error relativo

Ejemplo: considerad la aproximacin 3.14 del


nmero pi. Comprovad que el error absoluto es
0.00159 y el error relativo es 0.000507.

! Cifras significativas
!

Las cifras significativas de un nmero son


la primera cifra no nula i las siguientes

La aproximacin x a x tiene q cifras


significativas correctas si el error relativo
verifica

Ejemplo: 3.14 tiene 3 cifras significativas.


Cuntas cifras significativas correctas tiene la
aproximacin 3.14 del nmero pi?
El error relativo es 0.000507 " 0.005!10-2

Nmeros
Representacin de un nmero en base n
(dp dp-1 d1d0.d-1 d-(q-1) d-q)n =
=dpnp + dp-1np-1 + + d1n + d0n0 +
d-1n-1 + + d-(q-1) n-(q-1) + d-qn-q
(124.5)10 = 1!102 + 2!101 + 4!100 + 5!10-1
(101.11)2 = 1!22 + 0!21 + 1!20 + 1!2-1+ 1!2-2
En un ordenador los nmeros se guardan en binario

Almacenamiento de nmeros enteros


Los nmeros enteros se almacenan utilizando s
posiciones de memoria (bits) de las cuales se
reserva una para el signo.
ds-1 ds-2

d2

d1

d0

0+

signo

|Nmax| = 2s-2 + + 22 + 2 + 1 = 2s-1 -1

Almacenamiento de nmeros reales


! base 2
! coma flotante
! M posiciones para la mantisa
! E posiciones para el exponente
mantisa
d-1

d-2

d-3

exponente
d-(M-1)

d-M

dE-1 dE-2

d2

d1

d0

signo del exponente

signo del nmero

Ejemplo: (0.10101)2 ! 2-(10)2 =(2-1+2-3+2-5)!2-2 = 0.1640625


1

|Nmax| =

2-1

2-2

1-2(1-M)

++

2E-1 -1
1
0

|Nmin| =

2E-2 + + 21 + 20

2-(M-1)

2-1

- 2E-2 + + 21 + 20

- 2E-1

=2
1

1
0

Almacenamiento en Matlab
En Matlab se usa el formato double que usa 64 bits
totales:
11 para el exponente (E=11)
53 para la mantisa (M=53)
Por lo tanto, los nmeros mximos y mnimos que se
pueden almacenar con Matlab son:

|Nmax| = (1-2(1-53)) ! 2( 211-1 -1) < 21023 # 0.899 ! 10308


|Nmin| = 2-( 211-1 ) = 2-1024 # 0.556 ! 10-308

Underflow y overflow
Overflow ! error que se produce cuando se intenta
almacenar un nmero ms grande que el mximo
permitido por el tipo de nmero usado
Underflow ! error que se produce cuando se intenta
almacenar un nmero menor que el mnimo
permitido
Ejecutad el programa potencias2.m para comprobar el
overflow y underflow de Matlab.
Obtenemos los resultados esperados?

El programa potencias2.m pide por pantalla un entero n


y escribe en el fichero potencias2.res las potencias
2i
i=0...n
si n es positivo
i
i =0:-1:n
si n es negativo
2
Qu valores mximos y mnimos de n deberamos
poder calcular y qu obtenemos?

|Nmax| < 21023

|Nmin| = 2-1024

Mejoras de Matlab:
! Overflow: no se guarda el 1 de la coma flotante 0.101
! Underflow: permite poner ceros en la mantisa 2-52!2-1022
0

1
0

-1022

Error relativo de
almacenamiento
En Matlab los nmeros de almacenan en base 2 con 53
bits para la mantisa (sin contar el signo) y 11 bits
para el exponente.
Cul es el error relativo que se comete al almacenar
un nmero mediante truncamiento?
Nmero: (. d-1 d-2 d-3 ... d-52 d-53 d-54 d-55)2 ! 2exp

d-1

d-2

d-3

d-51

d-52

d-53

1
0

exp.

Nmero: (. d-1 d-2 d-3 ... d-52 d-53 d-54 d-55 ... )2 ! 2exp
d-1

d-2

d-3

d-51

d-52

d-53

1
0

exp.

Error relativo:
|rx| =

(. 0 0 0 ... 0 0 d-54 d-55 ... )2 ! 2exp


(. d-1 d-2 d-3 ... d-52 d-53 d-54 d-55 ...)2 ! 2exp

(. d-54 d-55 ... )2 ! 2exp ! 2-53


(. d-1 d-2 d-3 ... d-52 d-53 d-54 d-55 ... )2 ! 2exp

(. d-54 d-55 ... )2


(. d-1 d-2 d-3 ... d-52 d-53 d-54 d-55 ... )2

! 2-53

|rx| =
<
=
=
=

(. d-54 d-55 ... )2


(. d-1 d-2 d-3 ... d-52 d-53 d-54 d-55... )2

! 2-53

(. 1 1 1 1 1 1 1 1 ... )2
(.100000...001111111)2

! 2-53

2-1 + 2-2 + 2-3 + 2-4 + ...


2-1 + 2-54 + 2-55 + 2-56 + 2-57 + ...
1 + 2-1 + 2-2 + 2-3 + ...
1 + 2-53 ! (1 + 2-1 + 2-2 + ...)

! 2-53
! 2-53

2
1
! 2-53 =
! 2-52 =
1+ 2-53 ! 2
1+ 2-54 ! 2

= 2.22 ! 10-16

Error relativo de
almacenamiento
De la misma forma, se obtiene que el error relativo
mximo que se comete cuando se almacena un
nmero utilizando la tcnica de aproximacin es:
|rx| " 1.11 ! 10-16
Mirar el fichero suma_1_eps.m para comprobar que en
Matlab:
1 + 2-53 = 1 + 1.11 ! 10-16 = 1

ZERO DE MQUINA: 1.11 ! 10-16

Propagacin de errores
Hemos visto que al almacenar un nmero en Matlab se
comete un error de almacenamiento del orden de
10-16.
Naturalmente, al efectuar operaciones con este nmero,
el resultado se ve afectado por estos errores tambin.
Adems, los resultados se vuelven a almacenar en el
ordenador por lo que de nuevo se cometen errores de
almacenamiento. Por lo tanto, cuando se opera con un
ordenador, se comenten errores de almacenamiento
que a su vez se van propagando (propagacin de
errores).

Por lo tanto, cuando implementemos un programa en


Matlab, nos tendremos que asegurar que estos
errores que se van propagando, son despreciables en
relacin a la precisin con la que necesita obtener los
resultados.

Algoritmo bien / mal condicionado:

Un algoritmo puede abstraerse como un operador que


toma unos datos a y devuelve un resultado b.
Si afectamos los datos de un error, !a, el resultado ser
b+!b.
Un algoritmo est bien condicionado si |!b|<M|!a|
donde M>0 es una constante no muy grande.

Algoritmo
Es importante tener en cuenta que dos algoritmos
matemticamente equivalentes no tienen porque serlo
en aritmtica finita.
Comprobad que dan los siguientes comandos:
>> 1e16 * ( (1 1) + 1e-16 )

ans = 1

>> 1e16 * ( (1+ 1e-16) 1 )

ans = 0

Por lo tanto es importante vigilar que los algoritmos


usados no amplifiquen los errores.

Clasificacin de los errores


! Error inherente
Propio de los datos con con los que se inician
los clculos.
! Error de redondeo
Al trabajar con aritmtica finita, slo es posible
almacenar un nmero finito de dgitos
! Error de truncamiento
Un algoritmo ha de tener un nmero finito de
operaciones

Algoritmo
Se quieren calcular las sucesivas potencias del inverso
del nmero ureo utilizando diferentes algoritmos.

El primero consiste en multiplicar la potencia anterior


por "

Teniendo en cuenta que " es raz de la ecuacin


sus potencias se pueden calcular como

2
Y aplicando la propiedad distributiva al producto anterior
se puede escribir un tercer algoritmo para calcular las
potencias de "#

Ejecutad los programas aureo1.m, aureo2.m y


aureo3.m y mirad las diferencias entre los resultados
obtenidos.

Propagacin de errores
Material adicional

x, y valores exactos de dos nmeros


x, y valores aproximados

! Propagacin del error en la suma

! Propagacin del error en la resta

! Propagacin del error en el producto

Propagacin del error en la divisin

Propagacin del error en una funcin

Anda mungkin juga menyukai