1

私はmatlabを初めて使用し、データラインがしきい値を超えるまでデータセットをスキャンしてデータセットから値を生成する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;

問題は、コードのこの部分がより大きなforループ内にあり、データ部分がこの「grasp_threshold」(手動で設定した値)より上にある最初の値を見つけることを目的としています。私の質問は、この基準を満たす値がない場合、コードに値(ゼロ、ヌルなど)を入力させて、実行され、結果が見つからなかったことを示す方法はありますか?次のデータセットに?現在、コードで結果が見つからない場合は、forループ内のすべての試行が実行されますが、最後にエラーが発生します。

これが明確であることを願っています。私のmatlab専門用語は、コーディングスキルと同じように、ある程度の開発が必要です。

前もって感謝します!

4

2 に答える 2

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

whereis_aboveは、しきい値を超える要素があるかどうかを示します。

外側の for ループがあり、Grasp_ThresholdandGrip_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_aboveベクトルfirst_idx_above_tshです。

于 2012-12-14T10:24:19.160 に答える
0

これは、あなたを大いに助けるかもしれない例です。

次のコマンドを実行するとします。

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

ここで、log が 5 より大きいすべての要素を取得したい場合、または実際に任意の関数に対して true と評価される場合は、次のように実行できます。

elementsGreaterThan5 = x(log(x) > 5)

このアプローチを使用して、必要な要素を見つけることをお勧めします

論理インデックスを参照してください。Matlabでのマトリックス インデックス作成

于 2012-12-14T06:38:12.050 に答える