1

行列形式の入出力関数が与えられた場合:

|y1|   =  |p1  p2|   |x1|     |p5| 
|y2|    = |p3  p4| * |x2|  +  |p6|

p1−p6ガウス・ニュートン法を使用して最小二乗誤差を最小化したい。100個の測定値があるとします。私の質問は、残余ベクトルの計算とサイズについてです。

|r1|   |y1|  ( |p1  p2|   |x1|   |p5| )
|r2| = |y2| -( |p3  p4| ∗ |x2| + |p6| )

r i =出力− f(入力、パラメーター)

err = Sum(r i 2

最小化されたエラーでパラメータを計算するために、次のようになります。

p i + 1 = pi +Δ

Δ=(J T * J)-1 * J T * r i

それぞれのサイズは次のようになります。

入力ベクトル(x):100x2

出力ベクトル(y):100x2

resuidual(r):100x2

ジャコビアン(J):100x6

パラメータ(pi):6x1(6つのパラメータ)

ご覧のとおり、Δのサイズは6x2になりp_i+1 ますが、これはと一致していないようです。残余ベクトルの計算プロセスは正しいですか?はいの場合、パラメータのベクトルをどのように計算できますか?そうでない場合、正しい答えは何ですか?

もう1つは、Jパラメーター行列に関する計算方法(Jacobian)です。

どうもありがとう。

4

1 に答える 1

2

デルタベクトルはパラメータベクトルと同じサイズです。

実際、この場合、完全な最小二乗法を実行せずにパラメーターを解くことができます。残念ながら、私はWebで参照を見つけることができなかったので、方法を説明しようとしました。

N点Y[]とN点X[]が与えられた場合、誤差Sが可能な限り小さくなるように、行列Mとベクトルtを見つけたいと思います。

S = Sum{ i | (Y[i]-M*X[i]-t)'*(Y[i]-M*X[i]-t)}

('は転置です)。

ドリルは次のとおりです。

a / Y[]の平均Y^を計算し、それを各Y [i]から減算して、y[i]を取得します。

b / X[]の平均X^を計算し、それを各X [i]から減算して、x[i]を取得します。

c/行列を計算する

A = Sum{ i | y[i]*x[i]'} 

C = Sum{ i | x[i]*x[i]'}

d / Cが反転可能でない場合(つまり、すべてのX []が1行にある場合)、少し行き詰まっているか、少なくともこのメソッドは失敗します。それ以外の場合は計算します

M = A*inverse(C)

e /最後に、計算

t = Y^-M*X^

なぜこれが機能するのですか?

まず、Mを固定と考えると、Sを最小化するtがY [i] -M *X[i]の平均にすぎないことが簡単にわかります。したがって、Mを見つけるときにこのtを使用することもできます。Sの式にtを代入すると、次のようになります。

S = Sum{ i | (y[i]-M*x[i])'*(y[i]-M*x[i])}

ここで、Tr()が、行列をそのトレース(対角要素の合計)にマップする関数を表すとします。非常によく役立つトリックは、ベクトルvに対して次のことです。

v'*v = Tr( v'*v) = Tr( v*v')

これをSに適用し、製品を拡張すると、次のようになります。

S = Sum{ i | y[i]'*y[i]} - Tr( A*M') - Tr( M*A') + Tr( M*C*M')

Cが可逆である場合、平方を完成させて次のようになります(ここでは、D = reverse(C))

S = Sum{ i | y[i]'*y[i]} - Tr( A*D*A') + Tr( (M-A*D)*C*(M-A*D)'}

最初の2つの用語はMに依存しません。3番目は負になることはなく、M = A*Dを選択することでゼロにすることができます。

于 2012-10-29T17:54:19.873 に答える