Optimization[LSSolve] - 最小二乗問題を解く
使い方
LSSolve(obj, constr, bd, opts)
LSSolve(opfobj, ineqcon, eqcon, opfbd, opts)
パラメータ
obj - list(algebraic); 最小二乗残差
constr - (オプション) set(relation) または list(relation); 制約条件
bd - (オプション) name = range の列; 境界条件
opfobj - list(procedure); 最小二乗残差
ineqcon - (オプション) set(procedure) または list(procedure); 不等式制約条件
eqcon - (オプション) set(procedure) または list(procedure); 等式制約条件
opfbd - (オプション) 範囲の列 ; 境界条件
opts - (オプション) option = value の形の等式。ただし、option は assume, feasibilitytolerance, infinitebound, initialpoint, iterationlimit, method, optimalitytolerance または output
|
説明
|
|
•
|
LSSolve コマンドは (1/2) (f1(x)^2 + f2(x)^2 + ... + fq(x)^2) の目的のを求めるという (LS) 問題を解きます。を仮定することもできます。一般に、問題でない限り最小値を解として返します。LSSolve で使う算法は残差 fi(x) および制約条件は 2 階連続微分可能であると仮定していますが、この条件を満たさなくても計算できる場合もあります。
|
•
|
最初の使い方は代数式の入力についてです。第 1 引数 obj は代数式のリスト [f1, f2, ..., fq] の目的関数を入力します。
|
|
第 2 引数 constr は制約条件の集合またはリストをオプションで入力します。変数は obj および constr の中にある名前の型をもつ不定元です。
|
|
境界条件 bd は varname を変数、varrange を範囲とするとき、 varname = varrange の形で与えます。
|
•
|
次の使い方はオペレータの形の入力についてです。目的関数 opfobj は変数 x1, x2, ..., xn の数値を返すような手続きのリストを入力します。この手続きは最小二乗残差 f1, f2, ..., fq を計算します。
|
|
不等式および等式制約条件は ineqcon および eqcon をオプションで入力します。不等式制約条件 v(x1, x2, ..., xn) <= 0 は手続き v を ineqcon の要素とし、opfobj も同様に入力し制約条件を返すようにします。等式制約条件 w(x1, x2, ..., xn) = 0 は手続き w を eqcon の要素とします。 ineqcon または eqcon のどちらかは空であっても構いません。
|
|
境界条件 opfbd はオプションで入力しますが、 x1, x2, ..., xn の順序に対応するように入力する必要があります。
|
•
|
いずれの入力の形でも、はじめ変数が非負であることは仮定されていませんが、assume = nonnegative オプションを使うことで使うことができます。境界条件として infinity の型を使うことができます。
|
•
|
Maple は最小値 (最大値) およびそれを満たす点 (極値) のリストを解として返します。output = solutionmodule オプションを使うと、解としてモジュールを返します。詳しくは Optimization/Solution を参照ください。
|
|
|
オプション
|
|
•
|
assume = nonnegative -- すべての変数を非負と仮定します。
|
•
|
feasibilitytolerance = realcons(positive) -- 許容できる誤差の量を指定します。
|
•
|
infinitebound = realcons(positive) -- infinitebound より大きい値を infinity とみなします。
|
•
|
initialpoint = set(equation), list(equation), または list(numeric) -- 初期点を指定します。代数式で与えたときは varname=value のリストとして、オペレータの形のときは n の値のリストで指定します。
|
•
|
iterationlimit = posint -- 最大反復回数を指定します。
|
•
|
optimalitytolerance = realcons(positive) -- 最適な値を見つけるため精度を指定します。このオプションは線形問題で使うことができません。
|
|
|
注意
|
|
•
|
LSSolve コマンドは Numerical Algorithms Group (NAG) によって組み込まれたいろいろな算法を使います。詳しくは Optimization/Methods を参照ください。ソルバは反復法であり初期点を必要とします。非線形計画問題の解は選んだ点に依存するので、initialpoint オプション使って指定することを推奨します。指定しない場合は点を自動的に生成します。
|
•
|
計算は浮動小数で行います。データは実数で与える必要があり、問題の値を正確に与えても解として浮動小数を返します。複素数を入力するとエラーを返すため、目的関数および制約条件が常に実数をとるように制約条件を追加する必要があるときがあります。最適化パッケージでの数値による計算について詳しくは Optimization/Computation を参照ください。
|
•
|
asumme=nonnegative を使うことができますが、 最適化パッケージでは一般の仮定は提供されていません。
|
•
|
条件が満たされ反復が収束したとき、答えを返します。
通常、局所的最小値を返しますが、 を返すときもあります。初期点を変えて解の妥当性を検証することを推奨します。
ときどき、ソルバは反復が収束しなくても解を返すことがありますが、この値は条件を満たしています。infolevel[Optimization] を 1 以上にすることで計算の様子をメッセージとして生成することができます。
|
•
|
LSSolve は解が見つからないときエラーを返します。そのときは初期点をまたは制約条件を減らすなどして再計算することを推奨します。
|
|
|
例
|
|
3 つの残差からなる LS 問題を解きます。目的関数は (1/2)((x-2)^2+(x-6)^2+(x-9)^2) です。
>
|
LSSolve([x-2,x-6,x-9]);
|
| (4.1) |
非線形残差で与えられる LS 問題を解きます。初期点は initialpoint オプションで指定します。
>
|
LSSolve([x^3-2,x^2-6,x^2-9], initialpoint = {x=1});
|
| (4.2) |
線形制約問題のもとで最小二乗問題を解きます。
>
|
LSSolve([x-1,y-1,z-1], {6*x+3*y<=1, x<=0}, initialpoint = {x=-1,y=1});
|
| (4.3) |
線形制約条件のもとで最小二乗問題を解きます。
>
|
LSSolve([x-1], {(x+1)^2<=0});
|
| (4.4) |
|
|