Как визуально представить эволюцию во времени в двумерном моделировании броуновского движения - PullRequest
1 голос
/ 01 июля 2019

Я смоделировал броуновское движение в обоих направлениях x и y как случайные блуждания.Я нанес данные на двухмерную диаграмму, но, хотя не так сложно проследить путь моделируемой частицы от начала координат, я хочу иметь возможность видеть эволюцию во времени пути частицы, визуально представленную на графике,будь то путем изменения цвета линии с течением времени, или путем добавления третьего измерения к графику для представления времени, или с использованием какого-либо типа динамического графика.

Я не пытался реализовать что-либо,но я попытался посмотреть, какие варианты доступны для меня.Я хочу избежать использования 3D-графика, если это возможно.Тем не менее, я открыт для использования чего-то другого, кроме matplotlib, если это имеет смысл для этой ситуации (например, pyqtgraph).

Вот мой код:

import random
import numpy as np
import matplotlib.pyplot as plt
#n is how many trajectory evaluations
n = 1000
t= np.linspace(0,10000,num=n)
def brownianMotion(time):
    B = [0]
    for t in range(len(time)-1):
        nrand = random.gauss(0,(time[t+1] - time[t])**.5)
        B.append(B[t]+nrand)
    return B
xpath = brownianMotion(t)
ypath = brownianMotion(t)

def plot(x,y):
    plt.figure()
    xplot = np.insert(x,0,0)
    yplot = np.insert(y,0,0)
    plt.plot(xplot,yplot,'go-',lw=1,ms=.1)
             #np.arange(0,n+1),'go-', lw=1, ms = .1)
    plt.xlim([-150,150])
    plt.ylim([-150,150])
    plt.title('Brownian Motion')
    plt.xlabel('xDisplacement')
    plt.ylabel('yDisplacement')
    plt.show()
plot(xpath,ypath)

В целом, этопросто ради удовольствия и чего-то, что я делал, пока скучал на работе.Все предложения приветствуются!Спасибо за ваше время!

Пожалуйста, дайте мне знать, если я должен опубликовать изображение вывода моего кода.

Редактировать: Кроме того, если я хочу представить несколько частиц на одном графике, какМогу ли я сделать это так, чтобы несколько путей были различимы?Я изменил свой код для этой цели, как показано ниже, но в настоящее время этот код выводит грязную зеленую смесь частиц.

import random
import numpy as np
import matplotlib.pyplot as plt

nparticles = 20
#n is how many trajectory evaluations
n = 100
t= np.linspace(0,1000,num=n)
def brownianMotion(time):
    B = [0]
    for t in range(len(time)-1):
        nrand = random.gauss(0,(time[t+1] - time[t])**.5)
        B.append(B[t]+nrand)
    return B
xs = []
ys = []
for i in range(nparticles):
    xs.append(brownianMotion(t))
    ys.append(brownianMotion(t))
#xpath = brownianMotion(t)
#ypath = brownianMotion(t)
def plot(x,y):
    plt.figure()
    for xpath, ypath in zip(x,y):
        xplot = np.insert(xpath,0,0)
        yplot = np.insert(ypath,0,0)
        plt.plot(xplot,yplot,'go-',lw=1,ms=.1)
             #np.arange(0,n+1),'go-', lw=1, ms = .1)
    plt.xlim([np.amin(x),np.amax(x)])
    plt.ylim([np.amin(y),np.amax(y)])
    plt.title('Brownian Motion')
    plt.xlabel('xDisplacement')
    plt.ylabel('yDisplacement')
    plt.show()
plot(xs,ys)
...