You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何自定义Eigen::Matrix4d矩阵逆实现精度低于Eigen内置方法?

问题描述

我拥有一个Eigen::Matrix4d类型的变换矩阵,希望计算其逆矩阵。我自行编写了一个函数,依据变换矩阵逆的计算公式实现,代码如下:

Eigen::Matrix4d inverseTransformation(Eigen::Matrix4d T)
{
    Eigen::MatrixX3d R;
    Eigen::Vector3d t;
    R = T.block<3, 3>(0, 0);
    t = T.block<3, 1>(0, 3);
    Eigen::Matrix4d result;
    result.setIdentity();
    result.block<3, 3>(0, 0) = R.transpose();
    result.block<3, 1>(0, 3) = -R.transpose() * t;
    return result;
}

// 测试代码
std::cout<<"Input transformation matrix is:\n" << T << std::endl;
std::cout << "inverse of T , my implementation:\n" << inverseTransformation(T) << std::endl << std::endl;
std::cout << "inverse of T , Eigen implementation::\n" << T.inverse() << std::endl << std::endl;
std::cout << "T * T^(-1), my implementation\n " << T * inverseTransformation(T) << std::endl << std::endl;
std::cout << "T * T^(-1), eigen's implementation\n " << T * T.inverse() << std::endl << std::endl;

理想情况下,原矩阵与逆矩阵相乘结果应为单位矩阵I,但我的实现结果存在明显误差,而Eigen内置的T.inverse()方法计算出的结果精度更高。请问这是什么原因?

更新

理论上旋转矩阵的逆是其转置,但将代码中的R.transpose()替换为R.inverse()后,结果精度有所提升。


内容的提问来源于stack exchange,提问作者KillerBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:35:20