ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

lsqnonneg

非負の制約付き最小二乗問題の求解

以下の形式の非負の最小二乗曲線近似問題を解きます。

minxCxd22, where x0.

構文

x = lsqnonneg(C,d)
x = lsqnonneg(C,d,options)
x = lsqnonneg(problem)
[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,options) は、options 構造体に指定された最適化パラメーターを使用して最小化します。ユーザーは、関数 optimset を使って、これらのパラメーターを定義します。関数 lsqnonneg は、次の options 構造体フィールドを使います。

Display

表示レベル。'off' は出力を表示しません。'final' は最終出力のみを表示します。'notify' (既定の設定) は関数が収束しなかったときのみ出力を表示します。

TolX

x に関する許容誤差 (正のスカラー)。既定の設定は 10*eps*norm(C,1)*length(C) です。

x = lsqnonneg(problem)problem の最小値を検出します。problem は次のフィールドをもつ構造体です。

C

行列

d

ベクトル

solver

'lsqnonneg'

options

optimset を使用して作成される options 構造体

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

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

[x,resnorm,residual,exitflag] = lsqnonneg(...) は、関数 lsqnonneg の終了条件を記述する値 exitflag を返します。

>0

関数が、解 x に収束していることを示します。

0

反復回数が、設定回数を超えていることを示します。許容誤差 (optionsTolX パラメーター) を大きくすると、解に近づく可能性があります。

[x,resnorm,residual,exitflag,output] = lsqnonneg(...) は、以下のフィールドの演算の情報を含む構造体 output を返します。

algorithm

'active-set'

iterations

計算した反復回数

message

終了メッセージ

[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*lsqnonneg(C,d)-d)] =
     0.6674 0.9118

関数 lsqnonneg の解は、最小二乗解としては、あまり適合しません (大きな残差を含んでいます)。しかし、非負の最小二乗解は、負の成分をもっていません。

詳細

すべて折りたたむ

アルゴリズム

関数 lsqnonneg[1]に記述されているアルゴリズムを使用します。アルゴリズムは、可能な基底ベクトルの集合から開始し、関連する双対ベクトル lambda を計算します。そして、他の可能な候補と基底を交換するために、lambda の最大値に対応する基底ベクトルを選択します。この演算は、lambda <= 0 になるまで続けられます。

参照

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

参考

R2006a より前に導入

この情報は役に立ちましたか?