2012-12-14 296 views
1

我對matlab是半新的,並且寫了一個while循環,它將通過掃描數據集來產生數據集中的值,直到數據行高於閾值。這裏是代碼的一部分:if語句中if語句的條件

c = 1; 
     while min(obj_cont1(c:c+Grip_sample_length,n)) < Grasp_Threshold 
     c = c + 1; 
     end 

     contact_time_index(n,1) = c; 

的問題在於,這部分代碼是內for循環更大,以及將碼是爲了找到第一個值,該值的數據部分高於該「grasp_threshold 「(我手動設置的值)。我的問題是:如果沒有值滿足這個標準,是否有辦法讓代碼輸入一個值(例如零或空值)來表示它已經通過,沒有找到結果,到下一個數據集?現在如果代碼沒有找到結果,它會遍歷for循環中的所有試驗,但最終會給我一個錯誤。

我希望這很清楚。我的matlab術語需要一些發展,就像我的編碼技巧一樣

謝謝你提前!

+1

你在哪裏存儲循環中的任何值?你也可以更詳細地解釋整體問題嗎?有一些更好的方法。 – mdubez

回答

0

下面是一個可以幫助你顯着的例子。

比方說,我運行以下命令:

x = []; 
for i = 1:10 
    x(i) = i^2; 
end 

現在,如果我想有一個日誌大於5或真正評估真實的任何功能的所有元素,我可以做到這樣

elementsGreaterThan5 = x(log(x) > 5) 

我會建議使用這種方法來找到你所需要

請參閱邏輯索引元素Matrix Indexing in Matlab

0

使用max返回第一個最大元素(也就是在0-1數組中的第1),你的代碼是相同的:

[is_above, first_idx_above_tsh] = max(obj_cont1(:,n) >= Grasp_Threshold); 
contact_time_index(n,1) = max(first_idx_above_tsh - Grip_sample_length, 1); 

其中is_above會告訴你,如果有上述的任何元素門檻。

如果你有外for循環和Grasp_ThresholdGrip_sample_length是固定的,你甚至都不需要把這個計算成for循環:

[is_above, first_idx_above_tsh] = max(obj_cont1 >= Grasp_Threshold); 
contact_time_index(:,1) = max(first_idx_above_tsh - Grip_sample_length, 1); 

這裏既有is_abovefirst_idx_above_tsh是矢量。