【问题标题】:Spectra is not computing any values for large sparse matrix?Spectra 没有为大型稀疏矩阵计算任何值?
【发布时间】:2022-10-22 09:42:46
【问题描述】:

在 C++ 程序中,我计算了一个大型稀疏矩阵 energy_mat,我知道它是对称的。

我试图通过获取最大和最小特征值来计算它的条件数,如下所示:

    Spectra::SparseGenMatProd<double> op(energy_mat);
    Spectra::GenEigsSolver<Spectra::SparseGenMatProd<double>> eigs(op, 3, 6);
    // Initialize and compute
    eigs.init();
    int nconv = eigs.compute(Spectra::SortRule::LargestMagn);
    // Retrieve results
    Eigen::VectorXcd evalues;
    if (eigs.info() == Spectra::CompInfo::Successful)
        evalues = eigs.eigenvalues();

    std::cout << "Eigenvalues found:\n"
              << evalues << std::endl;

我懂了:

Eigenvalues found:

IE。数组为空。但是我知道energy mat 是对称的(我检查过),后来我用它来求解线性方程组,所以它在数值上是合理的(它没有;没有 nans 或 infs)。

为什么光谱找不到特征值?

【问题讨论】:

  • 如果eigs.info() 不等于Spectra::CompInfo::Successful 怎么办?
  • 泰!我将迭代次数增加到 40 次,现在它收敛了。
  • 很高兴您找到了解决方案!您能否发布一个快速答案并接受它,以便我们关闭这个问题?

标签: c++ linear-algebra eigen spectra


【解决方案1】:

将迭代次数从 6 次增加到 40 次似乎已经解决了这个问题。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2015-03-01
    • 2013-06-09
    相关资源
    最近更新 更多