{ "metadata": { "kernelspec": { "display_name": "Julia 0.3.7-pre", "language": "julia", "name": "julia 0.3" }, "language_info": { "name": "julia", "version": "0.3.7" }, "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Intervalos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como vimos en el notebook anterior, trabajaremos con intervalos.\n", "\n", "Recordemos que un *intervalo* $[a,b] \\subseteq \\mathbb{R^*}$ es el conjunto \n", "\n", "$$[a, b] := \\{x \\in \\mathbb{R}^* : a \\le x \\le b \\}$$." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Intervalos en Julia" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[1] (i) Define un tipo comp\u00f3sito de Julia `Intervalo` para representar un intervalo de dos n\u00fameros reales, que incluya redondeo dirigido. Por el momento supongamos que todos los elementos ser\u00e1n de tipo `BigFloat`.\n", "\n", "Para ello, deber\u00e1s definir constructores que acepten cadenas y/o n\u00fameros.\n", "\n", "(ii) Implementa las operaciones b\u00e1sicas sobre intervalos.\n", "\n", "(iii) Limpia tu c\u00f3digo para reducir la repetici\u00f3n de c\u00f3digo, al sacar cada vez c\u00f3digo en com\u00fan a una funci\u00f3n por separado.\n", "\n", "[2] Haz un *m\u00f3dulo* de Julia llamado `Intervalos` en un archivo `intervalos.jl`, que contiene todas las definiciones anteriores. \n", "\n", "[3] (i) Escribe *tests* (\"pruebas\") usando [`FactCheck.jl`](https://github.com/JuliaLang/FactCheck.jl).\n", "\n", "Estos tests se deber\u00e1n correr cada vez que modifiques tu c\u00f3digo, \u00a1para verificar que no lo hayas estropeado entre tanto!\n", "\n", "(ii) \u00a1Intenta destruir el c\u00f3digo de alguien m\u00e1s! O sea, escribe tests que realmente prueben el c\u00f3digo del otro (\u00a1\"extreme testing\"!)" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Operaciones con intervalos " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El prop\u00f3sito de trabajar con intervalos es, por supuesto, el poder *usarlos* para llevar a cabo c\u00e1lculos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[4] Utiliza tu c\u00f3digo para rehacer el c\u00e1lculo de $\\pi$ del notebook 5. Ahora, \u00a1deber\u00e1 ser mucho m\u00e1s f\u00e1cil! \n", "\n", "\u00bfCu\u00e1l es la diferencia entre el c\u00e1lculo mediante intervalos y el c\u00e1lculo original que hicimos?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sin embargo, hay sutilezas con las operaciones con intervalos:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[5] (i) Define la potencia para intervalos.\n", "\n", "(ii) Para el intervalo $X = [-1,1]$, calcula $X \\cdot X$ y $X^2$ (donde $\\cdot$ denota la multiplicaci\u00f3n de intervalos). \u00bfQu\u00e9 observas? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(iii) Calcula $[-1,1] \\cdot \\left([-1,0] + [3,4]\\right)$ y $[-1,1]\\cdot [-1,0] + [-1,1] \\cdot [3,4]$. \u00bfQu\u00e9 observas?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[6] Con las operaciones definidas en Julia, podemos insertar intervalos en c\u00e1lculos sencillos.\n", "\n", "(i) Define una funci\u00f3n polinomial $p_1(x) := (x-1)(x-2)$. \n", "\n", "(ii) \u00bfC\u00f3mo se puede mandar a $p_1$ un intervalo como argumento?\n", "\n", "(iii) \u00bfQu\u00e9 representa el resultado?\n", "\n", "(iv) Juega con distintos intervalos como entrada y dibuja los resultados. \u00bfQu\u00e9 observas?\n", "\n", "(v) \u00bfQu\u00e9 pasa si reescribes $p_1$ en una forma equivalente? \u00bfEn otra forma equivalente?\n", "\n", "(vi) Pensando en este ejemplo de polinomios, \u00bfpara qu\u00e9 nos sirven los intervalos?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[7] (i) Haz una implementaci\u00f3n de tu idea de la pregunta [6].\n", "\n", "(ii) Pru\u00e9balo con $p_2(x) := x^2 - 2$.\n", "\n", "(iii) Pru\u00e9balo con otros polinomios." ] } ], "metadata": {} } ] }