绘制布朗运动的直方图?

时间:2015-07-08 08:48:06

标签: python histogram physics

我的任务是绘制布朗运动模拟的直方图。值得庆幸的是,我已经制作了一个模拟布朗运动的程序,并将其绘制在散点图上,作为时间和距离的函数。这就是我的输出:

Brownian motion

但是,我需要将其转换为5个不同位置的直方图(例如:t = 0,1,2,3,4时的直方图)。

目前我拥有的包是numpy,mattplotlib和scipy。我已经看到了如何绘制正态分布的示例,但是如何绘制我收集的数据的分布?

以下是我目前的代码:http://pastebin.com/AEpQDQd2

(因为我无法发布两个链接,所以我必须将两个文件粘贴在一起,第一个是为布朗运动进行计算的,第二个是输出在布局上的图形的文件。 imgur链接)

这不适用于家庭作业,但它是作为一个额外的学分问题而给出的,教师明确表示我们可以使用我们能够提供的任何信息。

感谢。

1 个答案:

答案 0 :(得分:2)

在计算您感兴趣的时间点索引it后,使用pylab.hist之类的内容:

# -*- coding: utf-8 -*-
import numpy
from pylab import plot, xlabel, ylabel, title, grid, show, hist, legend
from brownian import brownian

#This is the code that performs the main iteration of the Euler Marayuma process, from t=0 to t=10.

def main():

# The Wiener process parameter.
    delta = 2
    # Total time.
    T = 10.0
    # Number of steps.
    N = 500
    # Time step size
    dt = T/N
    # Number of realizations to generate.
    m = 1000
    # Create an empty array to store the realizations.
    x = numpy.empty((m,N+1))
    # Initial values of x.
    x[:, 0] = 0

    brownian(x[:,0], N, dt, delta, out=x[:,1:])
    t = numpy.linspace(0.0, N*dt, N+1)

    # time points of interest
    ts = [4., 3., 2., 1.]
    for t in ts:
        it = int(t/T * N)
        hist(x[:, it], alpha=0.7, label='%.1f s' % t, normed=True)
    legend()
    show()

if __name__ == "__main__":
    main()

enter image description here

(您可能需要在单独的数字上绘制直方图和/或在您的时间点内使纸箱尺寸保持不变。)