2016-01-10 33 views
0

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

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

回答

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; 

您必须小心地给所有字面值输入正确的类型,否则运算符重载将不起作用。

+0

非常感谢。但我不明白,我们必须添加'#include '?那么,在我的例子中,我没有包括,为什么Eigen仍然可以处理复数? – user15964

+0

和我的mingw g ++说“错误:'literals'不是一个名称空间名称”,是否有一个编译器选项来启用C++ 14? – user15964

+0

,我试过你的第二个版本也发出错误... – user15964