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

时间:2019-11-13 09:09:28

标签: c++ eigen

我在尝试使用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文件/文件夹位于我的项目文件夹中。似乎不起作用的唯一功能是不支持的文件夹中的矩阵功能,适用于复杂矩阵(它们适用于真实矩阵)。

1 个答案:

答案 0 :(得分:1)

不得直接包含来自Eigen/srcunsupported/Eigen/src子目录的标题。另外,使用#include "Dense"代替#include <Eigen/Dense>(实际上,在许多情况下,<Eigen/Core>就足够了)。

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

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

Godbolt-Demo:https://godbolt.org/z/PmJWP3(编译有时可能会超时)。