aquÃ
Transcription
aquÃ
Mathematica más allá de las matemáticas 2ª Edición (2015). Autor: José Guillermo Sánchez León (http://diarium.usal.es/guillermo). Disponible en: GooglePlay Mathematica es un programa que va mucho más allá que el cálculo simbólico y numérico, es un lenguaje de programación de propósito general. Podrá empezar a utilizarlo desde los primeros minutos, pero si quiere obtener una parte importante de su potencialidad deberá dedicarle tiempo, probablemente mucho menos que si utiliza otros lenguajes de programación. Con el proposito de que el usuario tenga una idea clara de que se encuentra con ante un lenguaje de programación, no solo orientado a cálculos matemáticos, ahora es llamado Wolfram Language aunque por mucho tiempo seguirá siendo conocido como Mathematica y así lo seguiremos llamando en este libro. ◼ Mathematica dio un salto revolucionario con la introducción de lo que vamos a denominar forma lingüística, que consiste en escribir de forma natural la operación o pregunta. Por ejemplo, si quiere resolver una ecuación como 3 x2 + 2 x - 4 = 0, puede escribir casi literalmente lo que busca (la limitación, por ahora, es que debe estar en inglés, aunque frecuentemente un par de palabras en este idioma son suficientes). La salida muestra la sintaxis correcta del input en Mathematica y la solución que en esta caso incluye el resultado exacto y la aproximación decimal. Solve 3 x^2 + 2 x - 4 = 0 Results (1 of 2) {Reduce[- 4 + 2 * x + 3 * x ^ 2 == 0, x], N[Reduce[- 4 + 2 * x + 3 * x ^ 2 == 0, x]]} x 1 3 -1 - 13 x 1 3 13 - 1, x -1.53518 x 0.868517 ◼ Sumamos cantidades en distintas monedas y el resultado se muestra en la moneda que hemos escrito en primer lugar; si lo ejecuta probablemente obtenga un resultado algo distinto pues en el cálculo se aplica automáticamente el tipo de cambio en la fecha en la que se ejecuta la sentencia. $500 + £307 + 127 € » $500. + £307. + €127. $1139.67 ◼ Incluso podemos plantear cuestiones concretas, como es la temperatura en un lugar determinado en este momento. La ventaja a destacar es que la información obtenida podremos manejarla dentro del entorno de Mathematica. 2 Mathematica más allá de las matemáticas Salamanca temperature » AirTemperatureData Salamanca (city) 10. °C ◼ En este ejemplo representamos la escala musical Do mayor para lo que basta con escribir: Music notation: Play sound ◼ En este ejemplo obtenemos el valor del euro en dolares en el momento de ejecutar la sentencia. FinancialData["EUR/USD"] 1.2389 ◼ Podemos elegir un compuesto químico y obtener muchas propiedades del mismo, aquí representamos la molécula de la cafeína. ChemicalData["Caffeine", "MoleculePlot"] ◼ Con dos palabras construimos un reloj dinámico sincronizado con la hora de nuestro ordenador. Ejemplos del libro 3 ClockGauge[Dynamic[]] 11 12 1 10 2 9 3 8 4 7 6 5 ◼ En menos de media línea escribimos las instrucciones necesarias para construir un modelos interactivo del conjunto fractal de Julia. Manipulate[JuliaSetPlot[0.365 - k ⅈ, PlotLegends → Automatic, ImageSize → Small], {k, 0.4, 0.5}] k 1.0 0.5 0.0 -0.5 -1.0 -1.0 -0.5 0.0 0.5 1.0 ◼ Manuscriba distintas números en un papel en blanco y escaneelo o escribalos en una pantalla tactil. Procure que incluya del 0 al 9 al menos una vez, recortelos individualmente (en Window 7 y 8 puede usar la aplicación Recorte) y establezca su equivalencia como se muestra en la lista de abajo. Utilize la función Classify que permite establecer una relación a partir de ejemplos. Observe que un mismo número su trascripción manuscrita no es idéntica, esta función utiliza criterios estadísticos para asignar un peso a cada equivalencia establecida. 4 Mathematica más allá de las matemáticas equivalencias = → 2, → 5, → 3, → 1, → 8, → 5, → 8, → 0, → 3, → 2, → 0, → 6, → 8, → 5, → 0, → 4, → 5, → 3, → 1, → 9, → 0, → 4, → 7, → 8, → 0, → 3, → 4, → 1, → 3, → 3, → 1, → 1, → 6, → 3, → 7, → 5, → 6, → 7, → 5, → 7, → 3, → 9, → 6, → 1, → 7, → 6, → 6, → 7, → 8, → 4, → 6, → 1, → 5, → 7, → 2, → 0, → 0, → 4, → 2, → 4, → 4, → 3, → 6, → 4, → 0, → 9, → 2, → 6, → 1, → 8, → 0, → 7, → 4, → 2, → 2, → 8, → 8, → 9, → 4, → 3, → 5, → 1, → 2, → 9, → 8, → 9, → 7, → 5, → 5, → 9, → 2, → 0, → 8, → 1, → 7, → 9, → 9, → 2, → 9, → 6; digitos = Classify[equivalencias] ◼ El programa va asignando probabilidades a partir de loas datos que tiene almacenados. Compruebe las probabilidades asignadas al símbolo es mas alta para el 4 que para el 6. Incluso una persona no podria asegurar si es un 6 o un 4. En la medida que vayamos añadiendo más ejemplos el programa increntará el porcentaje de aciertos digitos , "TopProbabilities" {4 → 0.451554, 6 → 0.255324, 0 → 0.242137} ◼ Otras de las funciones más novedosas es Classify a la que ya nos hemos referido. Aquí la empleamos para identificar el idioma en el que está escrita una frase. Classify"Language", "the house is blue", "la maison est bleu", "la casa es azul", "das Haus ist blau", "房子是蓝色的 ", "" ﺍﻷﺯﺭﻕ ﺑﺎﻟﻠﻮﻥ ﺍﻟﻤﻨﺰﻝ, "будинок синій" English , German , French , Chinese , Spanish , Arabic , Ukrainian ◼ Aqui la combinamos que la función dinámica para que interacticamente nos identifique el idioma. Si escribe solo una palabra verá como le asigna un peso (probabilidad) a los distintos idiomas posibles que irá aumentando cuando vaya componiendo una frase hasta que que quede identificado el idioma con una alta probabilidad. Ejemplos del libro 5 DynamicModule[{text = "" }, Column[{InputField[Dynamic[text], String, ContinuousAction → True, FieldHint → "Enter a string"], Dynamic[Classify["Language", text, "TopProbabilities"]]} ] ] casa Spanish Italian Portuguese → 0.440807, → 0.137708, Catalan → 0.19306, → 0.0446979 ◼ Reduce da las distintas soluciones en función del valor del parámetro a y utiliza una notación más formal en las salidas. Reduce[{x + a y + 3 z == 2, x + y - z == 1, 2 x + 3 y + a z == 3}, {x, y, z}] 1 a2y 5 (5 - 4 x) z x 5 a-2≠0x1a+3≠0y 1 a+3 zy ◼ Resolvemos un sistema formado por la intersección de una circunferencia y una parábola y representamos graficamente la solución. Para escribir los símbolos especiales como “∧” lo mejor es utilizar Pallettes a lo que nos referiremos más adelante. pts = Solvex2 + y2 1 y - 2 x2 + x → - 1 1 2 2 x → - 5 - 1 1 2 2 5 + 5 , y→ 1 4 5 , y→ 3 2 -1 - 1 4 0, {x, y} 5 , x → 5 - 1, x → 1 1 2 2 1 1 2 2 5 - 5 , y→ 5 + 5 , y→ 1 4 1 4 -1 - 5 , 5 - 1 6 Mathematica más allá de las matemáticas ShowContourPlotx2 + y2 ⩵ 1, y - 2 x2 + 3 2 ⩵ 0, {x, - 1.5, 1.5}, {y, - 1.5, 1.5}, Graphics[{Red, PointSize[Medium], Point[{x, y} /. pts]}] 1.5 1.0 0.5 0.0 -0.5 -1.0 -1.5 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 ◼ Solve puede obtener soluciones planteadas geométricamente. En este caso se muestra la solución a la intersección de una recta que pasa por los puntos {0,0},{2,1}, con la circunferencia de radio r = 1 y centro en {0, 0}(Mathematica llama Circle a la circunferencia y Disk al círculo, por defecto asume r = 1, centro en {0, 0}): Solve[ {x, y} ∈ InfiniteLine[{{0, 0}, {2, 1}}] && {x, y} ∈ Circle[], {x, y}] x → - 2 5 ,y→- 1 , x → 5 2 5 ,y→ 1 5 Graphics[{{Blue, InfiniteLine[{{0, 0}, {2, 1}}], Circle[]}, {Red, Point[{x, y}] /. %}}] Ejemplos del libro 7 ◼ En el ejemplo se simula el bote de una pelota que cae por una escalera. Se puede actuar sobre el impulso que se le da a la pelota, y su rebote, y sobre el tamaño del peldaño. Mathematica permite resolver el problema analitica o numericamente, puede probar a sustituir DSolve por NDSolve (solución númerica). Manipulate[ sol = DSolve[{y ''[t] ⩵ - 9.8, y[0] ⩵ 13.5, y '[0] ⩵ 5, a[0] ⩵ 13, WhenEvent[y[t] - a[t] ⩵ 0, y '[t] → - c y '[t]], WhenEvent[Mod[t, n], a[t] → a[t] - 1]}, {y, a}, {t, 0, 8}, DiscreteVariables → {a}]; Plot[Evaluate[{y[t], a[t]} /. sol], {t, 0, 8}, Filling → {2 → 0}], {c, 0.6, 1}, {n, 0.6, 1.75}] c n ◼ Aquí utilizamos una figura, conocida como “tetera de Utah”, que se incluye en ExampleData, para construir un diagrama de barras 3D. g = ExampleData[{"Geometry3D", "UtahTeapot"}]; 8 Mathematica más allá de las matemáticas BarChart3D[data3, ChartElements → g, BoxRatios → {4, 1, 1}] ◼ En este ejemplo se muestra la función de probabilidad (pdf) y la función acumulada de probabilidad (cdf) de la distribución de Poisson y se aplica para representar un caso concreto: la de media Μ =10. Se incluye una optión en PlotLegends que permite colocar la leyenda en la disposicion de se desee. pdf = PDF[PoissonDistribution[Μ], x] ⅇ-Μ Μx x! 0 x≥0 True cdf = CDF[PoissonDistribution[Μ], x] Q(⌊x⌋ + 1, Μ) x ≥ 0 0 True DiscretePlot[Evaluate[{pdf, cdf} /. Μ → 10], {x, 0, 15}, PlotRange → All, PlotLegends → Placed[{"Probabilidad", "Probabilidad acumulada"}, Below]] Probabilidad Probabilidad acumulada ◼ En Mathematica 9 y 10 se han ampliado sustancialmente las funciones para tratamiento de imágenes 3D como el ejemplo que se muestra donde se va seccionando un craneo en una imagen 3D Ejemplos del libro 9 ◼ Explorando la Z de Riemann.- Representamos 1/ Ζ(s). Se puede comprobar que todos los ceros (columnas) están claramente alineados. ◼ Buscando planetas extrasolares: Consideremos el sistema binario definido por los siguientes parámetros R = 2, i = 2 Pi 85 /360; m1 = 0.6; m2 = 0.1; R1 = 0.4; R2 = 0.3. Actuando sobre los controles veremos dinamicamente el sistama binario 10 Mathematica más allá de las matemáticas ◼ La función que hemos construido nos permite mostrar la cadena de desintegración de cualquier isótopo, en esta caso es la rama principal del Ra 226 Ejemplos del libro 11 isopro[ra226] período Descendientes Fracción desintegración (seg) 226 Ra por rama 5.0 × 1010 s radon-222 , 1.00, 2.6 × 10-11 , Missing[Unknown] lead-212 , thorium-226 222 Rn 330 350. s 218 Po 185.9 s polonium-218 {1.00} lead-214 , {1.00, 0.00020} astatine-218 214 Pb 1610. s bismuth-214 {1.00} 214 Bi 1.19 × 103 s polonium-214 , {1.0, 0.00021, 0.000030} thallium-210 , lead-210 214 Po 0.0001643 s 210 Pb 7.01 × 108 s lead-210 bismuth-210 , {1.00} 1.00, 1.9 × 10-8 mercury-206 210 Bi 4.33 × 105 s polonium-210 , 1.00, 1.32 × 10-6 thallium-206 210 Po 1.19557 × 107 s lead-206 {1.00} 206 Pb ∞ {} {} ◼ Aqui tiene otro ejemplo de optimización no lineal, en este caso se trata de encontrar el mínimo global ( Minimize ). La función a optimizar es Exp(-x y) con la condición de que x, y ∈ Circulo con centro en {0, 0} y r = 1. El resultado lo mostramos numérica y graficamente. m = Minimize[{Exp[- x y], {x, y} ∈ Disk[]}, {x, y}] 1 ⅇ , x → - 1 2 ,y→- 1 2 g = Plot3D[Exp[- x y], {x, y} ∈ Disk[], Axes → True, Boxed → False, PlotStyle → Opacity @ 0.6]; 12 Mathematica más allá de las matemáticas Show[g, Graphics3D[ {PointSize @ Large, Red, Point[{x, y, m[[1]]} /. m[[2]]]}]] ◼ En el siguiente gráfico corresponde a un analisis de derivado con los datos y funciones que hemos desarrollado Vemos la evolución del valor de la estrategia en función de la cotización del subyacente y del tiempo que le queda de vida a la estrategia. Para su mejor comprensión, marcamos con una línea azul continua el nivel de precio inicial, que además es nuestro nivel de ejercicio; y en rojo discontinuo el nivel del precio del subyacente al que alcanzamos nuestro máximo nivel de beneficio posible. Se ha de tener en cuenta que nuestro inicio en la escala temporal es el 1. Recuerde que hemos fijado como objetivo un beneficio máximo del 18% Vamos a resolver un caso muy apropiado para la paralelización. Se trata de determinar la proximidad genética de organismos utilizando lo que se conoce como distancia de Levenshtein. ◼ Indicamos el directorio donde tenemos los ficheros de datos (data). De esta forma podemos usar directamente Import sin necesidad de escribir la ruta completa. Ejemplos del libro 13 SetDirectory[FileNameJoin[{NotebookDirectory[], "Data"}]] C:\Users\Guillermo\Google Drive\MasAlla10\Data picrogenes = Import["picrophilus_torridus_gene.fna"]; acidogenes = Import["thermoplasma_acidophilum_gene.fna"]; volcaniumgenes = Import["thermoplasma_volcanium_gene.fna"]; ◼ En este caso se trata de organismos muy simples cuyos genomas tienen el siguiente tamaño (número total de genes): Length /@ {picrogenes, acidogenes, volcaniumgenes} {1598, 1575, 1610} ◼ Cargamos los datos importados para su tratamiento en paralelo. With[{ picrogenes = picrogenes, acidogenes = acidogenes, volcaniumgenes = volcaniumgenes}, ParallelEvaluate[picro = picrogenes; acido = acidogenes; volcanium = volcaniumgenes;];]; ◼ Comparamos los primeros ocho genes del thermoplasma volcanium con los de thermoplasma acidophilum y mostramos el tiempo de cálculo y la mínima distancia gen a gen referidas al acidophilum. acidovolcanium = ParallelMap[ Function[{gene}, Min[EditDistance[gene, #] & /@ acido]], volcaniumgenes[[1 ;; 8]]]; // AbsoluteTiming {29.602209, Null} ◼ Procedemos de la misma manera para los primeros ocho genes del thermoplasma volcanium y picrophilus torridus. picrovolcanium = ParallelMap[ Function[{gene}, Min[EditDistance[gene, #] & /@ picro]], volcaniumgenes[[1 ;; 8]]]; // AbsoluteTiming {30.353620, Null} ◼ Aquí mostramos gráficamente la proximidad genética de los 8 genes elegidos uno a uno del thermoplasma volcanium vs thermoplasma acidophilum 14 Mathematica más allá de las matemáticas ListLinePlot[{acidovolcanium, picrovolcanium}] 1000 800 600 400 200 2 4 6 8