大域的非線形数値最適化の例
複数の最適解を求める,メソッド1
これは複数の極小値を求めるひとつの方法である.異なる乱数の種でNMinimizeを複数回呼び出す.これにより異なる最適化のパスが取られる.
| Out[2]= |  |
| Out[3]= |  |
次に解を点に変換し,関数の等高線プロット上にプロットする.
| Out[7]= |  |
複数の最適解を求める,メソッド2
次は複数の極小値の別の求め方である.まず通過するすべての点のリストを作るように目的関数を書き,次に最終的な解に近い目的関数の値を持つ点を選ぶ.
| Out[20]= |  |
| Out[22]= |  |
次は最終的な解に近い目的関数の値のすべての点である.これらを白く,最終解を黒くし,関数の等高線上にプロットする.
| Out[27]= |  |
データの非線形フィットを求める
次は5つの乱数パラメータに基づくモデルを定義する.
| Out[30]= |  |
ここで,このモデルとパラメータから関数を作成し,区間

におけるサンプル点を生成する.
次にこの点と
FindFitによる解をプロットする.三角関数であるため,解は極小値により捕えられる.
| Out[37]= |  |
| Out[39]= |  |
| Out[41]= |  |
Solveの例
この連立方程式は非常に非代数的なので,
Solveは使えない.
NMinimizeに一定の目的関数と,制約条件として解かれる方程式を与える.これで解が見付かる.
| Out[43]= |  |
チェス盤上のクィーン
countAttacks[vec]は実数のベクトルをクイーンの置換に変換し,攻撃回数を数える.
次ではどのクイーンも他のクイーンを攻撃しないようにチェス盤上の全クイーンに適用するように
DifferentialEvolutionを用いる.離散問題の性質上後処理は役に立つとは思えないので行わないようにしておく.
| Out[52]= |  |
| Out[53]= |  |