2016-04-02 86 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