如何存储多次迭代的值

时间:2013-10-23 12:42:06

标签: matlab

以下是我的代码:

a= 10;
b= [1 0 0 0 1 0 1 0 1 0;1 1 0 0 1 0 1 0 1 1;1 0 1 0 1 0 1 1 1 0;1 1 1 1 1 0 1 0 1 0;1 0 1 0 1 0 1 0 1 0 ];
e= [0.05 0.08 0.2 0.4];
iteration= 1;
x= zeros(1,1);

g= eye(10);
G= [g;b];

for t=1 : iteration
    s=zeros(4,1);
    offset=1;
    for u=e(1:length(e))
        F = G ;
        for i=1:15
            if(rand < u)
                F(i,:) = 0;
            end
        end
        soup=zeros(1,a);
        for k = 1 : 15
            FD = max( F(k,:)-soup, 0) ;
            if( sum(FD) == 1)
                [MaxValue Idx] = max(FD) ;
                soup(Idx) = 1 ;
            end
        end
        h =sum(soup) ;
        s(offset,:)=h;
        offset=offset+1;
    end
end

从此代码中我得到h=[10;10;10;8]。我将计算10h的数量“iteration”。但是如果设置迭代= 5那么我只得到最后一次迭代的h。所以我不能计算每次迭代的10个数。我不想存储h的所有迭代值而不是我想要存储多少个10个迭代

现在我想更改1000的值,并希望将其设为“iteration”;对于每个“s”

  1. 我想要计算“a”的值等于“iteration”的数量。假设,对于每个“s”“a”中等于“T”的值的数量为“T”(允许)
  2. 然后我希望每次迭代将iteration除以长度(e)。假设每个V的值为V(设)
  3. 然后我希望得到“iteration”的总平均值2 iteration
  4. 实施例: 对于“s”“a”中等于3,2的值的数量为 For iteration=1, V=3/length(e)=3/4=0.75 For iteration = 2, V=2/length(e)=0.5 So, average value of V for two iteration = (0.75+0.5) / 2 = 0.625 所以,

    {{1}}

    我曾多次尝试但无法这样做。

    Matlab专家请您提供帮助和建议。

2 个答案:

答案 0 :(得分:0)

我在你的问题中有点迷失,但这就是我认为你需要的东西:

  1. 查找或定义迭代完成后要保留的变量
  2. 确保使用迭代对其进行索引,例如在h
  3. 之处替换h(iteration)
  4. 完成所有迭代后,评估结果并计算平均值

答案 1 :(得分:0)

问题出现在你的循环开始时:

for t=1 : iteration
    s=zeros(4,1);

    ...

    s(offset,:)=h;
    offset=offset+1;

这意味着您在每次迭代中重置变量s。如果将s的初始化移到循环外部,那么事情应该可以正常工作。实际上,您似乎只存储了最后一次迭代的结果(您将之前的迭代结果归零)。

编辑有点难以知道h的大小是什么(它看起来像一个值,但你正在做s(offset,:) = h;这有点令人困惑)。无论如何,如果你使s足够大以包含所有值,并正确索引它,你应该没问题:

s = zeros( iteration, 4, 1 );

for t = 1 : iteration

  ...

  s(t, offset, :) = h;
  offset = offset + 1;

现在,对于每次迭代,您将在h中获得s的所有值。那更好吗?

编辑2 您希望每次迭代中h10的次数。将此行放在for t=循环之外:

Hcount = zeros(1,iteration);

在你计算h后的内部:

Hcount(t) = numel(find(h==10));

每次迭代的'for loop this will contain what you wanted - and you can check it against s which will have one row of h`值结束时。