您可以使用Eigen库中的isFinite()方法来检测特征值是否为有限值,并使用select()方法将无穷大或NaN删除。

以下是一个示例代码:

#include <iostream>
#include <Eigen/Dense>

int main() {
    Eigen::MatrixXd matrix(3, 3);
    matrix << 1, 2, 3,
              4, std::numeric_limits<double>::infinity(), 6,
              7, 8, std::numeric_limits<double>::quiet_NaN();

    Eigen::EigenSolver<Eigen::MatrixXd> solver(matrix);
    Eigen::MatrixXcd eigenvalues = solver.eigenvalues();

    // Check for infinity or NaN
    Eigen::ArrayXcd finiteEigenvalues = eigenvalues.real().array().isFinite().select(eigenvalues, 0);

    // Print the finite eigenvalues
    std::cout << "Finite Eigenvalues:" << std::endl;
    std::cout << finiteEigenvalues << std::endl;

    return 0;
}

在上面的示例中,我们首先创建了一个具有无穷大和NaN特征值的3x3矩阵。然后,我们使用EigenSolver计算矩阵的特征值,并将结果存储在eigenvalues中。

接下来,我们使用isFinite()方法检查eigenvalues中的每个特征值是否为有限值。然后,我们使用select()方法将有限特征值保留在finiteEigenvalues中,同时将无穷大和NaN的特征值替换为0。

最后,我们打印出finiteEigenvalues,其中包含了删除了无穷大和NaN的特征值。请注意,输出将是复数形式,因为EigenSolver返回的特征值是复数。

C++ Eigen库特征值检测与处理:移除无穷大或NaN

原文地址: https://www.cveoy.top/t/topic/l1Sd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录