如何检查 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)
有什么好的做法可以检查我的结果 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)