| MATLAB Function Reference | ![]() |
表示
x = lsqnonneg(C,d) x = lsqnonneg(C,d,x0) x = lsqnonneg(C,d,x0,options) [x,resnorm] = lsqnonneg(...) [x,resnorm,residual] = lsqnonneg(...) [x,resnorm,residual,exitflag] = lsqnonneg(...) [x,resnorm,residual,exitflag,output] = lsqnonneg(...) [x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(...)
詳細
x = lsqnonneg(C,d)
は、x >= 0 の制約の基で、norm(C*x-d) を最小にするベクトル x を出力します。C とd は実数でなければなりません。
x = lsqnonneg(C,d,x0)
は、すべての x0 >= 0 の場合、スタート点として、x0 を使い、他の場合は、デフォルトを使います。デフォルトのスタート点は、原点(デフォルトは、
x0==[ ] のとき、または、入力引数が2つしか与えられていないときに使われます)です。
x = lsqnonneg(C,d,x0,options)
は、構造体 options に指定された最適化パラメータを使って、最小化されます。ユーザは、関数 optimset を使って、これらのパラメータを定義します。lsqnonneg は、つぎの options 構造体フィールドを使います。
Display - 表示レベル。off は、出力表示なし。 final は、最終出力のみ表示。TolX - x に関する終了トレランス[x,resnorm] = lsqnonneg(...)
は、残差の二乗ノルム norm(C*x-d)^2 を出力します。
[x,resnorm,residual] = lsqnonneg(...)
は、残差 C*x-d を出力します。
[x,resnorm,residual,exitflag] = lsqnonneg(...)
は、lsqnonneg の終了状態を記述する値 exitflag を出力します。
> 0 は、関数が、解 x に収束していることを示します。0 は、繰り返し回数が、設定回数を超えていることを示します。(options の中の TolX)トレランスを大きくすると、解に近付く可能性があります。
[x,resnorm,residual,exitflag,output] = lsqnonneg(...)
は、演算に関する情報を含む構造体 output を出力します。
output.iterations - 使用した繰り返し回数output.algorithm - 使用したアルゴリズム[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(...)
は、双ベクトル(Lagrange 乗数) lambda を戻します。これは、x(i) が、(近似的に) 0 の場合、lambda(i)<=0 で、x(i)>0 の場合、lambda(i) は、(近似的に) 0 になります。
例題
制約なしの最小二乗解と lsqnonneg の解を、4行2列の問題について、考えます。
C = [0.03720.28690.68610.70710.62330.62450.63440.6170]; d = [0.85870.17810.07470.8405]; [C\dlsqnonneg(C,d)]= -2.562703.11080.6929 [norm(C*(C\d)-d)norm(C*lsqnonneg(C,d)-d)]=0.66740.9118
関数 lsqnonneg からの解は、最小二乗解としては、あまりフィットしません(大きな残差を含んでいます)。しかし、非負の最小二乗解は、名前の如く、負の成分をもっていません。
アルゴリズム
lsqnonneg は、参考文献 [1] に記述しているアルゴリズムを使用します。アルゴリズムは、可能な基底ベクトルの集合からスタートし、関連する双ベクトル lambda を計算します。そして、他の可能な候補と基底を交換するために、lambda の中に最大に対応する基底ベクトルを選択します。この操作は、lambda <= 0 になるまで続けます。
参考
参考文献
Lawson, C.L. and R.J. Hanson, Solving Least Squares Problems, Prentice-Hall, 1974, Chapter 23, p. 161.
| lscov | lsqr | ![]() |