UNIVERSIDAD DE EXTREMADURA Departamento de Matemáticas Matemáticas Manuel Fernández García-Hierro Badajoz, Febrero 2008
Capítulo VI Concepto de error 6.1 Introducción Uno de los temas más importantes en Análisis Numérico es el estudio de las operaciones aritméticas que se utilizan en los cálculos, muchas de las cuales son hechas usando ordenadores. Este capítulo examina la representación de números en ordenadores y los errores que implican.
6.2 Sistemas de numeración posicionales. Sistema binario Para representar números y hacer cálculos con ellos, los ordenadores usan el sistema binario de numeración, o alguna variante de él. En el sistema decimal, el número 342.105 significa 3 10 2 + 4 10 1 + 2 10 0 + 1 10 1 + 0 10 2 + 5 10 3. Es una suma de múltiplos de potencias de 10. Se usan diez dígitos: 0, 1,..., 9 y 10 es la base del sistema decimal.
En el sistema binario los números se representan como sumas de múltiplos de potencias de 2. Se usan dos dígitos: 0, 1 y 2 es la base del sistema binario. Por ejemplo el número 1101.11 en el sistema binario representa a 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 + 1 2 1 + 1 2 2 (1) en el sistema decimal. Cuando haya peligro de confusión, incluiremos el número en un paréntesis y especificaremos la base como un subíndice. Por
ejemplo: (1101.11) 2 = (13.75) 10 Para convertir un número en binario a decimal, se usa la fórmula 1. Ejemplo 1. (111... 1) 2 con n consecutivos 1s a la izquierda del punto binario es en el sistema decimal 2 n 1 + 2 n 2 +... 2 1 + 2 0 = 2 n 1. Los principios que rigen los algoritmos de la suma, resta, multiplicación y división en binario son los mismos que en el sistema decimal.
Conversión de decimal a binario Supóngase que x es un número entero escrito en decimal. Queremos encontrar coeficientes a 0, a 1,..., a n, todos 0 o 1 tales que a n 2 n + a n 1 2 n 1 + + a 1 2 1 + a 0 2 0 = x. El entero binario será (a n a n 1 a 0 ) 2 = (x) 10. Para encontrar los coeficientes, comenzamos dividiendo x por 2, y denotamos el cociente x 1. El resto es a 0. A continuación
dividimos x 1 por 2, y denotamos al cociente x 2. El resto es a 1. Se continua el proceso...
Supóngase que x es una fracción decimal, positiva y menor que 1.0. Queremos encontrar coeficientes a 1, a 2, a 3,..., todos 0 o 1 tales que a 1 2 1 + a 2 2 2 + a 3 2 3 + = x. La fracción en binario será (.a 1 a 2 a 3... ) 2 = (x) 10. Para encontrar los coeficientes, se denota x = x 1. Se multiplica x 1 por 2 y se denota x 2 = Frac(2x 1 ), a la parte fraccional de
2x 1. La parte entera Ent(2x 1 ) es a 1. Se multiplica x 2 por 2 y se denota x 3 = Frac(2x 2 ), a la parte fraccional de 2x 2. La parte entera Ent(2x 2 ) es a 2. Y así sucesivamente. Ejemplo 2. Convertir a binario el número decimal 5.578125. Para la parte entera se sigue el procedimiento del ejemplo anterior. (5) 10 = (101) 2. Para la parte fraccional x 1 = x = 0.578125, se usa el algoritmo
siguiente: 2x 1 = 1.15625 x 2 = 0.15625 a 1 = 1 2x 2 = 0.3125 x 3 = 0.3125 a 2 = 0 2x 3 = 0.625 x 4 = 0.625 a 3 = 0 2x 4 = 1.25 x 5 = 0.25 a 4 = 1 2x 5 = 0.50 x 6 = 0.5 a 5 = 0 2x 6 = 1 x 7 = 0 a 6 = 1 Combinando ambos resultados se obtiene (5.578125) 10 = (101.100101) 2. Ejemplo 3. Convertir la fracción decimal 0.1 a binario.
Usando el procedimiento anterior se obtiene (0.1) 10 = (0.0 0011 0011... ) 2 una fracción binaria periódica mixta. Si se guarda esta fracción decimal exacta en un ordenador que trabaja en binario, se produce un error.
6.3 Números máquina. Redondeo simétrico y redondeo por truncamiento Los problemas que aborda el Cálculo Numérico se resuelven mediante la realización de cadenas de operaciones aritméticas en un ordenador. Deberán, por tanto, almacenarse en la máquina los datos de partida (que se introducen mediante un dispositivo de entrada: un teclado, un fichero de datos,... ), así como los resultados intermedios. Finalmente, deberán comunicarse los resultados finales (mediante un dispositivo de salida: pantalla, escritura de un fichero,... ). En esta sección nos ocupamos de la forma en que se almacenan los números en
la máquina. La capacidad de almacenamiento de una máquina es finita, lo que implica que ninguna máquina es capaz de guardar ni siquiera un solo número irracional; por ejemplo las infinitas cifras de π. Notación decimal en punto flotante El número 625.231, admite las siguientes representaciones en punto flotante 625.231 + 0, 62.5231 + 1, 6.25231 + 2, 6252.31 1,...
que deben entenderse como 625.231 10 0, 62.5231 10 1, 6.25231 10 2, 6252.31 10 1,... De entre todas las representaciones elegimos la normalizada: 6.25231 10 2 que está caracterizada por ser la fracción un número entre 1 y 10. Es decir la notación decimal en punto flotante normalizada
de un número es: que corresponde al número ±m ± e con 1 m < 10 y e N ±m 10 ±e. El número m se denomina mantisa y e el exponente. La representación de un número en punto flotante decimal es la dada en la fórmula anterior, pero con limitaciones sobre el número de dígitos de la mantisa y sobre el tamaño del exponente. Por ejemplo, podemos suponer que el número
máximo de dígitos de la mantisa es 10 y que 99 e +99. Se dice que un ordenador con tal representación tiene una aritmética de punto flotante de 10 dígitos decimales. Como una consecuencia a la limitación anterior, ningún número con más de 10 dígitos en su mantisa puede ser almacenado de manera exacta. Un número real no puede ser almacenado de forma exacta debido a: a) Su exponente, una vez normalizado, está fuera del rango admitido. Es decir el número es demasiado grande o pequeño. En el primer caso se produce un desbordamiento por exceso y
la máquina representa el número como ±. En el segundo caso se produce un desbordamiento por defecto y la máquina representa al número por 0. b) Su mantisa tiene más de 10 cifras, (el número tiene más cifras que las que puede almacenar). En este caso se aproxima por un número exacto cercano. Este proceso se llama redondeo. El redondeo se lleva a cabo de la siguiente manera: Sea x = ±a 0.a 1 a 2 10 e con e dentro del rango admisible. Sean x i y x d los números exactos más próximos por la izquierda
y por la derecha respectivamente, esto es, En otro caso, si x > 0 Si x < 0,... x = x i = x d si x es un número exacto. x i = a 0.a 1 a 2 a 9 10 e, x d = (a 0.a 1 a 2 a 9 + 10 9 ) 10 e. Definimos dos tipos de redondeo: La técnica más sencilla consiste en truncar x a 10 dígitos, ignorando el resto. Es decir r(x) = x i si x > 0 y r(x) = x d si x < 0.
La segunda técnica consiste en redondear x al más próximo entre x i y x d ; en el caso en que estén a igual distancia se elige x d. El redondeo al más próximo, que llamaremos simplemente redondeo, es: r(x) = { xi si x i x < x i+x d 2 x d si x i+x d 2 x x d. Supongamos que x > 0 tiene exponente e = 0. Puesto que x i + x d 2 = a 0.a 1 a 2 a 9 + 10 9 /2
Si a 10 5, entonces r(x) = x i = 1.a 1 a 2 a 9 y si a 10 5, entonces r(x) = x d = 1.a 1 a 2 a 9 + 10 9. Consideraciones análogas sirven para el caso en que x < 0. Notación binaria en punto flotante Análogamente a lo anterior se puede utilizar la notación binaria en punto flotante: Un número binario representado en punto flotante normalizado tiene una expresión de la forma: s S e m donde s es el signo del número (0 para los positivos, 1 para los negativos), S es el signo del exponente, el exponente e es
un número natural en base 2 y m se denomina mantisa: es un número en base 2 verificando 1 m < (10) 2. El número así representado es ( 1) s m 2 ( 1)S e d donde e d es la conversión decimal del número binario e (es decir, el número de lugares que hay que correr el punto ). Ejemplo 4. 1 0 10 1.01 es el número 1.01 2 2 = ( 101) 2 = ( 5) 10
0 1 1 1.1 es el número 1.1 2 1 = (0.11) 2 = 2 1 + 2 2 = (0.75) 10 Cada número se almacena en la máquina en lo que se denomina una palabra. La mayoría de los ordenadores actuales tienen una longitud de palabra de 32 posiciones de memoria o bits, que es la abreviatura de binary digits. Estos 32 bits se distribuyen de la siguiente forma: 1 se usa para el signo del número, 8 para el exponente con signo y 23 para la mantisa. El hecho de que la mantisa m verifique 1 m < (10) 2 hace que la primera cifra de m sea un 1. Este 1 común a todos los números, no se guarda, (se sobreentiende) y, por tanto, los 23
bits que se destinan a la mantisa sirven para almacenar las 24 primeras cifras del número. Desde luego utilizando palabras de 32 bits, tan solo puede ser representada una cantidad finita de números distintos: del orden de 2 32. Estos números, representables en el ordenador de forma exacta, se llaman números máquina. Es fácil encontrar números que no son números máquinas: por ejemplo 1.0 2 128 ((128) 10 = (10000000) 2 ) que no cabe en la parte dedicada al exponente con signo y 1.1 1 que no cabe en el espacio dedicado a la mantisa. El primero es un ejemplo en el que se sobrepasa la capacidad del ordenador
(desbordamiento) y el segundo muestra que hay números que no se pueden usar en forma exacta y habrá que aproximarlos (redondeo). Si nos preguntamos por la representación del 0 la primera respuesta es: una palabra en la que los 32 bits tengan el valor 0. Pero según el convenio de que se sobreentiende que el primer número de la mantisa es un 1, hace que la palabra anterior represente al número binario 1. De hecho, el 0 no es número máquina, si se utiliza esta representación. Este problema, junto con el de la doble representación de los números con exponente +0 y 0 se resuelve mediante el
formato estándar de representación (IEEE Storage Format: Institute of Electrical and Electronic Enginners Storage Format). Para almacenar la información correspondiente al exponente e, se almacena en los 8 bits destinados al exponente el número E = e + 127. Por tanto Signo del número E = e + 127 Mantisa 1 bit 8 bits 23 bits
0 e + 127 = E 255 = 2 8 1 = (1. 8.. 1) 2. Así que los exponentes de los números están en el rango 127 e d = E d 127 255 127 = 128. Los valores extremos 0 y 255 se usan para números especiales. Si s es el signo del número almacenado, m son los 23 números de la mantisa y E d es la conversión decimal del número binario E guardado en los 8 bits dedicados al exponente,
(cuando éste toma valores entre 1 y 254 ambos inclusive), el número anteriormente representado corresponde a ( 1) s 1.m 2 E d 127 A este tipo de números se les denomina números normales. Ejemplo 5. El número binario 101.11 = 1.0111 2 2 se ± 2 + 127 Mantisa representa de la siguiente forma 0 10000001 011100000000000000 A la inversa, el número almacenado como 1 01111011 10100000000000000000000
es el número 1.01 2 123 127 = 1.101 2 4 = ( 0.0001101) 2. Cuando el exponente toma el valor 0 el convenio es ligeramente distinto: el valor representado es ( 1) s 0.m 2 126. De este modo se puede trabajar con números máquina más pequeños, en valor absoluto, que los que se obtendrían con el convenio habitual. Los números máquinas así representados se denominan subnormales. Los números con exponente 255 representan las excepciones:
± y NaN (Not a number). Los valores ± se producen a causa de un desbordamiento por exceso, mientras que el valor NaN surge al realizar las clásicas indeterminaciones ( 0 0,,... ) La tabla siguiente contiene la representación y valor decimal de algunos números interesantes
Número Representación Valor decimal +0 0 00000000 0... 0 0.0 0 1 00000000 0... 0 0.0 Máx n o nor 0 11111110 1... 1 3.40282347 10 38 Mín n o nor 0 00000001 0... 0 1.17549435 10 38 Máx n o sub 0 00000000 1... 1 1.17549435 10 38 Mín n o sub 0 00000000 0... 01 1.40129846 10 45 + 0 11111111 0... 0 infinito 1 11111111 0... 0 infinito Desbordamiento y redondeo Ya hemos visto la forma estándar de almacenar números máquina y hemos insistido en que éstos constituyen sólo una cantidad finita. Un número real no es un número máquina debido a:
a) Su exponente, una vez normalizado, está fuera del rango admitido. Es decir el número es demasiado grande o pequeño. En el primer caso se produce un desbordamiento por exceso y la máquina representa el número como ±. En el segundo caso se produce un desbordamiento por defecto y la máquina representa al número por 0. b) Su mantisa tiene más de 23 cifras, (el número tiene más cifras que las que puede almacenar). En este caso se aproxima por un número máquina cercano. Este proceso se llama redondeo. El redondeo se lleva a cabo de la siguiente manera:
Sea x = ±1.a 1 a 2 a 23 a 24 a 25 2 e d con e d dentro del rango admisible. Sean x i y x d los números máquinas más próximos por la izquierda y por la derecha respectivamente, esto es, x = x i = x d si x es un número máquina. En otro caso, si x > 0 Si x < 0,... x i = 1.a 1 a 2 a 23 2 e d, x d = (1.a 1 a 2 a 23 + 2 23 ) 2 e d.
Definimos dos tipos de redondeo: La técnica más sencilla consiste en truncar x a 23 dígitos, ignorando el resto. Es decir r(x) = x i si x > 0 y r(x) = x d si x < 0. La segunda técnica consiste en redondear x al más próximo entre x i y x d ; en el caso en que estén a igual distancia se elige el que tiene a 23 = 0. Supongamos que x > 0 tiene exponente e d = 0. Puesto que x i + x d = 1.a 1 a 2 a 23 + 2 24 2 = 1.a 1 a 2 a 23 100. Si a 24 = 0, entonces r(x) = x i = 1.a 1 a 2 a 23 y si a 24 = 1,
entonces r(x) = x d = 1.a 1 a 2 a 23 + 2 23. En el caso en que estén a igual distancia: a 24 = 1, a 25 = a 26 = = 0, se elige de entre x i y x d el que tiene a 23 = 0. Consideraciones análogas sirven para el caso en que x < 0. Usaremos principalmente el redondeo al más próximo y lo llamaremos simplemente redondeo.( Es la opción por defecto en los ordenadores) Qué error se comete cuando en lugar de trabajar con un número real se trabaja con su redondeo?
Se obtiene la siguiente cota del error de redondeo absoluto: x r(x) x d x i 2 2 23 2 e d 2 = 2 24 2 e d Mientras que la cota del error de redondeo relativo es (teniendo en cuenta que x 2 e d): x r(x) x 2 24 2 e d 2 e = 2 24. d La distancia entre dos números máquina es 2 23 2 e d. Para
dos números máquina con e d = 0, su distancia es 2 23, que se llama precisión o epsilon de la máquina. La cota del error de redondeo relativo, 2 24, es exactamente la mitad de la precisión de la máquina. Por ejemplo, la distancia entre 1 y el siguiente número máquina 1.0. 22.. 01 es el epsilon de la máquina. Puesto que r(x) = = ( ) x + r(x) x x x ( 1 + r(x) x ) x x
se verifica r(x) = (1 + ɛ)x ɛ 2 24 = precisión máquina 2 También podemos definir truncamiento y redondeo para números representados en decimal. 6.4 Error absoluto y relativo Una gran parte del Análisis Numérico consiste en desarrollar una sucesión de cálculos numéricos para resolver un problema. Una parte de este proceso consiste en el análisis de los errores
que aparecen en este proceso, bien debidos a los errores de redondeo en las operaciones aritméticas, bien debidos a otras causas. En esta sección se establecen las definiciones de error absoluto y relativo, algunas de sus causas y algunos ejemplos. El error (absoluto) de una cantidad calculada se define como Error = valor verdadero valor aproximado y el error relativo
ErrorRel = Error valor verdadero Si x T es el valor verdadero y x A el aproximado, entonces Error(x A ) = x T x A ErrorRel(x A ) = x T x A x T.
Por ejemplo, x T = π = 3.14159265..., x A = 22 7 = 3.1428571..., ( ) 22 Error = π 22. = 0.00126 7 7 ( ) 22 ErrorRel = π 22 7. = 0.000402 7 π Un concepto relacionado con el de error relativo es el de dígitos significativos. Supongamos que x T está representado
en decimal, x T = a 0.a 1 a 2 10 e, a 0 0. Sea m = 0, 1, 2,.... Se dice que x A tiene m dígitos significativos de precisión respecto de x T, si 10 m e x T x A 5. Naturalmente, x A también tiene dígitos significativos. 0, 1, 2,..., m 1
Ejemplo 6. a) x A = 0.222 tiene tres dígitos significativos de precisión respecto de x T = 0.22.... En efecto,. Luego e = 1. Además x T = 2.2 10 1 x T x A = 0.0002..., 10 4 x T x A = 2.2 5. Luego m e = m + 1 = 4 y m = 3. b) x A = 0.02138 tiene dos dígitos significativos de precisión respecto de x T = 0.02144. En efecto, x T = 2.144 10 2.
Luego e = 2. Además x T x A = 0.00006, 10 4 x T x A = 0.6 5. Luego m e = m + 2 = 4 y m = 2. Si x T x A x T 5 10 m 1, entonces x A tiene m dígitos significativos de precisión con respecto a x T. En efecto, sea x T = a 0.a 1 a 2 10 e, a 0 0.
Entonces Por tanto, x T 10 e+1. 10 m e x T x A 10 m e x T x A x T x T 10 m e 5 10 m 1 10 e+1 5. 6.5 Causas del error Los errores que aparecen al resolver un problema de tipo científico-matemático que implica procedimientos de cálculo son de debidos a diferentes causas. 1. En el proceso de construcción de modelos matemáticos
para representar fenómenos de naturaleza física, química, económica,..., se produce un proceso de simplificación que puede conducir a errores. Por ejemplo el modelo matemático Malthusiano para el crecimiento de una población es N(t) = N(0)e at donde N(t) es el número de individuos de la población en el instante de tiempo t. Para intervalos de tiempo cortos con una población con recursos ilimitados, el modelo matemático es bastante preciso, pero en otras circunstancias, los errores pueden ser muy grandes. Este tipo de errores no se estudia en Análisis Numérico.
2. Errores debidos a fallos en el cálculo aritmético y sobre todo hoy en día, errores debidos a fallos de programación de algoritmos de cálculo. 3. Errores debidos a los datos experimentales. Por ejemplo, la velocidad de la luz en el vacío es c = (2.997925 + ɛ) 10 10 cm/s, ɛ 0.000003 El Análisis Numérico no puede suprimir los errores en los datos, pero puede analizar cómo se propagan a lo largo de los cálculos y proponer la forma de cálculo para minimizar su propagación. 4. Errores de truncamiento y redondeo.
5. Errores por aproximación ( o discretización) matemática. Para ilustrar este tipo de error, considérese el cálculo de la integral I = 1 0 e x2 dx. No hay función primitiva expresable mediante funciones elementales del integrando y la integral no puede ser calculada expĺıcitamente usando la regla de Barrow. En lugar de ello, aproximamos la integral por una cantidad que sí puede ser calculada. Usamos el polinomio de Taylor que aproxima a la
función: Entonces I. = e x2 1 0. = 1 + x 2 + x4 2! + x6 3!. ) (1 + x 2 + x4 2! + x6 3! dx. Errores frecuentes A continuación se describen tipos de errores que aparecen con frecuencia en la práctica. 1. Error por pérdida de dígitos significativos. También llamado error por cancelación. Aparece cuando
restamos dos cantidades muy próximas. El siguiente ejemplo da las claves para entender este tipo de error. Evaluemos f(x) = x ( x + 1 x ) para una sucesión creciente de valores de x. Usamos una calculadora con una aritmética de punto flotante de seis dígitos decimales, que usa redondeo. Suponemos que los valores exactos son los obtenidos por una calculadora con una aritmética de punto flotante de diez dígitos decimales. Se presentan los cálculos en la tabla siguiente:
x f(x) aproximado f(x) verdadero-exacto 1 4.14210 10 1 4.14214 10 1 10 1.54340 1.54347 100 4.99000 4.98756 1000 1.58000 10 1 1.58074 10 1 10000 5.00000 10 1 4.99988 10 1 100000 1.00000 10 2 1.58114 10 2 Para comprender qué está sucediendo, miremos las etapas de cálculo cuando x = 100. 100 = 10.0000 101 = 10.04987562. = 10.0499, que tiene 6 cifras significativas de aproximación respecto del
valor verdadero. A continuación calculamos 101 100 = 0.049875621. = 0.049900. Veamos cuántas cifras significativas tiene: Desde luego e = 2 10 5 (0.049900 0.049875621) = 10 5 0.000024379 5. Luego 5 = m + 2, m = 3. De modo que se han perdido 3 dígitos significativos.
En este caso particular hay un modo sencillo de evitar la pérdida de dígitos significativos: f(x) = x ( x + 1 x ) ( x + 1 + x ) x + 1 + x = x x + 1 + x 2. Ruido en la evaluación de una función Si la función f(x) es continua en el intervalo [a, b], entonces su gráfica es una curva continua en el plano. Evaluemos la función en puntos del intervalo [a, b] con un ordenador que usa
aritmética de punto flotante con redondeo o truncamiento. Las operaciones aritméticas producen errores en la evaluación de f(x). Si se mira detenidamente el grafo de la función con los valores aproximados de f(x), no parece una curva continua, sino más bien una curva borrosa a causa de los errores en el proceso de evaluación. Cuando un ordenador calcula la gráfica de una función, debe tenerse en cuenta que es una banda formada por puntos aleatorios, con un ancho de banda suficientemente pequeño.. En la mayoría de las situaciones, las consecuencias son inapreciables, pero hay situaciones donde son importantes. Por ejemplo, un programa para calcular la raíces de f(x) puede
considerar que tiene un gran número de raíces sobre la base de muchos cambios de signo, tal como se muestra en la figura siguiente. Propagación del error Si se hace un cálculo con números que contienen errores, entonces el resultado también
estará sometido a error. Primero estudiaremos el efecto producido al usar números aproximados en operaciones aritméticas y posteriormente en la evaluación de funciones. Queremos acotar (x T + y T ) (x A + y A ), (x T y T ) (x A y A ) (x T y T ) (x A y A ), x T y T x A y A. Cuando se usa aritmética de punto flotante en un ordenador, el cálculo de x A + y A implica un error adiccional de redondeo
o truncamiento. Lo que queremos acotar es x T + y T r(x A + y A ). Propagación del error en la evaluación de funciones Sea f(x) una función. Lo que se desea es acotar f(x T ) f(x A ). Usando el Teorema del Valor Medio f(x T ) f(x A ) = f (c)(x T x A ). = f (x A )(x T x A )
Puesto que x A es próximo a x T, tenemos f(x T ) f(x A ). = f (x T )(x T x A ). = f (x A )(x T x A ) En la mayoría de los casos es más conveniente considerar el error relativo. Rel(f(x A )). = f (x T ) f(x T ) (x T x A ) = f (x T ) f(x T ) x T Rel (x A )
En Química, se estudia la ley de los gases ideales donde: P V = nrt P indica la presión del gas, V indica el volumen del gas. n es el número de mol-gramos del gas, R la constante de los gases y T la temperatura del gas. En el sistema de medida MKS R = 8.3143 + ɛ, ɛ 0.0012 Para ver el efecto que produce la incertidumbre de R,
calculemos T suponiendo P = V = n = 1. Entonces T = 1 R. Defínase la función f(x) = 1 x y evalúese en x = R. Siendo x T = R y x A = 8.3143 se tiene x T x A 0.0012.
E = f(x T ) f(x A ) =. = f (x A ) x T x A ( ) 1 (0.0012) x 2 A. = 1.74 10 5. 1 R 1 8.3143
Una cota del error relativo es: E f(x T ) = f(x T ) f(x A ) f(x T ) = f(x T ) f(x A ) x T f(x T ) f(x A ) ( x A + x T x A ) 1.74 10 5 8.3155 =. 0.000144
Referencias Kendall Atkinson, Elementary Numerical Analysis, Second Edition, Jhon Wiley & Sons, Inc. New York, 1993 J.A. Infante del Río, J.M. Rey Cabezas, Métodos Numéricos: Teoría, Problemas y Prácticas con MATLAB, Edit. Pirámide, Madrid, 1999