2016-04-02 52 views
0

我想添加一個真正的矩陣到一個複雜的矩陣,並將結果存儲在另一個複雜的矩陣。 Eigen似乎不支持這種操作。以下代碼在編譯階段失敗。我想使用這種特性的原因是,在模板函數中,一個輸入矩陣可能是真實的或複雜的,我想要一個統一的代碼來處理它。爲什麼Eigen不支持這種操作?在Eigen C++:混合矩陣和實矩陣

int main(){ 
    MatrixXd A(2,2); 
    MatrixXcd B(2,2); 
    A << -1, -2, -3, -4; 
    B.real() << 1, 2, 3, 4; 
    B.imag() << 5, 6, 7, 8; 

    MatrixXcd C(2, 2); 
    C = B + A; 

    return 0; 
} 

回答

3

您應該閱讀錯誤消息。他們會幫助你意識到數據類型之間不存在默認轉換。爲了將double矩陣明確地轉換爲std::complex<double>矩陣你可以這樣寫:

C = B + A.cast<std::complex<double>>(); 
+0

非常感謝。我以前不知道這樣的功能。現在我在https://eigen.tuxfamily.org/dox/AsciiQuickReference.txt中找到它 – kevin