首页 文章

如何存储多次迭代的值

提问于
浏览
-1

以下是我的代码:

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] . 我将在 h 中计算多少 10 . 但是如果设置迭代= 5那么我只得到最后一次迭代的h . 所以我不能计算每次迭代的10个数 . 我不想存储h的所有迭代值而不是我想要存储多少个10个迭代

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

  • 我想计算 “s” 的多少个值等于 “a” . 假设,对于每个 “iteration”“s” 中等于 “a” 的值的数量是 “T” (Let)

  • 然后我想为每次迭代将 “T” 除以长度(e) . 假设每个 iteration 的值是 V (让)

  • 然后我想得到 V 的平均值为千位 “iteration”

示例:对于 2 iteration“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

我试了好几次但却无法这样做 .

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

2 回答

  • 0

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

    • 查找或定义迭代完成后要保留的变量

    • 确保它们被迭代索引,例如 h(iteration) 替换 h

    • 完成所有迭代后,评估结果并计算平均值

  • 0

    问题恰好在循环开始时:

    for t=1 : iteration
        s=zeros(4,1);
    
        ...
    
        s(offset,:)=h;
        offset=offset+1;
    

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

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

    s = zeros( iteration, 4, 1 );
    
    for t = 1 : iteration
    
      ...
    
      s(t, offset, :) = h;
      offset = offset + 1;
    

    现在,对于每次迭代,您将在 s 中拥有 h 的所有值 . 那个更好吗?

    edit 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`值的末尾 .

相关问题