2012-03-24 44 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