2012-03-24 16 views
2

我有一个函数,10个周期可以找出各个传感器值和平均传感器值之间的差异。测试将使用此功能完成100次。所以每次周期> 10时,我都强迫它为零,因此在第11次重复时,它将从零开始重新计数。下面是代码:使用Matlab查找5个连续的成功?

cycle=cycle +1; 
if cycle>10 
    cycle=0; 
end 

for i=1: TotalnoOfGrids 
    for j=1: noOfNodes 
    if abs(char(Allquants{i}(j))-char(mostCommonLetters {i}))>0 
     if cycle>0 
     wrong{i}(j)=wrong{i}(j)+1; 
     else 
     wrong{i}(j)=0; 
     end 
    end 
    end 
end 

现在我需要知道传感器是否在10个周期内执行了5次连续成功。我怎样才能做到这一点?

我想到了一个循环,但我读到它需要太多的时间。

在网上搜索我找到了this SO question

问题是上面的函数会重复100个周期。我想每10个周期看看是否有连续的成功,所以它动态完成,我没有保存传感器的成功或失败状态周期。所以我没有一个包含1或0的矢量来使用上面参考中使用的函数,或者像Jonas建议的那样。

+0

重要的是你的代码是否成功? – Jonas 2012-03-24 17:02:42

+0

我在计算错误,所以如果错误是0成功是1对不对? – pac 2012-03-24 17:49:42

+0

您正在计算每个网格和每个节点的错误。什么是连续5次成功?另外,'错误'是一个单元阵列 - 是有原因的吗? – Jonas 2012-03-24 18:56:54

回答

1

如果一个循环是最容易的事情,试试吧!仅仅因为你读过它“花费太多时间”并不意味着它对你的情况真的有影响!确实,在Matlab中避免循环通常是有意义的;但在你的情况下,100 * 20 * 9(如果我理解你正确的话)循环迭代看起来并不那么糟糕(取决于你的速度要求)。

编辑(修正答案)

我现在从你的意见,你告诉我们的代码是由whilefor循环正在被运行〜100倍包围,并且AllquantsmostCommonLetters可能变化理解在那个循环里面。在这种情况下,我以前的答案不适合你,因为它计算了不同的传感器的成功;现在应该会更好。

如果我正确读取了您的代码,条件abs(char(Allquants{i}(j))-char(mostCommonLetters {i}))>0告诉您结果是“错误的”;因此,

for i=1:TotalnoOfGrids 
    this_cycle_successes(i,:)=char(Allquants{i})==char(mostCommonLetters{i}); 
end 
consecutive_successes=(consecutive_successes+1).*this_cycle_successes; 

会计算你连续有多少成功。请注意,在开始您的cycle循环之前,您需要初始化consecutive_successes,例如

consecutive_successes = zeros(9,20); 

的10次循环后,可以查看哪个传感器有5个成功是这样的:

has5successes = consecutive_successes>=5; 

注意,这是一个矩阵运算,所以现在你会得到9点* 20点的值,如您在您的评论中请求。该解决方案不需要通过j循环。

+0

您写的成功等式@Jonas不会以这种方式计算成功次数吗?它会覆盖 – pac 2012-03-25 12:57:44

+0

此外,我只有9个值has5successes我怀疑9 * 20。将在它上面找到解决方案,我希望 – pac 2012-03-25 13:06:49

+0

@pac,我重写了我的答案 – 2012-03-25 13:37:34