2016-01-10 32 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