随机漫游,简化代码

时间:2016-10-31 11:31:48

标签: matlab octave simplification random-walk

我目前正在练习建模和#34;随机漫步"和人口建模。我有一个适用于一维随机游走的工作代码,将来我想添加额外的尺寸,我认为我现在的代码会让它变得更难。在开始for循环之前,我需要绘制前两个位置。理想情况下,我想摆脱这个问题,让它从第一步开始。

numjumps = 20; %number of steps
R = 0.5; %probability of step to right
more off
prev_position = [0 0]; %first position
x = rand(1); %generate random number 0-1
if x >= R;
  step = 1; %take a step to the right
elseif x < R
  step = -1; %take a step to the left
end

position = [1 prev_position(2) + step];

close all;
figure;
hold on;

plot([prev_position(1) position(1)], [prev_position(2) position(2)]);
axis([0 numjumps -5 5])
for i = (2:numjumps);
  prev_position(i) = position(i-1);
  x = rand(1); %generate random number 0-1
  if x >= R;
    step = 1; %take a step to the right
  elseif x < R
    step = -1; %take a step to the left
  end
  position(i) = [prev_position(i) + step]; %add step to position
  plot(position);
  axis([0 numjumps -5 5])
end

total = sum(position);
mean_position = total/numjumps;
disp(mean_position);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

你不应该使用for循环,只需向量化你的代码:

numjumps = 20; %number of steps
R = 0.5; %probability of step to right
x = rand (numjumps, 1);
step = 2 * (x >= R) - 1;
position = [0; cumsum(step)];
plot (position)

现在很容易让它成为2D:

numjumps = 200; %number of steps
R = 0.5; %probability of step to right
x = rand (numjumps, 2);
step = 2 * (x >= R) - 1;
position = [0, 0; cumsum(step)];
plot (position(:, 1), position (:, 2))

给出

enter image description here