-1
  b_k = 1;
  while (b_k <= iv0[1]) {
    h = vplus_data[0];
    u1 = vmax->data[(int)((1.0 + (double)k) + 1.0) - 1];
    if ((h <= u1) || rtIsNaN(u1)) {
      minval_data_idx_0 = h;
    } else {
      minval_data_idx_0 = u1;
    }

    b_k = 2;
  }

  b_k = 1;
  while (b_k <= iv0[1]) {
    h = vmin->data[(int)((1.0 + (double)k) + 1.0) - 1];
    if ((h >= minval_data_idx_0) || rtIsNaN(minval_data_idx_0)) {
    } else {
      h = minval_data_idx_0;
    }

    vplus_data[0] = h;
    b_k = 2;
  }

このコードは、h または u1 の最小値を取得するために min 関数と比較されます。なぜ matlab がそのような構文を生成するのか教えてもらえますか? whileブロック内に変更が見られないのに、なぜwhileループなのか!

matlab コード

v(k+1) = max(vmin(k+1), min(vplus, vmax(k+1)));

max min 関数には 2 つのループがあることに注意してください

4

1 に答える 1

2

生成されたコードがそのような結果になる理由を説明することはできませんが、Matlab コードの書き方に関係があるに違いありません。奇妙に見えますが、機能する場合はおそらく問題ありません。

ジェネレーターに興味がある場合は、非常に単純なものから始めて、コードが複雑になるにつれて生成されたコードがどのように変化するかを確認してください。次のようなバリエーションを試してください。

z = min(x, y);

z = max(w, min(x, y));

for i = 1:length(v)
    z(i) = max(w, min(v(i), y));
end

テスト コードを少しずつ変更して、この質問を促したコードのようにします。おそらく、表示されている結果をトリガーする原因を正確に発見できるでしょう。

于 2013-08-23T15:20:36.057 に答える