変数と初期条件
関数FindMinimum,FindMaximum,FindRootはすべて同じ形式で変数を指定する.関数FindFitはパラメータの指定に同じ形式を使う.
| FindMinimum[f,vars] | vars で与えられる変数について,f の極小値を求める |
| FindMaximum[f,vars] | vars で与えられる変数について,f の極大値を求める |
| FindRoot[f,vars] | vars で与えられる変数について,根 |
| FindRoot[eqns,vars] | vars で与えられる変数について,方程式 eqns の根を求める |
| FindFit[data,expr,pars,vars] | data に expr が最高のフィットを与えるようにするパラメータ pars の値を vars の関数として求める |
リスト vars(FindFitでは pars)は個別の変数指定のリストでなければならない.各変数指定は次の形式でなければならない.
| {var,st} | 変数 var が初期値 st を持つ |
| {var,st1,st2} | 変数 var が2つの初期値 |
| {var,st,rl,ru} | 変数 var が初期値 st を持つ.探索は var の値が区間 |
| {var,st1,st2,rl,ru} | 変数 var が2つの初期値 |
vars の指定にはすべて,同じ数の初期値が含まれていなければならない.領域の境界が指定されていないときは,有界ではない,すなわち
,
とみなされる.
ベクトル値と行列値の変数
変数の最も一般的な使用法は,数を表すことである.しかし,変数入力文法はベクトル,行列,高階のテンソルとして扱われる変数もサポートする.一般に,
コマンドでは,変数は,それに与えられた初期条件と同じ矩形構造をした値を取るものと見なされている.FindFitの場合は例外で,現在スカラー変数しか使えない.
| In[1]:= |
| In[2]:= |
| Out[2]= |
もちろん,これが固有値を求める最高の方法ではないが,どのようにして初期値から変数の次元が拾われるのかは示している.
の初期値は1なので,スカラーであると見なされる.一方
に与えられた初期値は長さ3のベクトルなので,こちらは常に長さ3のベクトルであると見なされる.
変数に複数の初期値を使う場合は,それらの値の次元が一定であること,また初期値の各要素が互いに異なっていることが必要である.
| In[3]:= |
| Out[3]= |
ベクトル値と行列値が取れる変数の利点のひとつは,大規模問題および/または異なるサイズの問題の自動処理に非常に効率がよい関数が書けることである.
| In[4]:= |
の構造が正しくなければ関数の値は無意味なので,この定義はその構造を持つ引数に限られる.例えば,関数を任意のパターン
について定義し,次いで未定義のシンボル
で評価すると(FindMinimumが行うのはこういうことである),予期せぬ無意味な結果が返される.ベクトル値の変数についての関数を使っている場合は,しばしば定義を制限しなければならないことがある.上記の定義は正しい構造の記号的な値は排除しない点に注意のこと.例えば
はスカラー
, ...に対して関数の記号的な表記を与える.
Mathematica がこの関数の記号導関数を得ることができず,正確ではない有限差分を使わなければならなかったので,解はデフォルトの許容範囲に達していない.
ベクトル値あるいは行列値の変数を使う際の欠点は,現時点では Mathematica でこれらの記号的な導関数が計算できないという点である.正しい導関数を与える関数を展開するのがそれほど困難ではないこともある.これに失敗したが,本当にこれ以上の確度が必要である場合は,より高階の有限差分を使うことができる.
| In[8]:= |
| In[9]:= |
| Out[11]= |
ヤコビ行列とヘッセ行列の導関数は疎であることが多い.適切な場合に,これらの導関数の疎な構造を指定することもできる.この指定により,全体的な解の複雑さをかなり軽減することができる.





