给定矩阵形式的输入输出函数:
|y1| = |p1 p2| |x1| |p5|
|y2| = |p3 p4| * |x2| + |p6|
带有p1−p6
个参数的。我希望使用Gauss-Newton方法最小化最小平方误差。假设我们有100个测量值。我的问题是关于残差矢量的计算和大小。
|r1| |y1| ( |p1 p2| |x1| |p5| )
|r2| = |y2| -( |p3 p4| ∗ |x2| + |p6| )
r i = output - f(输入,参数)
err = Sum(r i 2 )
为了计算最小化误差的参数,我们有:
p i + 1 = p i +Δ
Δ=(J T * J) -1 * J T * r i
我认为每个的大小如下:
输入向量(x):100x2
输出向量(y):100x2
resuidual(r):100x2
雅可比(J):100x6
参数(pi):6x1(六个参数)
如您所见,Δ的大小为6x2,似乎与p_i+1
不一致
现在我的残差矢量计算过程是否正确?如果是,我怎么能计算参数的向量?如果没有,那么正确答案是什么?
另一个问题是关于参数矩阵的计算方法J
(雅可比)。
非常感谢你。
答案 0 :(得分:2)
Delta矢量与参数矢量的大小相同。
实际上在这种情况下,可以在不进行完全最小二乘的情况下求解参数。不幸的是,我无法在网上找到参考资料,所以我试图解释这个方法:
我们想找到一个矩阵M和一个向量t,这样,给定N个点Y []和N个点X [],误差S尽可能小,其中
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]
计算矩阵
A = Sum{ i | y[i]*x[i]'}
和
C = Sum{ i | x[i]*x[i]'}
d /如果C不可逆(这意味着所有X []都在一条线上)你有点 卡住,或至少这种方法失败;否则计算
M = A*inverse(C)
e / finally,计算
t = Y^-M*X^
为什么这样做?
首先,如果我们认为M是固定的,那么很容易看出最小化S的t只是Y [i] -M * X [i]的平均值;所以我们也可以在找到M时使用这个t。将t代入S的公式中我们得到
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 =逆(C))
S = Sum{ i | y[i]'*y[i]} - Tr( A*D*A') + Tr( (M-A*D)*C*(M-A*D)'}
前两个术语不依赖于M;第三是永远不会消极,可以 通过选择M = A * D使其为零。