【发布时间】:2015-08-18 06:45:56
【问题描述】:
我有一个大小为NxP 的矩阵M。每个P 列都是正交的(M 是一个基础)。我还有一个大小为N 的向量V。
我的目标是将M 的第一个向量转换为V 并更新其他向量以保持它们的正交性。我知道V和M的出处是一样的,所以基本上都是从某个角度旋转。我假设我们可以找到一个矩阵T,这样T*M = M'。但是,我无法弄清楚如何做到这一点的细节(使用 MATLAB)。
另外,我知道这样做的转换可能是无限的,但我想得到最简单的转换(其中M 的其他向量大致保持不变,ie没有围绕第一个向量旋转)。
一张小图来说明。在我的实际情况下,N 和 P 可以是大整数(不一定是 3):
提前感谢您的帮助!
[编辑] Gram-Schmidt 的替代解决方案(接受的答案)
我通过解决一个优化问题,在约束条件下最小化M 和R*M 之间的 2 范数,检索了一个旋转矩阵 R,从而获得了正确的解决方案:
-
V与R*M[1] ... R*M[P-1]正交(即V'*(R*M[i]) = 0) R*M[0] = V
由于求解器的限制,我无法指出 R*M[0] ... R*M[P-1] 都是成对正交的(即 (R*M)' * (R*M) = I)。
幸运的是,似乎对于这个问题和我的求解器(使用 SDPT3 的 CVX),生成的 R*M[0] ... R*M[P-1] 也是成对正交的。
【问题讨论】:
标签: matlab matrix rotation transform