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
a2y
5
(5 - 4 x)  z 
x
5

a-2≠0x1a+3≠0y
1
a+3
zy
◼ 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 = Solvex2 + 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
ShowContourPlotx2 + 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