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

时间:2015-12-07 17:28:54

标签: matrix eigen floating-accuracy

是否有一个很好的做法来检查我的结果Eigen :: Matrix4f是否几乎是同一性?由于浮点错误,我没有得到一些时间只有零和一。

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

1 个答案:

答案 0 :(得分:5)

首先,你必须定义它们应该“接近”的意义。根据您的具体任务,可以有许多不同的亲密度定义。其中最常用的是:

norm( A - I ) < eps

其中normmatrix norm。最常见的是2范数,1范数,inf范数和Frobenius范数。

您的方法也是可行的。它等同于上面使用max-norm(其中norm(A) = max abs Aij)的方法。它可以使用以下方式在Eigen中实现:

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

<强>更新: 实际上,在Eigen中有一种特殊方法可以检查:isIdentity。你给它门限值:

A.isIdentity(eps)