为何自定义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
相关产品推荐
相关产品推荐

