MATLAB:绘制随机游走

MATLAB: plotting a random walk

所以我需要创建一个函数,为连续随机跳跃的人绘制位置与时间的关系图。每次跳跃以概率 R 向右跳一格,否则向左跳一格。参数需要是 R = 可能向右跳一个单位; a = 初始位置;和 numjumps = 个人跳跃的次数。我还需要使用 binornd() 函数。

到目前为止我编写的代码是:

function plot_sim(a,numjumps,R)
loc = a;
time = 0;
for i = 1:numjumps;
    loc = loc + (2*binornd(1,R)-1);
    time = time + 1;
    hold on;
    plot(time,loc,'-')
end

而且我必须用 plot_sim(0,25,0.5) 来评估它。我只是感到困惑,因为即使我有 plot(time,loc,'-'),它也没有绘制为连接线,它只是绘制为单独的点。我试过在 for 循环之外包含 plot 函数,但这不起作用。我什至尝试过更改圆点的颜色,但这根本行不通。我编码错了吗?

您的问题的解决方案非常简单。画线时,需要至少有两个点才能画线。你真正需要做的是记住之前的位置,这样在每个时间步,你都可以从之前的位置到当前位置画一条线。

我会做的是首先生成一个生成一次跳跃的图形,然后我们可以从初始位置到这一点画一条线。之后,然后 运行 你的循环,我们跟踪上一个事件,在下一个时间步生成你的新事件,然后从上一个时间的上一个事件到当前时间的当前事件画一条线。

记住,横轴是时间,纵轴是位置。因此,事件被保存为双元素向量,其中第一个元素是时间,第二个元素是位置。

因此,尝试这样做:

function plot_sim(a,numjumps,R)
%// Keep the previous event
%// x coordinate is time
%// y coordinate is position
%// Time = 0
prev_loc = [0 a];

%// Generate the next event
%// Time = 1
loc = [1 prev_loc(2) + 2*binornd(1,R)-1];

%// Close all figures then open up a new one
close all;
figure;
hold on;

%// Plot a line from the previous position to the current one
plot([prev_loc(1) loc(1)], [prev_loc(2) loc(2)]);

%// For each new position...
for i = 2:numjumps
    %// Remember the previous position
    prev_loc = loc;
    %// Generate the next position
    loc = [i prev_loc(2) + (2*binornd(1,R)-1)];    
    %// Plot the position
    plot([prev_loc(1) loc(1)], [prev_loc(2) loc(2)]);
end

这是我尝试 运行 将其与 plot_sim(0.25,10,0.25) 结合时得到的结果,所以 a = 0.25, numjumps = 10, R = 0.25:

请记住,您可能不会得到与我相同的情节,因为它是随机的。每次你 运行 这个函数,你应该得到一个不同的随机游走,这就是我们所期望的。