0

私は方程式A * x = bを持っています

Aのサイズは行列サイズのnxm、xはmx 1、bはnx 1です 。Aには列よりも多くの行があります(n <m)。

私の未知数はAであり、n!= mであるため、Aには逆数がありません。私の知っているのは、2つのベクトルxbです。基本的に、 (A * x --b をゼロに近づけるAを見つけたいと思います。

最小二乗法は適切なようですが、私の教科書やウィキペディアのエントリに従わないようであるため、どのように進めるかはわかりません。通常、行列Aは既知です。OLSが適切でない場合、どうなりますか?特異値分解?繰り返しになりますが、ポインタをお願いします。私の線形代数はさびています。

これを実装できるようにしたいと思います(python / C)。読みやすいコードへのポインタ?

4

1 に答える 1

1

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

n = mの場合、Aは単純な対角行列になりますが、n>mになります。ですから、私たちはそれほど単純にすることはできません。

これは、n個の独立したベクトル(Aの行)を見つける問題と見なすことができます。そのため、xで内積を形成すると、bの対応する要素が生成されます。したがって、A * x = b(解は正確になります)は、A_iがAのi番目の行である場合、dot(A_i、x)= b(i)となるようなAの行を見つけることと同等です。

このように見ると、解決策は明らかです!明らかに、それはなぜ「解決策」がないのかを示していますが、そのような解決策は無限にあり、そのすべては非常に些細なことです。

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

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

A_iの他のすべての要素はゼロです。では、ドット積を作成します。A * x = bは、ゼロ以外の列が1つしかない行列Xによって正確に解かれ、その列はかなり些細なものであることがわかります。

于 2012-04-13T11:35:34.330 に答える