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

2番目のビットでは、代わりに同じループ内でこれを行います。

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 に答える