最適化パッケーコマンドにおけるオペレータの入力
|
以下の説明では、変数 x1, x2, ..., xn の関数の最小値または最大値を求める問題を仮定します。
|
|
目的関数
|
|
•
|
は変数に対応する n 個の数値パラメータに対し数値を返すような手続きを指定します。
|
•
|
The Optimization[LSSolve] コマンドは (1/2) (f1(x1, x2, ..., xn)^2 + f2(x1, x2, ..., xn)^2 + ... + fq(x1, x2, ..., xn)^2) の形の目的関数を持つ問題を解きます。目的関数は変数に対応する n 個の数値パラメータに対し数値を返すような手続きのリストです。手続きは残差 f1, f2, ..., fq を計算します。
|
|
|
制約条件
|
|
•
|
手続きの集合またはリストで不等式を与えます。 1 つの制約条件 v(x1, x2, ..., xn) <= 0 は上で説明した目的関数の同じ形で制約条件の左辺の係数を手続き v として指定します。
|
•
|
等式制約条件も手続きの集合またはリストとして与えます。各制約条件 w(x1, x2, ..., xn) = 0 はこの左辺の係数を返す手続きとして指定します。
|
|
|
境界条件
|
|
•
|
境界条件は範囲の列で与えます。例として。列 -1.0 .. 2.5, 0.5 .. 3.2 は 1つ目の変数を -1.0 から 2.5 の範囲、2 つ目の変数は 0.5 から 3.2 の範囲の境界条件であることを示しています。境界条件については、範囲の個数と変数の個数は同じでなければいけません。
|
•
|
境界条件は制約条件として指定することができます。例として、不等式 x>=1.5 および x<=3.2 という制約条件は x=1.5..3.2 と指定することと同じです。境界条件は分けて入力する必要はありませんが、分けることでより効率的は計算を行うことができます。
|
•
|
デフォルトでは変数は非負変数であることを指定していませんが、assume=nonnegative オプションすることで使うことができます。詳しくは Optimization/Options を参照ください。
|
|
|
初期値
|
|
•
|
初期値は initialpoint=p オプションを使って指定します。ただし、 p は実数のリストです。リストは各変数に対してそれぞれ値を持たなければいけません。initialpoint オプションについて詳しくは Optimization/Options を参照ください。
|
|
|
解
|
|
•
|
Maple は最小値 (最大値) とそれを満たす点 () のなすリストを解として返します。この点は変数が満たす値のベクトルで与えられます。
|
|
|
例
|
|
| (6.1) |
NLPSolve を使うために簡単な手続きを使います。
>
|
p := proc(x)
if x <= 0 then
x^2+1;
else
sin(x)/x;
end;
end;
|
| (6.2) |
| (6.3) |
最小二乗問題を解くのにオペレータの形を使います。
>
|
b1 := proc(x) x-1 end proc:
b2 := proc(x) x-7 end proc:
c1 := proc(x) -2*x-3 end proc:
c2 := proc(x) x-5 end proc:
LSSolve([b1, b2], {c1, c2}, 1..10);
|
| (6.4) |
Maximizeを使って解きます。
>
|
Maximize((x,y)->3*x^2+y, {(x,y)->x-2*y-2, (x,y)->y^2-x-3});
|
| (6.5) |
|
|