こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

非負最小2乗法のコーディング

非負条件の最小2乗法のプログラムを作成
したいのですが,参考文献やプログラムが
あれば,教えて下さい。考え方のヒントでも
よいです。

具体的には,関数f[{x}]=|[A]{x}-{b}|^2・・・(1)
がxi>=0(i=1,2,..,n)・・・(2)の条件で,
最小となる{x}を求めるという問題を解くプログラムを
作りたいと考えています。
ここで,{x}=(x1,x2,...,xn)
   {b}=(b1,b2,...,bm)
   [a]は サイズm x nのマトリクス(m>n)
であり,[A]および{b}は既知です。

条件(2)が無い場合の最小二乗のプログラムは
作成できますが,条件(2)を満足させるという条件がある
場合には,その条件を具体的にどのようにプログラム化
するのか不明であり質問した次第です。
宜しくお願いします。

投稿日時 - 2007-06-09 15:37:28

QNo.3069783

すぐに回答ほしいです

質問者が選んだベストアンサー

何も考えずに回答してみる。

普通に最小値を求めて領域 { x_i >= 0 | i = 1,2,...,n } に含まれなければ、この領域のエッジで最小値をとるしかないだろうから。

特に制限を設けずに {x} を求める
 x が非負ならそれが答え

 それ以外の場合

  x_1 = 0 として {x} を求める、x_1 = 0 として {x} を求める... x_n = 0 として {x} を求める。

   非負の解となったものの内で、f({x}) が最小であるものが答え

   上記 n 個の解すべてが NG だった場合

    x_1 = x_2 = 0 として {x} を求める、(以下 n(n-1)/2 通りの組合せ)

どんどん、= 0 の数を増やしていって、すべてに失敗した場合には (0, 0, ... 0) が最小値を与える。

投稿日時 - 2007-06-09 21:14:59

お礼

nが小さい場合はご指摘の方法で,
も解けそうな気がします。
ご回答ありがとうございました。

投稿日時 - 2007-06-27 21:03:40

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

これは線形の最小二乗法じゃあ使えないですよね。
非線形の場合は初期値によって停留点が複数ある場合があるから、
初期値をいろいろ変えて、xiが全部正になる解をを探すんですかね・・・・

なんとなくですが、xiが正にならなければならない問題で、
負の解が出てくるっていうのはモデルそのものを見直したほうがいいような気がするです。

投稿日時 - 2007-06-09 22:20:59

お礼

ご解答ありがとうございます。
あれから,いろいろさがしまして,非負条件の最小二乗法の
コード自体は存在するようです。
しかし,ご指摘のとおり,余り素直な解き方ではないようなので,
私の問題の場合,最終的には2次計画法のコードを利用しました。

投稿日時 - 2007-06-27 21:11:26

あなたにオススメの質問