在每个循环后存储数组

时间:2017-10-06 09:34:34

标签: matlab

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);

     

下标索引必须是实数正整数或逻辑。

1 个答案:

答案 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')

我建议你把你的脚本放到一个函数中并运行它。
一旦出现错误,在此处放置一个断点并查看变量/索引的外观,以了解为什么会出现此错误。这将帮助您自己调试代码。