MATLAB Function Reference    
lsqnonneg

非負の制約をもつ線形最小二乗法

表示

詳細

x = lsqnonneg(C,d) は、x >= 0 の制約の基で、norm(C*x-d) を最小にするベクトル x を出力します。Cd は実数でなければなりません。

x = lsqnonneg(C,d,x0) は、すべての x0 >= 0 の場合、スタート点として、x0 を使い、他の場合は、デフォルトを使います。デフォルトのスタート点は、原点(デフォルトは、 x0==[ ] のとき、または、入力引数が2つしか与えられていないときに使われます)です。

x = lsqnonneg(C,d,x0,options) は、構造体 options に指定された最適化パラメータを使って、最小化されます。ユーザは、関数 optimset を使って、これらのパラメータを定義します。lsqnonneg は、つぎの options 構造体フィールドを使います。

[x,resnorm] = lsqnonneg(...) は、残差の二乗ノルム norm(C*x-d)^2 を出力します。

[x,resnorm,residual] = lsqnonneg(...) は、残差 C*x-d を出力します。

[x,resnorm,residual,exitflag] = lsqnonneg(...) は、lsqnonneg の終了状態を記述する値 exitflag を出力します。

[x,resnorm,residual,exitflag,output] = lsqnonneg(...) は、演算に関する情報を含む構造体 output を出力します。

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(...) は、双ベクトル(Lagrange 乗数) lambda を戻します。これは、x(i) が、(近似的に) 0 の場合、lambda(i)<=0 で、x(i)>0 の場合、lambda(i) は、(近似的に) 0 になります。

例題

制約なしの最小二乗解と lsqnonneg の解を、4行2列の問題について、考えます。

関数 lsqnonneg からの解は、最小二乗解としては、あまりフィットしません(大きな残差を含んでいます)。しかし、非負の最小二乗解は、名前の如く、負の成分をもっていません。

アルゴリズム

lsqnonneg は、参考文献 [1] に記述しているアルゴリズムを使用します。アルゴリズムは、可能な基底ベクトルの集合からスタートし、関連する双ベクトル lambda を計算します。そして、他の可能な候補と基底を交換するために、lambda の中に最大に対応する基底ベクトルを選択します。この操作は、lambda <= 0 になるまで続けます。

参考

代数 演算子 \, optimset

参考文献

Lawson, C.L. and R.J. Hanson, Solving Least Squares Problems, Prentice-Hall, 1974, Chapter 23, p. 161.


 lscov lsqr