while循环中的条件if语句

时间:2012-12-14 06:27:09

标签: matlab if-statement

我是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循环中,代码是为了找到数据部分高于这个“grip_threshold”的第一个值(我手动设置的值)。我的问题是:如果没有值符合这个标准,有没有办法让代码输入一个值(如零或null)来表明它已经通过,没有找到结果,所以它去了到下一个数据集?现在,如果代码没有找到结果,它将在for循环中运行所有试验,但最后会给我一个错误。

我希望这很清楚。我的matlab术语需要一些开发,就像我的编码技巧一样

提前谢谢!

2 个答案:

答案 0 :(得分:0)

这是一个可以帮助你显着的例子。

假设我运行以下命令:

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

现在,如果我想获得日志大于5的所有元素或者真正评估为任何函数的true,我可以这样做

elementsGreaterThan5 = x(log(x) > 5)

我建议使用这种方法来找到你需要的元素

请参阅逻辑索引Matrix Indexing in Matlab

答案 1 :(得分:0)

使用max返回第一个最大元素(即0-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都是向量。