有一个二维随机游走,人们可以找到here,它在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
谢谢。
答案 0 :(得分: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
答案 1 :(得分:2)
你得到一个错误是因为你要求MATLAB在第一次迭代中使用x(1)
,而你实际上将x
定义为长度为0.所以你需要初始化x
和{ {1}}具有适当的大小:
t
或更改循环以在向量的末尾添加新值:
x=zeros(1,100001);
t=zeros(1,100001);
答案 2 :(得分:1)
因为t和x是空的,所以你不能通过x(i + 1)和x(i)索引它们。 我相信你应该用全零来初始化x和t。
答案 3 :(得分:1)
在第一次迭代i = 1
中,您有x(2) = x(1) +or- 1
而x
的维度为零。您应该定义x
和t
的起点,它通常是原点,您也可以稍微更改一下代码,
x = 0;
N = 100000;
t = 0 : N;
for i = 1 : N
x(i+1) = x(i) + 2 * round(rand) - 1;
end
plot(t,x)