如何在Eigen中近似比较向量



在Eigen中是否有一个函数可以使用相对和绝对公差(也称为numpy.allclose)来比较向量(矩阵)?如果其中一个向量非常接近于零,则标准isApprox将失败。

没有实现numpy.allclose的内置函数,但如果确实需要的话,您可以轻松地自己编写一个。然而,我宁愿建议使用isMuchSmallerThan作为参考值:

(a-b).isMuchSmallerThan(ref)

其中ref是问题的代表性非零。

编辑:这里是allclose:的一个可能实现,供参考

template<typename DerivedA, typename DerivedB>
bool allclose(const Eigen::DenseBase<DerivedA>& a,
              const Eigen::DenseBase<DerivedB>& b,
              const typename DerivedA::RealScalar& rtol
                  = Eigen::NumTraits<typename DerivedA::RealScalar>::dummy_precision(),
              const typename DerivedA::RealScalar& atol
                  = Eigen::NumTraits<typename DerivedA::RealScalar>::epsilon())
{
  return ((a.derived() - b.derived()).array().abs()
          <= (atol + rtol * b.derived().array().abs())).all();
}

还有一个isApprovx函数对我不起作用。我只是在使用(expect-res).norm()<一些小数字。

相关内容

  • 没有找到相关文章

最新更新