MATLAB:绘制随机游走

时间:2015-04-11 00:01:38

标签: matlab random plot matlab-figure 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循环之外包含绘图功能,但这并不起作用。我甚至试图改变点的颜色,甚至没有工作。我编码错了吗?

1 个答案:

答案 0 :(得分:2)

您的问题的解决方案非常简单。在绘制线条时,您需要至少两个点,以便绘制线条。您实际需要做的是记住之前的位置,以便在每个时间步,您可以从前一个位置到当前位置绘制一条线。

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

请记住,时间在水平轴上,位置在垂直轴上。因此,事件被保存为两元素向量,其中第一个元素是时间,第二个元素是位置。

因此,请尝试这样做:

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

enter image description here

请记住,您可能无法获得我所做的相同情节,因为它是随机的。每次运行此功能时,您都应该获得不同的随机游走,这就是我们所期望的。