0

在这里可以找到一个二维随机游走,它在Octave中完美运行。但是,当我尝试编写一维随机游走程序时,出现了错误。这是程序:

t=[];
x=[];
for i=1:100000
    J=rand;
    if J<0.5
        x(i+1)=x(i)+1;
        t(i+1)=t(i)+1;
    else
        x(i+1)=x(i)-1;
        t(i+1)=t(i)+1;
    end
end

plot(t,x)

这是错误:

错误:A(I):索引超出范围;值 1 超出范围 0

谢谢你。

4

4 回答 4

4

不需要循环:

N = 100000;
t = 1:N;
x = cumsum(2*(rand(1,N)<.5)-1);
plot(t,x)

在此处输入图像描述

对于 2D 案例,您可以使用相同的方法:

N = 100000;
%// t = 1:N; it won't be used in the plot, so not needed
x = cumsum(2*(rand(1,N)<.5)-1);
y = cumsum(2*(rand(1,N)<.5)-1);
plot(x,y)
axis square

在此处输入图像描述

于 2015-01-22T21:49:28.800 回答
2

您会收到一个错误,因为x(1)当您实际定义x长度为 0 时,您要求 MATLAB 在第一次迭代中使用。所以您需要初始化xt使用适当的大小:

x=zeros(1,100001);
t=zeros(1,100001);

或更改循环以在向量末尾添加新值:

    x(i+1)=[x(i) x(i)+1];
于 2015-01-22T21:18:56.140 回答
1

由于 t 和 x 是空的,因此,您不能通过 x(i+1) 和 x(i) 对它们进行索引。我相信你应该用全零初始化 x 和 t 。

于 2015-01-22T21:22:25.480 回答
1

在第一次迭代中i = 1,您的x(2) = x(1) +or- 1whilex维数为零。您应该定义和的起点xt通常是原点,您也可以稍微更改代码,

x = 0;
N = 100000;
t = 0 : N;
for i = 1 : N
    x(i+1) = x(i) + 2 * round(rand) - 1;
end
plot(t,x)
于 2015-01-22T21:39:59.870 回答