sábado, 13 de marzo de 2021

Paseo aleatorio en dos dimensiones

Puede descargar el archivo de Excel borracho.xlsm

Contenido

  1. Concepto
  2. Random Walk en una dimensión
  3. Random Walk en dos dimensiones
  4. Random Walk en tres dimensiones
  5. Random walk 2D en Python


Concepto

Un Random Walk es un proceso estocástico que describe un camino consistente en realizar una serie de pasos aleatorios.

Esa trayectoria aleatoria se puede dar en una dimensión, en dos dimensiones, en tres o más dimensiones.

Random Walk en una dimensión

Hoja1

En el archivo descargable indicado a inicio de este post encontramos un paseo aleatorio unidimensional. Si se interpreta como saltos dentro de una recta, se trataría de ver saltos a la derecha o izquierda respecto de la posición que se tiene en cada momento. Esto es, dada una posición inicial (1.000) se trataría de ir hacia la derecha o hacia la izquierda un paso de longitud el 3% de esa posición inicial.

Otra forma de interpretarlo es verlo como una serie temporal, a lo largo de un eje de tiempos.


Hoja2

Ahora vamos a crear un conjunto de 20 series de que contienen 2.000 saltos aleatorios cada una de ellas. En el gráfico siguiente hemos tomado escala logarítmica para que se pueda ver mejor el rango de variación de las curvas.



Random Walk en dos dimensiones

Podemos crear un paseo aleatorio en dos dimensiones. Esto también se conoce como el caminar del borracho. Vea la Hoja3.

Supongamos un borracho que parte de un punto central en el plano cartesiano, el punto (0,0). El borracho puede dar pasos de longitud r, donde inicialmente hacemos que r sea igual a 1. Podríamos pensar en pasos de un metro de longitud. La dirección hacia la que se dirige es aleatoria, de forma que el ángulo puede ser cualquiera entre 0º y 360º.

Para transformar estas dos variables (r que es el radio y θ que es el ángulo) usamos el concepto de coordenadas polares y como se transforman en las conocidas coordenadas cartesianas del plano.



 

Para enseñar a programar a los niños existe un adorable programa denominado Turtle Art con el que se pueden hace figuras geométricas y dibujos en general. Si usamos números aleatorios podemos ver una imagen donde explicamos a los niños que la tortuga se ha vuelto loca.





Random Walk en tres dimensiones

El concepto de random walk comenzó en 1827 cuando el botánico Robert Brown estudió el movimiento del polen. También es importante la aportación de Albert Einstein de 1905 sobre el movimiento browniano de pequeñas partículas.

Matemáticamente se podría estudiar el movimiento aleatorio en más de tres dimensiones. Aunque perdemos la representación gráfica, esto no es problema ya que, podemos utilizar matrices o en programación arrays.


Random walk 2D en Python


Veamos cómo programar un paseo aleatorio en dos dimensiones en Python.

Código en repl.it


# El caminar del borracho  
# Un paseo aleatorio en dos dimensiones  
# Se parte del punto (0,0) del plano cartesiano  
# Cada paso que se da es de longitud r  
# El ángulo con el que se da cada paso es aleatorio  
import random  
import math  
import matplotlib.pyplot as plt  
random.seed()  
n=100 # número de pasos  
r=1 # longitud del paso  
x=y=0 # punto de partida (x,y)=(0,0)  
listax=[x]  
listay=[y]  
for i in range(n):  
  angulo=random.random()*math.pi*2 # en radianes  
  x+=r*math.cos(angulo)  
  y+=r*math.sin(angulo)  
  listax.append(x)  
  listay.append(y)  
plt.plot(listax,listay)  
plt.show()  



Veamos el código para dos paseos aleatorios.

import random  
import math  
import matplotlib.pyplot as plt  
random.seed()  
n=100000 # número de pasos  
r=1 # longitud del paso  
x1=y1=x2=y2=0 # punto de partida (x,y)=(0,0)  
lista1x=[x1]  
lista1y=[y1]  
lista2x=[x2]  
lista2y=[y2]  
for i in range(n):  
  angulo1=random.random()*math.pi*2 # en radianes  
  angulo2=random.random()*math.pi*2 # en radianes  
  x1+=r*math.cos(angulo1)  
  y1+=r*math.sin(angulo1)  
  x2+=r*math.cos(angulo2)  
  y2+=r*math.sin(angulo2)  
  lista1x.append(x1)  
  lista1y.append(y1)  
  lista2x.append(x2)  
  lista2y.append(y2)  
plt.plot(lista1x,lista1y)  
plt.plot(lista2x,lista2y,'--r')  
plt.show()  






En tres dimensiones sería como ver el revoloteo de un moscardón algo ebrio.


No hay comentarios:

Publicar un comentario