JSLのMaximize()関数およびMinimize()関数は、式を最適化(最大化または最小化)する因子の値を求めます。式は、因子の値に対して連続関数でなければいけません。
この関数を呼び出す方法は、次のとおりです。
result = Maximize(objectiveExpression,{list of factor names}, <<option(value))
result = Minimize(objectiveExpression,{list of factor names}, <<option(value))
objectiveExpressionは、最適化する対象の式です。式そのもの、または式が保存されているグローバル変数名のどちらかを指定します。
{list of factor names}には、objectiveExpressionに含まれる因子名のリストを指定します。
因子名の後に、name(lowerBound,upperBound)のように、許容値の範囲を指定することもできます。
許容値の上限または下限だけを指定する場合は、以下の例のように片側を欠測値にします。
{beta} // 制限なし
{beta (0,1)} // 0以上1以下
{beta (.,1)} //1以下
{beta (0,.)} or {beta (0)} // 0以上
因子の値は、数値または行列のいずれかです。
また、以下のオプションも使用できます。デフォルト値は、以下のとおりです。
<< Tolerance(.00000001) // 収束基準
<< Max Iter( 250) // 最大反復数
<< Limits() //
関数を呼び出す前に、因子には初期値が割り当てられているものとします。
これらの関数は、複数の局所解を持つ関数において、大域的な最適解を見つけるとは限りません。指定された初期値から、ある局所的な最適解(問題によっては、大域的な最適解かもしれませんが)を求めることしかできません。
現在のところ、戻り値は目的関数の値です。
Minimizeを使用して、指数モデルにおいて最小2乗法の推定値を求める例を示します。サンプルデータのフォルダ内にある「Nonlinear Examples」の「US Population.jmp」データテーブルのデータを使用します。
xx = [1790, 1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870, 1880, 1890, 1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990];
yy = [3.929, 5.308, 7.239, 9.638, 12.866, 17.069, 23.191, 31.443, 39.818, 50.155, 62.947, 75.994, 91.972, 105.71, 122.775, 131.669, 151.325, 179.323, 203.211, 226.5, 248.7];
b0 = 3.9;
b1 = .022;
sseExpr = Expr(
Sum( (yy - (b0 * Exp( b1 * (xx - 1790) ))) ^ 2 )
);
sse = Minimize( sseExpr, {b0, b1}, <<Tolerance( .00001 ) );
Show( b0, b1, sse );
b0 = 13.9991388055261;
b1 = 0.0147104409355048;
sse = 1862.14141218875;