0

所以我需要创建一个函数,为连续随机跳跃的人绘制位置与时间的关系。每次跳跃以概率 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 函数,但这不起作用。我什至尝试过改变点的颜色,但这甚至不起作用。我编码错了吗?

4

1 回答 1

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

在此处输入图像描述

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

于 2015-04-11T07:33:47.693 回答