如何检查 Eigen::Matrix4f 是否接近单位矩阵?

How to check if an Eigen::Matrix4f is close to identity matrix?

有什么好的做法可以检查我的结果 Eigen::Matrix4f 是否几乎相同?由于浮点错误,我有时不会只得到零和一。

一种蛮力方法是,检查矩阵中的每个值是否介于某些 EPSILON 之间,如果只有其中一个失败,则它不是单位矩阵。有更好的解决方案吗?

首先,您必须定义它们的意义"close"。根据您的具体任务,可以有许多不同的亲密定义。最常用的一种是:

norm( A - I ) < eps

其中 norm 是一些 matrix norm。最常见的是 2-范数、1-范数、inf-范数和 Frobenius 范数。

你的方法也是可以的。它等同于上面带有 max-norm 的方法(其中 norm(A) = max abs Aij)。它可以在 Eigen 中使用:

(A - Matrix4f::Identity()).cwiseAbs().max() < eps;

更新: 实际上,在 Eigen 中有一个特殊的方法来检查:isIdentity。你给它的阈值:

A.isIdentity(eps)