求解矩阵方程M*X*M^-1*A=B中未知3x3可逆矩阵M的方法
求解方法
核心思路是利用相似变换的线性性质,通过选取特殊的输入X、A构造测量,分两步得到M,完全不需要展开9维大型方程组。最终M可确定到相差一个全局非零缩放因子(相似变换本身对M的全局缩放不敏感,符合图形学齐次坐标的变换特性)。
第一步:获取M三个列向量的方向
固定一个非零输入向量A(比如直接取A = [1,1,1]^T即可,若后续测量出现零结果则更换为其他非对称非零向量),分别选取三个特殊的X矩阵做三次测量:
- 取
X₁ = diag(1,0,0)(仅第一行第一列为1,其余位置为0的矩阵),测量得到结果b₁ - 取
X₂ = diag(0,1,0),测量得到结果b₂ - 取
X₃ = diag(0,0,1),测量得到结果b₃
原方程两边左乘M⁻¹可变形为X M⁻¹A = M⁻¹B。上述三个X的列空间分别对应三个标准基向量张成的一维空间,Xᵢ乘任意向量的结果都是第i个标准基向量eᵢ的倍数,因此测量得到的bᵢ必然是M的第i个列向量mᵢ的非零标量倍,即bᵢ = kᵢ mᵢ,其中kᵢ为未知非零标量。
这一步直接得到M三个列的方向,M可以表示为M = [b₁/k₁, b₂/k₂, b₃/k₃] = Bₘ D,其中Bₘ是以b₁,b₂,b₃为列构造的3x3矩阵,D = diag(1/k₁, 1/k₂, 1/k₃)是待求缩放因子的对角矩阵。
第二步:求解列向量的缩放比值
仍然使用和第一步相同的固定A,再选取两个特殊X做两次测量:
- 取
X₁₂ = [[0,1,0],[0,0,0],[0,0,0]](仅第一行第二列为1,其余为0),测量得到b₁₂ - 取
X₁₃ = [[0,0,1],[0,0,0],[0,0,0]](仅第一行第三列为1,其余为0),测量得到b₁₃
代入变形后的方程计算: - 求逆得到
Bₘ⁻¹,计算c₁₂ = Bₘ⁻¹ b₁₂,c₁₂的第一个分量值就是k₂/k₁,其余分量理论上为0,可作为测量噪声的校验项 - 计算
c₁₃ = Bₘ⁻¹ b₁₃,c₁₃的第一个分量值就是k₃/k₁,其余分量理论上为0
由于M允许全局缩放,直接固定k₁=1,即可算出k₂、k₃的取值,代入第一步的M表达式就得到了最终的矩阵M。
校验与补充
- 校验:选任意随机X和随机A,代入方程计算
M X M⁻¹ A,和实际测量得到的B对比,若误差在测量噪声允许范围内则结果正确。 - 绝对缩放:如果需要确定M的绝对缩放,额外选一组已知几何长度的向量做校准测量,求解全局缩放因子即可。图形学中多数2D齐次变换、投影变换场景下全局缩放不影响最终变换结果,可直接使用。
- 行向量适配:如果原系统采用行向量右乘矩阵的运算规则,只需要将所有矩阵转置后套用上述推导即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者David Spruill
相关产品推荐
相关产品推荐

