Este documento presenta las soluciones a una serie de preguntas sobre errores de redondeo en cálculos numéricos realizados en MATLAB. Se analizan los errores al sumar π varias veces, al usar distintas precisiones de números, y al calcular raíces cuadradas. El error relativo crece exponencialmente a medida que aumenta el número de sumas o la precisión disminuye. Calcular raíces cuadradas puede introducir gran error, pero usar una forma alternativa reduce el error drásticamente.
Sanidad en alpacas, enfermedades infecciosas y parasitarias
Simulación en Ing. Eléctrica - Errores de redondeo
1. Simulación en Ingeniería Eléctrica
ELI-213
INFORME: GUÍA DE TRABAJO N° 1
ERRORES DE REDONDEO
Profesor: - Esteban Gil Sagás
Integrantes: - Sebastián Flores Carrasco
- Carlos Vergara Branje
Fecha: 28/03/2014
2. Pregunta A: Para , sume n veces π y compare su resultado con el valor real de la
suma. ¿Cuánto es el error relativo y a qué se debe?
Solución:
El código programado en MATLAB para este problema fue:
Lo que arroja los siguientes valores:
Se aprecia una diferencia del valor real de la multiplicación de n veces pi con la suma de pi n veces
en las últimas 4 cifras significativas, específicamente desde la cifra significativa 11.
Esto se debe a un error de redondeo al momento de hacer la sumatoria, ya que hay una
representación limitada de números en la memoria del computador, por lo que redondea el
número a la cantidad de dígitos de decimales que aguanta, en este caso, casi 16 decimales
(precisión double).
Esto significa un error relativo pequeño, del orden de 1e-10%.
3. Pregunta B: Repita el experimento anterior, pero sumando π aproximado con precisión simple
(use la función single()). Compare con el resultado anterior.
Solución:
El código programado en MATLAB para este problema fue:
El resultado obtenido por esta simulación es , lo que es un error
increíblemente alto comparado con el primero, aproximadamente veces mayor que en a).
Este error tiene este valor ya que en single() el computador almacena aproximadamente 7
decimales, versus los casi 16 decimales que almacena en double() . En este caso tenemos en el
cálculo errores de redondeo, ya que como es un número infinito, la sumatoria se va
corrompiendo más rápido que en el caso a).
4. Pregunta C: Diseñe un programa que permita graficar la evolución del error relativo para el caso
A en la medida que se redondea π con distinto número de cifras significativas (use la función
chop() y considere desde 1 a 20 cifras significativas). ¿Cómo crece el error? ¿Por qué se estabiliza
después de cierto punto?
Solución:
El código en MATLAB programado para este problema fue:
5. Este código arroja el siguiente gráfico:
Como se puede observar, considerar 1 cifra significativa significa un error relativo de
respecto al valor real.
Este error disminuye exponencialmente a medida que se consideran más cifras significativas en la
sumatoria de , estabilizándose el error desde las cifras significativas, que es cuando el error ya
es cercano al .
Este comportamiento decreciente del error relativo a medida que es mayor el número de cifras
significativas, se debe a que el hecho de considerar mas cifras significativas, el redondeo es más
exacto, por lo que disminuye en parte el error por redondeo. De todas formas siempre habrá un
error de redondeo asociado, ya que es un número irracional, y dada la capacidad del programa,
redondeará siempre a alguna cifra.
0 2 4 6 8 10 12 14 16 18 20
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
Evolución de error relativo
N° de cifras significativas
Errorrelativo
6. Pregunta D: Sume n veces 0.5. Repita sumando n veces 0.1. Compare el error relativo en cada
caso e indique por qué uno es mayor que el otro.
Solución:
El código programado en MATLAB para este problema fue:
Los valores entregados fueron:
Es obvio que el error relativo para la tiene que ser cero, ya que el numero es una
potencia de 2, en especifico , por lo que este número, al ser transformado a binario es
exacto, y no tiene perdidas por aproximación ni truncamiento. Caso contrario ocurre con el
número , que al ser transformado a binario se convierte en una sumatoria infinita de potencias
de dos, lo que resulta en el error de la segunda sumatoria.
7. Pregunta E: Repita el experimento anterior usando precisión simple. ¿Qué le dicen sus
resultados?
Solución:
El código programado en MATLAB para este problema fue:
Los resultados arrojados por MATLAB fueron:
De nuevo, el error esperado para la sumatoria de 0.5 fue de 0%, por lo ya expuesto en D), se debe
a que 0.5 es el numero binario exacto . Para la segunda sumatoria, vemos que el error
aumenta en aproximadamente veces, esto por lo analizado en B), se debe a la menor
utilización de decimales en la sumatoria, y a la consecuente corrupción de datos cuando la suma
se repite un millón de veces.
8. Pregunta F: Diseñe un programa que permita graficar la evolución del error relativo para los
casos A, B, D y E en la medida que se aumenta el valor de n (auméntelo exponencialmente para
obtener un mayor rango). Establezca una relación entre el error relativo y el valor de n, compare
sus resultados para los distintos casos, y justifique teóricamente sus resultados.
Solución:
El código programado en MATLAB para este problema fue:
9.
10.
11. Finalmente se agrega el código para que grafique el error relativo versus la cantidad de N, como se
muestra a continuación:
12. Por lo tanto, analizando caso a caso, se tienen los siguientes resultados:
Observación previa: de los gráficos obtenidos en el matlab, el error relativo presenta "caídas" a
cero. Esto se debe a la aritmética de punto flotante, dado que el número sólo puede ser
representando exactamente cuando al expresarlo en fracción el denominador es una potencia de
2. En esos casos el error da 0 porque la multiplicación de da un número con 16 dígitos de
punto flotante , que viéndolo como fracción el denominador es una potencia de 2, por lo que da lo
mismo la sumatoria de .
Caso pregunta A:
Considerando un , la gráfica arrojada por MATLAB es la siguiente:
Dejando de lado el efecto de las caídas del error a 0, la evolución del error relativo a medida que
aumenta el valor de N se comporta de forma exponencial. Era de esperarse, ya que el hecho de
considerar más veces el en la suma (número irracional), hace que el error crezca por redondeo.
Por lo tanto llega un momento en que se suma tantas veces el que el redondeo difiere mucho
del valor real y este se dispara.
10
0
10
1
10
2
10
3
10
4
10
5
10
6
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
x 10
-9
Valor de N
Errorrelativo%
Error relativo versus valor de N
13. Caso pregunta B:
Considerando un , la gráfica arrojada por MATLAB es la siguiente:
Para este caso, el comportamiento de igual forma es exponencial, y se debe a la misma razón que
el caso anterior, en el cual redondeando más veces el valor difiere mucho del real.
A diferencia del anterior, el error es mayor y crece mucho más rápido, debido a que acá se está
aproximando con precisión simple, el cual considera menor cantidad de dígitos decimales, por lo
que el error de redondeo por cada vez que se suma es mucho mayor.
10
0
10
1
10
2
10
3
10
4
10
5
10
6
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Valor de N
Errorrelativo%
Error relativo versus valor de N
14. Caso pregunta D:
Considerando un , las gráficas arrojadas por MATLAB son las siguientes:
Para el gráfico del 0.5, es de esperarse que el error fuese cero, independiente el N, ya que 0.5 se
puede representar como potencia de 2, por lo que queda almacenado de forma exacta (no le
afectan los errores de redondeo).
10
0
10
1
10
2
10
3
10
4
10
5
10
6
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Valor de N
Errorrelativo%
Error relativo versus valor de N, caso 0.5
15. En cambio para el gráfico del 0.1, este número se representa en potencia de 2 con una sumatoria
infinita de términos, por lo que en binario, al operar con este número entran los errores de
redondeo y truncamiento (ídem a la pregunta D).
De igual forma la evolución del error para el último caso debe ser exponencial, ya que a mayor
valor de N, mayores son los errores de arrastre que se dan al truncar y redondear.
10
0
10
1
10
2
10
3
10
4
10
5
10
6
0
0.2
0.4
0.6
0.8
1
1.2
1.4
x 10
-9
Valor de N
Errorrelativo%
Error relativo versus valor de N, caso 0.1
16. Caso pregunta E:
Considerando un , las gráficas arrojadas por MATLAB son las siguientes:
Al igual que en el caso anterior, el hecho de cambiarle la precisión a simple no afecta en los
errores de redondeo, porque 0.5 se representa como potencia de 2, por lo que su
almacenamiento es exacto, y el sumarlo de a poco no representa diferencia con el número real.
10
0
10
1
10
2
10
3
10
4
10
5
10
6
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Valor de N
Errorrelativo%
Error relativo versus valor de N, caso 0.5
17. Como era de esperarse, la evolución del error también debe darse de forma exponencial, ya que el
considerar más veces el número 0.1, acumula errores de redondeo y truncamiento.
A diferencia del caso anterior de 0.1, el hecho de tener precisión simple, hace que el redondeo
haga la aproximación más inexacta, por lo que el error es mayor y crece más rápido que con
precisión doble.
10
0
10
1
10
2
10
3
10
4
10
5
10
6
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Valor de N
Errorrelativo%
Error relativo versus valor de N, caso 0.1
18. Pregunta G: Se sabe que la serie armónica no converge cuando .
Programe una función para determinar el valor de y grafique sus resultados para distintos
valores de n. ¿Por qué el resultado parece converger?
Solución:
El código programado en MATLAB para este problema fue:
Con esto podemos graficar la función para distintos valores, en este caso la graficaremos
entre los valores 1 y 100000.
19. Y el gráfico que nos resulta es el siguiente:
La serie armónica se define como:
Esta serie, a simple vista parece converger, pero no es así, ya que esta es una serie armónica del
tipo:
Este tipo de series solo son convergentes cuando , por eso, aunque la serie parece que
disminuye su pendiente rápidamente, en realidad no lo hace tan rápido como para converger en
infinito. En MatLab si graficáramos esta función hasta el infinito. probablemente en algún punto
convergería, ya que la precisión está determinada por el valor eps, sin embargo esto es por límites
de la maquina, que no es capaz de procesar números menores a eps.
0 1 2 3 4 5 6 7 8 9 10
x 10
4
0
2
4
6
8
10
12
14
Convergencia de la Serie Armonica
n
f(n)
20. Pregunta H: Diseñe un programa que permita evaluar la precisión de su computador , donde
es el número más pequeño para el cual . Compare su resultado con lo obtenido
usando la función eps() de MATLAB ¿Qué conclusión práctica puede sacar a la hora de elaborar sus
propios programas?
Solución:
Los resultados arrojados por MATLAB son:
Con lo que podemos concluir que el programa creado permite obtener la precisión exacta de
MATLAB, que es el valor eps de la consola. Donde eps devuelve la distancia desde 1 hasta el
siguiente numero con precisión doble, que es .
Al hacer nuestros propios programas nos damos cuentas de las ventajas que tiene MATLAB al
analizar casos numéricos, además podemos darnos cuenta a la vez de las limitantes técnicas de
este poderoso software, entender su rango óptimo de funcionamiento, y así en un futuro
entender problemas que tengamos con cálculos de números muy grandes de potencias, o muy
pequeños asociados a sensores de control.
21. Pregunta I: Considere una ecuación cuadrática de la forma .
o Si , las soluciones de la ecuación son aproximadamente
y
o Si , las soluciones de la ecuación son aproximadamente
y
o Si , las soluciones de la ecuación son
aproximadamente y
Usando la expresión para obtener las soluciones en el computador, determine el error
relativo para cada caso y explique lo que sucede. Averigüe acerca de una forma alternativa para
determinar las soluciones que evite los problemas numéricos y verifíquela.
Solución:
Primero creamos una función usando la expresión anterior , llamada Raiz_3:
Luego utilizamos la función para obtener las soluciones con el método de las raíces, el código es el
mismo, solo cambia el valor de c y de las soluciones guía.
22. Para el primer caso tenemos:
Los Valores arrojados por MATLAB son, para el primer caso:
Y los errores obtenidos fueron:
23. Para el segundo caso
Donde las soluciones exactas son:
Y los errores asociados son:
24. Para el tercer caso:
Donde las soluciones son:
Y los errores arrojados por MATLAB son:
25. Como forma alternativa para determinar las soluciones se puede hacer el siguiente procedimiento:
A la expresión: la podemos multiplicar por un "1" conveniente, que vendría a ser
dependiendo de qué solución sacar.
Esta multiplicación nos daría las siguientes expresiones para obtener las soluciones:
El hecho de que la raíz este en el denominador, reduce el error por efecto de la "cancelación
catastrófica", la cual se da cuando se restan números muy parecidos, perdiendo cifras
significativas. Para este caso vendría a ser el .
Una forma más intuitiva de explicarlo es considerar que para la expresión donde es
un número muy grande y el producto de es muy pequeño, esa resta dentro de la raíz omite
muchas cifras significativas, por lo tanto esa raíz en sí ya tiene un error asociado y el número es
muy parecido a .
Para comprobarlo en numéricamente, se crea en MATLAB la función Raiz_3_alternativa:
cambiando el uso de la función por la nueva función en nuestro
código original, se obtienen las siguientes soluciones y errores para cada caso:
1er caso:
26. Comparando con el resultado de la obtención original, se invierte el error, en el sentido de que
tiene más error ahora la solución , pero de todas formas, el error de las soluciones y como
conjunto es menor.
El error más alto, en el caso de no supera al más alto del original del caso 1.
2do caso:
Al igual que en el caso anterior, se invierte qué solución tiene el error máximo, pero de todas
formas el error de amas soluciones viene a ser menor que con la obtención original.
3er caso:
Ídem a los casos anteriores.
Con esto se comprueba que el método de obtención de raíces propuesto disminuye el error
relativo, con respecto a las soluciones "reales" de la guía.
Por lo tanto, por las razones explicadas anteriormente, la forma alternativa presentada es viable
numéricamente.