式に Inf
または NaN
が含まれる
最適化モデリング関数では、複素数、Inf
、または NaN
値は指定できません。ただし、Inf
または NaN
の式は、通常の演算で発生することがあります。多くの場合、これらの式は誤った解を導きます。
Inf
または NaN
を含む最適化式は表示できません。たとえば、倍精度演算での最大の実数は約 1.8e308
です。そのため、2e308
は Inf
へオーバーフローします。
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
を使用して、これらの式を検索します。式がゼロ除算によるものか、大きな数の加算または乗算によるものであるかどうかを確認します。その場合は、式を除去または修正します。
通常、これらの式はエラーの結果として現れます。ただし、不適切なスケーリングから発生することもあります。必要な場合は、式がオーバーフローしなくなるように十分に大きいスカラーで関連する式をそれぞれ除算するか、別のスケーリング演算を使用します。