如何在 Eigen 库中手动构造复杂矩阵?

How to manually construct complex matrix in Eigen library?

例如,下面的代码生成一个复数矩阵,虚部等于0

#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;
int main()
{
  MatrixXcf m(2,2);
  m<<1,2,3,4;
  cout<<m<<endl;
}

输出

(1,0) (2,0)
(3,0) (4,0)

但是如何手动输入虚部非零的任意复数矩阵呢?

由于 MatrixXcf 只是元素类型为 std::complex<float> 的矩阵的别名,您可以提供该类型的任意初始值设定项。在 C++14 中,您可以方便地使用 user-defined 文字 iifil 来制作各种浮点类型的虚数单位。所以以下工作:

#include <Eigen/Dense>

#include <complex>
#include <iostream>

using namespace std::literals;

int main()
{
    Eigen::MatrixXcf m(2,2);
    m << 1.0f + 2.0if, 2.0f + 1.0if, 3.0f - 1.0if, 4.0f - 2.0if;
    std::cout << m << std::endl;
}

如果你没有文字,你可以自己制作并相乘:

const std::complex<float> If(0.0f, 1.0f);     // use x * I etc

即上面的代码变成:

m << 1.0f + 2.0f * If, 2.0f + 1.0 * If, 3.0f - 1.0 * If, 4.0f - 2.0 * If;

您必须注意为所有文字赋予正确的类型,否则运算符重载将不起作用。