如何计算复杂矩阵的指数?

How do I calculate the exponential of a complex matrix?

我在尝试使用 C++ Eigen 库计算复杂矩阵的指数时遇到问题。

下面是我尝试实现的示例代码。

#include <iostream>
#include "Dense"
#include <complex>
#include "unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h"

int main()
{
    using namespace std::complex_literals;

    Eigen::MatrixXcd test(2,2);
    test(0,0)=1i+std::complex<double>(5);
    test(1,0)=1i*2.;
    test(0,1)=std::complex<double>(2);
    test(1,1)=3.*1i+std::complex<double>(3);

    std::cout << "The matrix exponential is:\n"
              << test.exp() << "\n\n";
}

当我 运行 这个程序时,我得到错误:

Implicit instantiation of undefined template 'Eigen::MatrixFunctionReturnValue<Eigen::Matrix<std::__1::complex<double>, -1, -1, 0, -1, -1> >'

我试图找到答案,但我还没有找到。

如有任何帮助,我们将不胜感激。

编辑:

Eigen 工作中的标准矩阵运算和 Eigen file/folder 位于我的项目文件夹中。唯一似乎不起作用的函数是复杂矩阵不受支持文件夹中的矩阵函数(它们确实适用于真实矩阵)。

不得直接包含Eigen/srcunsupported/Eigen/src子目录中的headers。此外,不要使用 #include "Dense",而是使用 #include <Eigen/Dense>(在许多情况下,<Eigen/Core> 实际上就足够了)。

在你的情况下,你实际上只需要这些包含,因为所有必要的依赖项都包含在 MatrixFunctions:

#include <iostream>
#include <unsupported/Eigen/MatrixFunctions>

Godbolt-Demo: https://godbolt.org/z/PmJWP3 (编译偶尔会超时).