为2D Random Walker创建从原点开始的距离直方图

时间:2018-09-20 08:57:50

标签: matlab histogram matlab-figure random-walk

比方说,您可以显示三个不同时间点上大量随机步行者的位置在空间上的分布。这为my previous question提供了一个答案,并且进行了一些调整才很漂亮。

clc;
close all;
M = 1000; % The amount of random walks.
steps = [100,200,300]; % here we analyse the step 10,200 and 1000
cc = hsv(length(steps)); % manage the color of the plot
%generation of each random walk
x = sign(randn(max(steps),M));
y = sign(randn(max(steps),M));
xs = cumsum(x);
xval = xs(steps,:);
ys = cumsum(y);
yval = ys(steps,:);

hold on
for n=1:length(steps)
    plot(xval(n,:),yval(n,:),'o','markersize',1,'color',cc(n,:),'MarkerFaceColor',cc(n,:));
end

legend('100','200','300')
axis square
grid on;

现在要问的是,我是否可以通过某种方式使用hist()subplot()函数显示在三个单独的时间点到随机步行者到原点的距离,或者我想更多,但是为简单起见,三个。

除了目前为止在三个时间点本身产生随机步行者分布之外,我不确定如何进行此处理。

1 个答案:

答案 0 :(得分:0)

我希望我已经理解了您的问题,我想您希望将bar图与stack选项一起使用。

我已经在我的question上使用了@LuisMendo的答案,以提高代码效率。

steps = [10,200,1000]; % the steps
M     = 5000; % Number of random walk
DV    = [-1 1]; % Discrete value
p     = .5; % probability of DV(2)
% Using the @LuisMendo binomial solution:
for ii = 1:length(steps)
    xval(ii,:) = (DV(2)-DV(1))*binornd(steps(ii), p, M, 1)+DV(1)*steps(ii);
    yval(ii,:) = (DV(2)-DV(1))*binornd(steps(ii), p, M, 1)+DV(1)*steps(ii);
end
[x, cen] = hist(sqrt(xval.^2+yval.^2).'); %where `sqrt(xval.^2+yval.^2)` is the euclidian distance
bar(cen,x,'stacked');
legend('10','200','1000')
axis square
grid on;

增加直方图功能中的bin数量以提高绘图精度。

结果:

enter image description here