C++ 如何在特征值中近似比较向量?

C++ 如何在特征值中近似比较向量?,c++,linear-algebra,eigen,C++,Linear Algebra,Eigen,在Eigen中是否有使用相对和绝对公差比较向量(矩阵)的功能?如果其中一个向量非常接近于零,标准将失败。没有实现numpy.allclose的内置函数,但如果确实需要,您可以自己编写一个。但是,我建议使用具有参考价值的: (a-b).isMuchSmallerThan(ref) 其中ref是问题的代表性非零 编辑:以下是allclose的一个可能实现,以供参考: template<typename DerivedA, typename DerivedB> bool allclose

在Eigen中是否有使用相对和绝对公差比较向量(矩阵)的功能?如果其中一个向量非常接近于零,标准将失败。

没有实现numpy.allclose的内置函数,但如果确实需要,您可以自己编写一个。但是,我建议使用具有参考价值的:

(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();
}
模板
布尔·奥尔克洛斯(常数特征::DenseBase&a,
恒本征::登塞巴斯酒店,
常量typename DerivedA::RealScalar和rtol
=Eigen::NumTraits::dummy_precision(),
常量typename DerivedA::RealScalar和atol
=Eigen::NumTraits::epsilon())
{
return((a.derived()-b.derived()).array().abs()

还有一个isApprox函数不适合我。
我只是使用了(expect-res).norm()<一些小数字。

参见isMuchSmallerThan可以用于绝对比较,即(a-b)。isMuchSmallerThan(1.0,atol)相当于np.allclose(a,b,0.0,atol),所以要模仿np.allclose,我们必须这样做:(a-b)。isMuchSmallerThan(1.0,atol)| a.isApprox(b,rtol).我说的对吗?不完全是因为isMuchSmallerThan和isApprox基于L2矩阵范数,而不是元素级比较(无限范数)。