Scientific Programming in Python

Topic 7: Basics of Data Visualization

Notebook created by Martín Villanueva - martin.villanueva@usm.cl - DI UTFSM - May 2017.


In [3]:
import numba
import numexpr as ne
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

En la presente actividad simularemos y visualizaremos un sistema dinámico 2-dimensional simple. Para ello resolveromos una EDO numéricamente, utilizando el método de Euler.

Consideremos un sistema de $N$ partículas $(x_i(t), y_i(t))$ en el dominio $[0,1]\times[0,1]$, cuyo movimiento se rige por las siguientes ecuaciones (EDOs autónomas):

\begin{align} \frac{dx}{dt} &= \text{tanh}(x^2+y^2), \text{ con } x(0)=x_0, \\ \frac{dy}{dt} &= \text{tanh}(x^2+y^2), \text{ con } y(0)=y_0 \\ \end{align}

El método de Euler para resolver este problema numéricamente, consiste en realizar la siguiente aproximación para la derivada:

\begin{align} \frac{x_{i+1}-x_i}{\Delta t} = \text{tanh}(x_i^2+y_i^2) \rightarrow x_{i+1} = x_i + \Delta t \cdot \text{tanh}(x_i^2+y_i^2) \\ \frac{y_{i+1}-y_i}{\Delta t} = \text{tanh}(x_i^2+y_i^2) \rightarrow y_{i+1} = y_i + \Delta t \cdot \text{tanh}(x_i^2+y_i^2) \end{align}

ocupando las condiciones iniciales $x_0$ e $y_0$ como puntos de partida. Aquí $\Delta t$ (time step) es un parámetro definido por usted, y usualmente toma valores pequeños.

Notar que esta ecuación es válida para una partícula, y por tanto para simular un sistema de $N$ de estas, es necesario realizar esta actualización para cada partícula $(x_i,y_i)$ con $i \in [1,N]$.

Se solicita que realice lo siguiente:

  1. Genere un conjunto de 100 puntos aleatoriamente distribuidos en el espacio $[0,1]\times[0,1]$ (Seran usados como posiciones iniciales del sistema). Grafíque el conjunto de puntos obtenidos.
  2. Realizar un gráfico de la función que define el comportamiento del sistema: $f(z) = \text{tanh}(z^2)$ (gráfico unidimensional).
  3. Desarrollar la función simular(x0, y0, dt, tf) que reciba los np.ndarray con las coordenadas iniciales x0 e y0 del sistema, el time step dt (seleccione un valor pequeño $\sim 0.01$) y el tiempo final de simulación. Esta función debe graficar el conjunto de puntos del sistema, en su tiempo final.
  4. Usando interact desarrolle un widget para visualizar interactivamente distintos estados finales del sistema (distintos tf).

In [ ]: