1

与此 matlab 代码等效的 c++ 是什么?我开始了,但我不确定 B 的值是多少,我认为 A 是正确的。

MATLAB

array = (-1:.001:1)';

    A = max(find(array < 1.0e-2));
    B = min(find(array > 1 - 1.0e-2));

C++ 尝试

for(i = 0; i < array.size; i++){
    if(array[i] < 1.0e-2){ 
    k++
    A = k;
   }
    if(array[i] > (1- 1.0e-2)){
    //not sure what to do here
    B = ?;
   }
}
4

3 回答 3

2
for(i = 0; i < array.size; i++){  // Would be faster if you reversed loop direction
    if(array[i] < 1.0e-2)
        A = i;
}

for(i = 0; i < array.size; i++) {
    if(array[i] > 1-1.0e-2) {
        B = i;
        break;
    }
}
于 2012-09-11T04:38:10.683 回答
1

对于第二点,我会在同一个循环中这样做:

if(array[array.size-i-1] > (1 - 1.0e-2)) B = array.size - i;

并在循环之前B初始化。array.size

本质上,您正在查找数组中索引最低的元素,该元素也大于1 - 1.0e-2. 如果您从具有最高索引的元素开始,然后遍历整个数组并在每次满足条件时进行更新,您最终将得到您需要的内容。类似的逻辑适用于第一部分,但您需要设置A = i+1而不是递增k,因为不能保证数组已排序。

于 2012-09-11T04:35:42.730 回答
1

基本上该命令A = max(find(array < 1.0e-2));正在寻找大于 1.02e-2 的数组的最大索引。

要了解这是如何发生的,只需将语句分解为几部分:

array < 1.0e-2)返回一个逻辑索引向量。

find( ... )将逻辑索引转换为数字索引

max(...)返回数值索引列表中的最大值。

C++ 等价物看起来像:

int A = -1;
int maxVal = 1.0e-2;
for (int i = array.length-1; i>=0; i--)
   if (array[i] < maxVal){
      A = i;
      break;
   }

B设置另一个循环:

int B = -1;
int minVal = 1 - 1.0e-2;

for (int i=0; i<array.length; i++)
    if (array[i] > minVal){
        B = i;
        break;
     }
于 2012-09-11T04:36:53.720 回答