以下是我的代码:
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 回答
我在你的问题中有点迷失,但这是我认为你需要的:
查找或定义迭代完成后要保留的变量
确保它们被迭代索引,例如
h(iteration)
替换h
完成所有迭代后,评估结果并计算平均值
问题恰好在循环开始时:
这意味着您在每次迭代中重置变量
s
. 如果将s
的初始化移动到循环外部,那么事情应该可以正常工作 . 实际上,您似乎只存储最后一次迭代的结果(您将之前的迭代归零) .EDIT 有点难以知道
h
的大小是什么(它看起来像一个单独的值,但是你正在做s(offset,:) = h;
,这有点令人困惑) . 无论如何,如果你使s
足够大以包含所有值,并正确索引它,你应该没问题:现在,对于每次迭代,您将在
s
中拥有h
的所有值 . 那个更好吗?edit 2 您想要在每次迭代中
h
为10
的次数 . 将此行放在for t=
循环之外:在你计算
h
之后这个内部:在每次迭代的'for
loop this will contain what you wanted - and you can check it against
swhich will have one row of
h`值的末尾 .