2012-04-13 6 views
0

を使用するXは、MX 1及びBで、行列サイズn×m個でありますnx 1. は列(n < m)より多くの行を持ちます。Iは、式<strong><strong></strong>のX</strong> = <strong>* <strong></strong> B</strong></p> <p>サイズを有する通常の最小二乗法(OLSに)

私の不明はAであり、n!= mのため、には逆数がありません。 私の知られている2つのベクトルxbです。基本的には、AA * x - b)がゼロに近くなるようにしたいと考えています。

最小正方形は適切だと思われますが、私のテキストブックやwikipedia entryに従っていないため、進行方法はわかりません。通常はマトリックスが知られている。 OLSが適切でない場合、何がありますか?単一価値分解?繰り返しますが、私の線形代数は錆びています。

これを実装したいと考えていますか(python/C)。読みやすいコードへのポインタ?

答えて

1

これには無限の解決策があり、特異値分解のような洗練されたものは必要ありません。

n = mの場合、Aは単純に対角行列になりますが、n> mになります。だから私たちはとても単純ではありません。

これは、xでドットプロダクトを形成するときに、bの対応する要素が得られるように、n個の独立したベクトル(Aの行)を見つける問題として見ることができます。したがってA * x = b(解は厳密になります)は、A_iがAのi番目の行である場合、dot(A_i、x)= b(i)となるようなAの行を見つけることと等価です。

このように表示された解決策は明らかです。明らかに、それはなぜ「解決策」がないのかを示していますが、無限に多くの解決策があります。

たとえば、非ゼロのxの任意の要素を選択します。 k番目の要素だとします。次に、xの対応する選択された非ゼロ要素を除いて、ALLゼロであるベクトルとしてA_iを作成する。

A_i(k) = b(i)/x(k) 

A_iの他の要素はすべてゼロです。だから、ドットプロダクトを作成してください。 A * x = bは、非ゼロの列が1つしかない行列Xと、その列をかなり単純に解くことによって、正確に解かれることを見てください。

+0

Aの1つの行がほとんどゼロ以外であると予想した場合、私の問題は制限されますか? – bushbo

+1

いいえまだ解り易いです。 Aのほとんどの列にはほとんどすべての値を設定できますが、まだ解決策があります。実際には、Aの1つの列を除いて、任意の分布から任意の分布から乱数を選ぶことができます。あなたが言ったことから知的な解を選択する実行可能な方法はありません。複雑な因子分解はまだ必要ありません。 –

関連する問題