我的任务是绘制布朗运动模拟的直方图。值得庆幸的是,我已经制作了一个模拟布朗运动的程序,并将其绘制在散点图上,作为时间和距离的函数。这就是我的输出:
但是,我需要将其转换为5个不同位置的直方图(例如:t = 0,1,2,3,4时的直方图)。
目前我拥有的包是numpy,mattplotlib和scipy。我已经看到了如何绘制正态分布的示例,但是如何绘制我收集的数据的分布?
以下是我目前的代码:http://pastebin.com/AEpQDQd2
(因为我无法发布两个链接,所以我必须将两个文件粘贴在一起,第一个是为布朗运动进行计算的,第二个是输出在布局上的图形的文件。 imgur链接)
这不适用于家庭作业,但它是作为一个额外的学分问题而给出的,教师明确表示我们可以使用我们能够提供的任何信息。
感谢。
答案 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()
(您可能需要在单独的数字上绘制直方图和/或在您的时间点内使纸箱尺寸保持不变。)