アプリ版:「スタンプのみでお礼する」機能のリリースについて

非負条件の最小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)を満足させるという条件がある
場合には,その条件を具体的にどのようにプログラム化
するのか不明であり質問した次第です。
宜しくお願いします。

A 回答 (2件)

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



普通に最小値を求めて領域 { 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) が最小値を与える。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/27 21:03

これは線形の最小二乗法じゃあ使えないですよね。


非線形の場合は初期値によって停留点が複数ある場合があるから、
初期値をいろいろ変えて、xiが全部正になる解をを探すんですかね・・・・

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

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

お礼日時:2007/06/27 21:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!