2012-12-14 9 views
1

저는 matlab의 준말이며 데이터 라인이 임계 값 이상이 될 때까지 데이터 세트를 스캔하여 데이터 세트에서 값을 생성하는 while 루프를 작성했습니다. 여기서 코드의 일부이다 :조건 루프 while 문 내에서 조건문

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

     contact_time_index(n,1) = c; 

문제는 코드의 일부가 루프 큰 조건은, 상기 코드는 데이터 부분이 "grasp_threshold 초과하는 제 1 값을 검색하는 것을 의미 "(내가 수동으로 설정 한 값). 내 질문입니다 : 아무 가치 가이 기준을 충족 적이 없다면 코드가 값을 (예 : 0 또는 null)을 통해 그것을 통해 도망, 결과를 찾지 못했음을 나타낼 수있는 방법이며, 그래서 갔다 갔다. 다음 데이터 세트로? 코드가 결과를 찾지 못한다면, for 루프의 모든 시도를 실행하지만 결국에는 오류가 발생합니다.

분명히하는 것이 좋겠습니다. 내 MATLAB 특수 용어는 코딩 기술과 마찬가지로 개발이 필요합니다.

미리 감사드립니다!

+1

어디에서 루프에 값을 저장하고 있습니까? 또한 전반적인 문제를 더 설명 할 수 있습니까? 더 나은 접근법이 있습니다. – mdubez

답변

0

다음은 크게 도움이 될만한 예입니다.

의 내가 다음 명령을 실행한다고 가정 해 봅시다 : 나는보다 5 정말 어떤 기능에 충실한 평가 로그가있는 모든 요소를 ​​얻으려면 내가이

처럼 그렇게 할 수 있습니다 이제

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

elementsGreaterThan5 = x(log(x) > 5) 
난 당신이

논리적 색인을 참조해야 할 요소를 찾기 위해이 방법을 사용하는 것이 좋습니다 것

Matrix Indexing in Matlab

max 첫 번째 최대 요소 (즉, 0-1 배열의 1이 처음이다) 반환 사용
0

, 당신의 코드는 다음에 해당합니다 : 모든 요소 위에있을 경우 is_above가 당신을 말할 것이다

[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); 

임계 값 당신이 외부에 대한 루프와 Grasp_ThresholdGrip_sample_length 고정되어있는 경우

, 당신도 for 루프에이 계산을 넣을 필요가 없습니다 : 모두 is_abovefirst_idx_above_tsh이 벡터는 다음

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

있습니다.