例:関数の最適化
maximize関数と
minimize関数および推定値を使用して、入力関数が最大または最小になる点を求めます。推定値により、その他の局所最大値や局所最小値の点ではなく、その範囲の極大値または極小値に収束するソルバー関数がわかります。ソルブブロック内でソルバー関数を使用する場合、アルゴリズムでサーチをプロットの特定のドメインまたは特定の領域に制限するよう制約できます。
制約条件のない推定値の使用
1. sin関数を使用して、増加する正弦関数を定義します。
2. maximize 関数と minimize 関数を使用し、推定値を与えて局所最大値と局所最小値を求めます。
3. 関数をプロットし、縦マーカーを使用して局所最大値と局所最小値を表示します。
両関数は、推定値に最も近い局所最大値と局所最小値を返します。
境界なし制約条件のある推定値の使用
1. maximize 関数と minimize 関数に制約を与えるため、各関数をそれぞれのソルブブロック内で使用します。
2. この短いプログラムを使用して、プロット上の制約領域をハイライトします。
3. ハイライト領域の始点に制約の値を設定して、シェードベクトルを生成します。
4. シェードされた制約領域、新しい推定値、新しい局所最大値および局所最小値を表示します。Y1 トレースの「線種」を「(なし)」に設定します。
返された最小値と最大値は、制約値 x>7 を満たします。
境界付き制約条件のある推定値の使用
1. maximize 関数と minimize 関数により厳格な制約を与えるため、制約の上限と下限を指定します。
2. ハイライト領域の始点に制約の値を設定して、シェードベクトルを生成します。
3. シェードされた制約領域、推定値、局所最大値および局所最小値を表示します。
返された最小値と最大値は、制約範囲 0<x<10 を満たします。
制約の使用に関する注意
制約を使用する場合、返される最大値または最小値が制約値とは等しくないことを確認することをお勧めします。
1. 制約に狭い境界を指定して、最小値と最大値を再計算します。
2. ハイライト領域の始点と終点に制約の下限と上限を設定し、シェードベクトルを生成します。
3. シェードされた制約領域、推定値、局所最大値および局所最小値を表示します。
返された最大値に変わりはないものの、返された最小値は制約の上限と一致しています。返された最小値は制約条件を満たしていますが、関数のいずれの最小点とも一致していません。つまり、minimize 関数および maximize 関数は制約条件を満たす最小値と最大値を返しますが、必ずしも関数の極小値または極大値を返すとは限りません。
この場合は、返される値が指定された制約条件内に問題なく収まり、上限または下限に近づかないようになるまで、制約条件を緩和することをお勧めします。
4. 「数式の書式設定」タブの「結果」グループで、「結果のフォーマット」を「(十進表記)」に設定し、返される最小値と最大値の妥当性をチェックするために、返された値で入力関数の微分を評価するとゼロになることを確認します。
これにより、sblo3 の最小値を除いて、すべてのソルブブロックが計算した最大値と最小値は、正しい最大点および最小点で関数曲線と交差することが示されます。
5. 制約条件の上限を緩和してから、最小点と最大点を再計算します。
今回は、最小値が十分に制約領域内に入っています。