close all;
hold on
%Edited
M = zeros(100,500);
%
for count = 0:99
x = [];
p = 0;
for i = 1:499
n = rand(1);
if n > 0.5
p = p+1;
end
if n < 0.5
p = p-1;
end
x(i) = p;
end
%Edited
for j = 1:500
M(n,j) = x(j);
end
%
X = abs(x);
Y = 1:length(X);
ps = csapi(X,Y);
fnplt(ps)
end
hold off
grid on
title('Random Walk Distances')
xlabel('Distance from the Origin')
ylabel('Each Iteration of the Experiment')
我的目的是找到代码绘制的所有曲线的平均曲线。为此,我想要找到数组的每个索引的平均值然后绘制该曲线,但是,我只保留最后一次迭代的值我如何存储所有值在一个大矩阵中。
编辑:我已经包围了我正在思考的变化(%),但它并没有奏效。 国家:
Random_walk_1D中的错误(第30行)
M(n,j)= x(n);
下标索引必须是实数正整数或逻辑。
答案 0 :(得分:1)
您的代码中的主要想法并不错,但是您要混合变量名称和索引,而不是所有循环都与您的向量一样长。
例如:
你的第一个循环遍历变量count
for count = 0:99
...
end
但是在第二个子循环中,您尝试分配给M(n,j)
for j = 1:500
M(n,j) = x(j);
end
但是您的变量n
被分配给一个随机数。您应该将其更改为:
for j = 1:500-1
M(count+1,j) = x(j);
end
如您所见,我还必须将元素数量减少到500-1
,因为x
只有499个条目:
for i = 1:499
....
end
我建议您尽量不对其进行硬编码,而是使用变量:
close all;
hold on
%Edited
m1=100;
m2=499;
M = zeros(m1,m2);
for count = 0:m1-1
x = [];
p = 0;
for i = 1:m2
n = rand(1);
if n > 0.5
p = p+1;
end
if n < 0.5
p = p-1;
end
x(i) = p;
end
%Edited
for j = 1:m2
M(count+1,j) = x(j);
end
X = abs(x);
Y = 1:length(X);
ps = csapi(X,Y);
fnplt(ps)
end
hold off
grid on
title('Random Walk Distances')
xlabel('Distance from the Origin')
ylabel('Each Iteration of the Experiment')
我建议你把你的脚本放到一个函数中并运行它。
一旦出现错误,在此处放置一个断点并查看变量/索引的外观,以了解为什么会出现此错误。这将帮助您自己调试代码。