#python #numpy #random
#python #numpy #Случайный
Вопрос:
Я хочу создать симулятор броуновского движения, моя частица будет начинаться с (0,0), начала координат, затем я создал случайные массивы NumPy для направления x и y, например, x = [-2,1,3] и y = [0, -2,1]. Поскольку частица начинается в начале координат (0-я точка), она переместится в следующую точку на -2 в направлении и 0 в y (1-я точка), а затем для 2-й точки она переместится на 1 единицу вправо ( 1 в x) и -2 единицы влево(-2 в y). Мой вопрос в том, как бы мне сделать так, чтобы каждая точка действовала как новое начало координат, как добавление векторов. Я думаю, мне понадобится какой-то цикл for, но не уверен, как я его настрою.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation as am
np.random.seed(69420)
N=1000 #Number of steps
# Have the particle at the origin in 2D (x,y) plane
# Each step will have a lenght of 1 unit. Lets call it meters
# Each step is one second
# And this simulation will run for 100 seconds
## Now how to make a particle randomly walk???
t=100 # time interval
dt=t/N # delta time from each step
dx = np.random.randint(-5,5,N,dtype=int)# This would be our detla x for each step
dy = np.random.randint(-5,5,N,dtype=int)
dx_0 = np.zeros(N, dtype=int)
dy_0 = np.zeros(N,dtype=int)
X = dx_0 dx
Y = dy_0 dy
print(X)
xdis = np.cumsum(X) #Total distance travled after N steps
ydis = np.cumsum(Y)
plt.plot(dx_0,dy_0,'ko')
plt.plot(xdis,ydis,'b-')
plt.show()
Это то, что у меня есть до сих пор. Любая помощь приветствуется.
Комментарии:
1. См . scipy-cookbook.readthedocs.io/items/BrownianMotion.html ; в конце статьи приведен пример вычисления 2D броуновского движения.
Ответ №1:
Вам нужно предпринять N
шаги, начиная с (0,0)
. Отслеживайте свои шаги, используя переменную prev = [0,0]
, и вносите в нее изменения для каждого шага. Упрощенный код:
prev = [0,0]
for i in range(N):
new_x = prev[0] dx[i]
new_y = prev[1] dy[i]
# do what you need with new_x and new_y
prev = [new_x, new_y]
Ответ №2:
Поскольку кажется, что вы хотите отобразить весь маршрут, просто просуммируйте все эти шаги?
origin = np.array([0, 0])
x_series = np.cumsum(dx) origin[0]
# (Similarly for y)
Это только для 1 случайного ходока. Если у вас есть несколько случайных ходоков — у каждого из них будет начальная точка и отдельная цепочка dx
-s.