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

时间:2016-01-10 15:57:54

标签: c++ matrix eigen complex-numbers

例如,以下代码生成复数矩阵,虚部等于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)

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

1 个答案:

答案 0 :(得分:2)

由于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;

您必须注意为所有文字提供正确的类型,否则操作符重载将无效。