テスト問題

[MGH81]で示されているテスト問題はすべてWolfram言語にコード化され,パッケージに入っている.解およびFindMinimumFindRootを使ったテストのために問題がシームレスに処理されるよう,データ構造が使われている.FindMinimumおよびFindRootの問題のリストはそれぞれに含まれており,問題にはを使ってアクセスすることができる.

$FindMinimumProblemsFindMinimumに適した問題のリスト
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問題へのアクセス

$FindRootProblemsFindRootに適切な問題のリスト
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 オプションを取る.

オプション名
デフォルト値
VariablesX#& 変数の問題,あるいはその変数を含む長さ のリストのための変数を生成するために,整数 に適用する関数

変数名の指定

パッケージをロードする.
In[1]:=
Click for copyable input
ビール問題をデータ構造で取り出す.
In[2]:=
Click for copyable input
Out[2]=
パウエルの特異関数問題をデータ構造で取り出す.
In[3]:=
Click for copyable input
Out[3]=

一旦あるいはオブジェクトを入手すると,ただ問題を解く以外にもさまざまなテストを実行することができる.

ProblemSolve[p,opts]p についての問題を解き,FindMinimumFindRootと同じ出力を与える
ProblemStatistics[p,opts]問題を解き,リスト{}を与える.ここで solProblemSolve[p] の出力,evals はステップと評価に使われた数を示す規則のリストである
ProblemTime[p,opts]問題を解き,リスト{}を与える.ここで solProblemSolve[p]の出力,time は問題を解くのにかかった時間である.time が1秒より小さい場合は,平均時間を得る目的で問題が数回解かれる
ProblemTest[p,opts]問題を解き,ProblemStatistics[p]ProblemTime[p]からのステップ,評価統計,時間を含む規則のリスト,および,参照解との比較に基づく解の確度・精度を示す規則のリストを与える
FindMinimumPlot[p,opts] p を解くためのステップと評価点をプロットする
FindRootPlot[p,opts] p を解くためのステップと評価点をプロットする

およびデータオブジェクトを使った操作

既出のコマンドはすべてFindMinimumあるいはFindRootに直接渡されるオプションを取り,問題が設定されたときに指定されていたこれらの関数のオプションを上書きすることができる.

FindRootを使ってパウエルの特異関数問題を解き,根を与える.
In[4]:=
Click for copyable input
Out[4]=
上と同様の動作をするが,必要なステップ数や評価回数に関する統計を含んでいる.
In[5]:=
Click for copyable input
Out[5]=
FindMinimumを使ってビール問題を解き,問題を解くのにかかる平均時間を求めるために,数回の試行にかかった時間を平均する.
In[6]:=
Click for copyable input
Out[6]=
FindMinimumを使ってビール問題を解き,その結果と参照解を比較し,テストの結果を示す規則のリストを与える.
In[7]:=
Click for copyable input
Out[7]=

は,同じ問題に対する2つの異なるメソッドを簡単に比較することができる.

FindMinimum「ニュートン」法を使ってビール問題を解き,その結果と参照解を比較し,テストの結果を示す規則のリストを与える.
In[8]:=
Click for copyable input
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問題を取り出す.スペースを節約するために,出力が短縮されている.
In[9]:=
Click for copyable input
Out[9]//Short=
以下が可能なメソッドのリストである.
In[10]:=
Click for copyable input
これで,異なるメソッドを正確さと計算時間について比較する表を作成する.
In[11]:=
Click for copyable input
Out[11]//TableForm=

あるいはの名前にマップすることにより,ある特定のメソッドがさまざまな問題に対してどのように作用するかを示す表を作成することが可能である.

FindMinimumでデフォルト設定を使って,問題をテストする関数を設定する.しかし,デフォルトのLevenbergMarquardtメソッドが収束できるよう,MaxIterationsの設定だけは大きくする.
In[12]:=
Click for copyable input
の問題すべてをテストした結果の一部を示す表を作成する.実行するのに数分かかることがある.
In[13]:=
Click for copyable input
Out[13]//TableForm=

空間精度が2ヶ所と表示されているが,これらは線形問題で,単独の最小化関数がないためである.また,非常に低い空間精度を持つものが1つあり,これは複数の最小化関数を持つので,メソッドは参照の最小値とは異なる最小値に行ってしまう.これらの関数の多くは複数の極小値を持つので,メソッドが参照の最小値とは異なる最小値に行ったという理由だけでエラーが報告される可能性があるということに気を付けなければならない.