我有2组带有N个条目的3D矢量。我正在尝试计算旋转矩阵,该矩阵最好将第一组与第二组对齐。
我相信我可以使用Java库JAMA来实现奇异值分解或EigenValue分解。
1)SVD或EVD是否使用正确的算法?
2)JAMA中的SVD / EVD需要矩阵。如何根据我的两组向量填充矩阵?
答案 0 :(得分:0)
这是我相信你所描述的2-D版本(将其翻译成
3-D应该是直截了当的,除了m矩阵将是3x3并且具有
shftx/y/z
条目)。
点(x,y)到点(u, v)可以写成:
u m11 m12 x shftx
= * +
v m21 m22 y shfty
You can rewrite this as:
x y 0 0 1 0 m11 u
* =
0 0 x y 0 1 m12 v
m21
m22
shftx
shfty
这样做的原因是你在左边做了一个矩阵(用
x / y / 0/1值)与数据中的点数最多相同
组。如果你调用这个矩阵X,并在右边的U上调用列向量,那么
问题变为找到方程X * m = U的最小二乘解m。
你可以通过(新QRDecomposition(X)).solve(U)
来解决这个问题。我应该说
至少有一个版本的QRDecomposition,代码中有一个错误
假设解决方案矩阵的维度错误,但我修复了它
在solve()方法中改变一行。