テスト問題
[MGH81]で示されているテスト問題はすべて Mathematica にコード化され,
パッケージに入っている.解およびFindMinimumやFindRootを使ったテストのために問題がシームレスに処理されるよう,データ構造が使われている.FindMinimumおよびFindRootの問題のリストはそれぞれ
と
に含まれており,問題には
,
を使ってアクセスすることができる.
| $FindMinimumProblems | FindMinimumに適した問題のリスト |
| GetFindMinimumProblem[prob] | デフォルトのサイズと初期値を使った問題 prob を データ構造で得る |
| GetFindMinimumProblem[prob,{n,m}] | m 個の平方の和となるような n 個の変数を持つ問題 prob を データ構造で得る |
| GetFindMinimumProblem[prob,size,start] |
| 指定されたサイズ size と初期値 start を持つ問題 prob を データ構造で得る |
| FindMinimumProblem[f,vars,opts,prob,size] |
| FindMinimumが解く最小化問題を含むデータ構造 |
FindMinimum問題へのアクセス
| $FindRootProblems | FindRootに適切な問題のリスト |
| GetFindRootProblem[prob] | デフォルトのサイズと初期値を使った問題 prob を データ構造で得る |
| GetFindRootProblem[prob,n] | n 個の変数(と n 個の方程式)を持つ問題 prob を データ構造で得る |
| GetFindRootProblem[prob,n,start] | サイズ n,初期値 start を持つ問題 prob を データ構造で得る |
| FindRootProblem[f,vars,opts,prob,size] |
| FindRootが解く最小化問題を含むデータ構造 |
FindRoot問題へのアクセス
と
は共に,他のコマンドが使用するオプションを渡す.また,これらは問題に対して使用する変数を指定するために使われるVariables->vars オプションを取る.
| | |
| Variables | X#& | 変数の問題,あるいはその変数を含む長さ のリストのための変数を生成するために,整数 に適用する関数 |
変数名の指定
ビール問題を

データ構造で取り出す.
| Out[2]= |  |
パウエルの特異関数問題を

データ構造で取り出す.
| Out[3]= |  |
一旦
あるいは
オブジェクトを入手すると,ただ問題を解く以外にもさまざまなテストを実行することができる.
| ProblemSolve[p,opts] | p についての問題を解き,FindMinimum,FindRootと同じ出力を与える |
| ProblemStatistics[p,opts] | 問題を解き,リスト{ }を与える.ここで sol はProblemSolve[p] の出力,evals はステップと評価に使われた数を示す規則のリストである |
| ProblemTime[p,opts] | 問題を解き,リスト{ }を与える.ここで sol はProblemSolve[p]の出力,time は問題を解くのにかかった時間である.time が1秒より小さい場合は,平均時間を得る目的で問題が数回解かれる |
| ProblemTest[p,opts] | 問題を解き,ProblemStatistics[p]とProblemTime[p]からのステップ,評価統計,時間を含む規則のリスト,および,参照解との比較に基づく解の確度・精度を示す規則のリストを与える |
| FindMinimumPlot[p,opts] | p を解くためのステップと評価点をプロットする |
| FindRootPlot[p,opts] | p を解くためのステップと評価点をプロットする |
および
データオブジェクトを使った操作
既出のコマンドはすべてFindMinimumあるいはFindRootに直接渡されるオプションを取り,問題が設定されたときに指定されていたこれらの関数のオプションを上書きすることができる.
| Out[4]= |  |
上と同様の動作をするが,必要なステップ数や評価回数に関する統計を含んでいる.
| Out[5]= |  |
FindMinimumを使ってビール問題を解き,問題を解くのにかかる平均時間を求めるために,数回の試行にかかった時間を平均する.
| Out[6]= |  |
FindMinimumを使ってビール問題を解き,その結果と参照解を比較し,テストの結果を示す規則のリストを与える.
| Out[7]= |  |
は,同じ問題に対する2つの異なるメソッドを簡単に比較することができる.
| Out[8]= |  |
これらの関数によって返される規則のほとんどは自己説明的であるか,記述が必要なものもある.以下はそのような規則を明確にする表である.
| "FunctionAccuracy" | 関数値の確度 -Log[10, error in f ] |
| "FunctionPrecision" | 関数値の精度 -Log[10, relative error in f ] |
| "SpatialAccuracy" | 最小化関数あるいは根の位置の確度 -Log[10, error in x ] |
| "SpatialPrecision" | 最小化関数あるいは根の位置の精度 -Log[10, relative error in x ] |
| "Messages" | 問題を解いている間に出されたメッセージのリスト |
メソッドのリストが,ある特定の問題にどのように作用するかを比べると非常に役に立つ.この比較は,
オブジェクトを設定し,問題のテストをメソッドのリストにマップすることにより,簡単に実行することができる.
Chebyquad問題を取り出す.スペースを節約するために,出力が短縮されている.
Out[9]//Short= |
| |  |
これで,異なるメソッドを正確さと計算時間について比較する表を作成する.
Out[11]//TableForm= |
| |  |
あるいは
の名前にマップすることにより,ある特定のメソッドがさまざまな問題に対してどのように作用するかを示す表を作成することが可能である.

の問題すべてをテストした結果の一部を示す表を作成する.実行するのに数分かかることがある.
Out[13]//TableForm= |
| |  |
空間精度が2ヶ所
と表示されているが,これらは線形問題で,単独の最小化関数がないためである.また,非常に低い空間精度を持つものが1つあり,これは複数の最小化関数を持つので,メソッドは参照の最小値とは異なる最小値に行ってしまう.これらの関数の多くは複数の極小値を持つので,メソッドが参照の最小値とは異なる最小値に行ったという理由だけでエラーが報告される可能性があるということに気を付けなければならない.