Main Content

式に Inf または NaN が含まれる

最適化モデリング関数では、複素数、Inf、または NaN 値は指定できません。ただし、Inf または NaN の式は、通常の演算で発生することがあります。多くの場合、これらの式は誤った解を導きます。

Inf または NaN を含む最適化式は表示できません。たとえば、倍精度演算での最大の実数は約 1.8e308 です。そのため、2e308Inf へオーバーフローします。

x = optimvar('x');
y = 1e308;
expr = 2*x*y
expr = 

  OptimizationExpression

    Expression contains Inf or NaN.

同様に、Inf - Inf = NaN であるため、次の式は表示できません。

expr = 2*x*y - 3*x*y
expr = 

  OptimizationExpression

    Expression contains Inf or NaN.

いずれかの最適化式に Inf または NaN が含まれる場合は、solve を呼び出す前に、これらの値の除去を試みてください。手順は以下のとおりです。

  • 関数 show または write を使用して、これらの式を検索します。

  • 式がゼロ除算によるものか、大きな数の加算または乗算によるものであるかどうかを確認します。その場合は、式を除去または修正します。

  • 通常、これらの式はエラーの結果として現れます。ただし、不適切なスケーリングから発生することもあります。必要な場合は、式がオーバーフローしなくなるように十分に大きいスカラーで関連する式をそれぞれ除算するか、別のスケーリング演算を使用します。

参考

|

関連するトピック