C++中一般复矩阵的特征值

计算科学 线性代数 C++
2021-12-22 18:40:53

是否有免费的 C 或 C++ 库,其中包含用于一般复矩阵的特征值的例程?我检查了许多线性代数包,如 Eigen,但似乎不支持复杂矩阵。

1个回答

Eigen 可以计算复杂矩阵的特征值。看看这个文档页面:

http://eigen.tuxfamily.org/dox/classEigen_1_1ComplexEigenSolver.html

这是 Lapack、zgeev 示例的 Eigen 版本:

#include <iostream>
#include <complex>
#include <Eigen/Eigenvalues> 

void complexEigenproblem()
{
  const int n = 4;
  Eigen::MatrixXcd a(n, n);
  typedef std::complex<double> C;
  a <<
    C(-3.97, -5.04), C(-4.11, 3.70), C(-0.34, 1.01), C(1.29, -0.86),
    C(0.34, -1.50), C(1.52, -0.43), C(1.88, -5.38), C(3.36, 0.65),
    C(3.31, -3.85), C(2.50, 3.45), C(0.88, -1.08), C(0.64, -1.48),
    C(-1.10, 0.82), C(1.81, -1.59), C(3.25, 1.33), C(1.57, -3.44);
  Eigen::ComplexEigenSolver<Eigen::MatrixXcd> ces;
  ces.compute(a);
  std::cout << "The eigenvalues of a are:" << std::endl << ces.eigenvalues() << std::endl;
}

特征值与来自 zgeev 的特征值相同(至五个有效数字):

http://www.nag.com/lapack-ex/node92.html

(注:Eigen 和 zgeev 对输出特征值的排序不同)