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_abovefirst_idx_above_tsh都是向量。

于 2012-12-14T10:24:19.160 回答
0

这是一个可能对您有很大帮助的示例。

假设我运行以下命令:

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

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

elementsGreaterThan5 = x(log(x) > 5)

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

参见Matlab 中的逻辑索引矩阵索引

于 2012-12-14T06:38:12.050 回答