如何在MatLab中重复随机游走模拟并记录最终结果?

时间:2017-11-30 23:11:46

标签: matlab random-walk

您好我正在制作我的第一个随机游走计划。我只能弄清楚随机游走程序本身。这是一个简单的1d随机游走,有1000步。这是我的代码到目前为止的样子:

stepslim = 1000;
rnew(1) = 0
r=0;
%Now we will set up the for loop
for isteps = 2:1:stepslim;
    if rand <= 0.5             %The if-else statement will tell the walker
        step = -1;             %which direction it steps in
    else
        step = +1;
    end
    rnew(isteps) = rnew(isteps-1) + step; %This adds the new step
end
plot(rnew); %This will plot our random walk

这很好用,现在我需要再尝试一些任务:

  • 运行此模拟X次以生成整体。在整体中的每个模拟结束时记录/存储助行器的最终位置。

  • 为整体中的每个模拟生成助行器结束位置的直方图▪调整箱​​宽以“理解”结果。

  • 重复并绘制X = [1000,2000,10000,20000,100000,1000000]的结果

我不确定如何重复模拟并将结束值记录到整体中。我很感激在完成这些任务方面提供了一些帮助

1 个答案:

答案 0 :(得分:1)

您生成随机游走的方法非常非常非常慢......如果您想改变方法,我建议您使用以下代码:

steps = 1000;
rw = cumsum(-1 + 2 * round(rand(steps,1)),1);

从这一点开始,以下是如何运行模拟x次,记录每个结果并检索每次模拟的最后一步:

iters = 10;
steps = 1000;

rws = NaN(steps,iters);

for i = 1:iters
    rws(:,i) = cumsum(-1 + 2 * round(rand(steps,1)),1);
end

% retrieve the last step
last_steps = rws(end,:);

为了绘制最后步骤的直方图,您可以使用histogram函数,该函数应足够灵活,可以打印与您的数据足够一致的内容:

histogram(last_steps);

要使用不同的步长,只需将所有内容都包含在另一个for loop内,您可以在数组中定义的每个步长上循环:

X = [1000, 2000, 10000, 20000, 100000, 1000000];

for j = 1:numel(X)
    % previous code with variable "steps" replaced by X(j)
end