Como vimos en el notebook anterior, trabajaremos con intervalos.
Recordemos que un intervalo $[a,b] \subseteq \mathbb{R^*}$ es el conjunto
$$[a, b] := \{x \in \mathbb{R}^* : a \le x \le b \}$$.
[1] (i) Define un tipo compósito de Julia Intervalo
para representar un intervalo de dos números reales, que incluya redondeo dirigido. Por el momento supongamos que todos los elementos serán de tipo BigFloat
.
Para ello, deberás definir constructores que acepten cadenas y/o números.
(ii) Implementa las operaciones básicas sobre intervalos.
(iii) Limpia tu código para reducir la repetición de código, al sacar cada vez código en común a una función por separado.
[2] Haz un módulo de Julia llamado Intervalos
en un archivo intervalos.jl
, que contiene todas las definiciones anteriores.
[3] (i) Escribe tests ("pruebas") usando FactCheck.jl
.
Estos tests se deberán correr cada vez que modifiques tu código, ¡para verificar que no lo hayas estropeado entre tanto!
(ii) ¡Intenta destruir el código de alguien más! O sea, escribe tests que realmente prueben el código del otro (¡"extreme testing"!)
El propósito de trabajar con intervalos es, por supuesto, el poder usarlos para llevar a cabo cálculos.
[4] Utiliza tu código para rehacer el cálculo de $\pi$ del notebook 5. Ahora, ¡deberá ser mucho más fácil!
¿Cuál es la diferencia entre el cálculo mediante intervalos y el cálculo original que hicimos?
Sin embargo, hay sutilezas con las operaciones con intervalos:
[5] (i) Define la potencia para intervalos.
(ii) Para el intervalo $X = [-1,1]$, calcula $X \cdot X$ y $X^2$ (donde $\cdot$ denota la multiplicación de intervalos). ¿Qué observas?
(iii) Calcula $[-1,1] \cdot \left([-1,0] + [3,4]\right)$ y $[-1,1]\cdot [-1,0] + [-1,1] \cdot [3,4]$. ¿Qué observas?
[6] Con las operaciones definidas en Julia, podemos insertar intervalos en cálculos sencillos.
(i) Define una función polinomial $p_1(x) := (x-1)(x-2)$.
(ii) ¿Cómo se puede mandar a $p_1$ un intervalo como argumento?
(iii) ¿Qué representa el resultado?
(iv) Juega con distintos intervalos como entrada y dibuja los resultados. ¿Qué observas?
(v) ¿Qué pasa si reescribes $p_1$ en una forma equivalente? ¿En otra forma equivalente?
(vi) Pensando en este ejemplo de polinomios, ¿para qué nos sirven los intervalos?
[7] (i) Haz una implementación de tu idea de la pregunta [6].
(ii) Pruébalo con $p_2(x) := x^2 - 2$.
(iii) Pruébalo con otros polinomios.