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.0372
0.2869
0.6861
0.7071
0.6233
0.6245
0.6344
0.6170]; d = [
0.8587
0.1781
0.0747
0.8405]; [C\d
lsqnonneg(C,d)]
= -2.5627
0
3.1108
0.6929 [norm
(C*(C\
d)-d)norm(
C*l
sqnonneg(C,d)-d)]=
0.6674
0.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 | ![]() |