如何在特征库中手工构造复矩阵

How to manually construct complex matrix in Eigen library?

本文关键字:特征      更新时间:2023-10-16

例如,以下代码生成一个复数矩阵,虚部等于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中,您可以方便地使用用户定义的文字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;

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