在Eigen C ++中:混合复杂矩阵和实矩阵

时间:2016-04-02 22:38:31

标签: c++ eigen

我想在复杂矩阵中添加一个实矩阵,并将结果存储在另一个复杂矩阵中。似乎Eigen不支持这样的操作。以下代码在编译阶段失败。我想使用这样的功能的原因是,在模板函数中,一个输入矩阵可以是实数或复数,我想要一个统一的代码来处理它。为什么Eigen不支持这样的操作?

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;
}

2 个答案:

答案 0 :(得分:3)

您应该阅读错误消息。它们可以帮助您意识到数据类型之间没有默认转换。为了明确地将double矩阵转换为std::complex<double>矩阵,您可以写:

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

答案 1 :(得分:2)

实际上,这一直是积极发展的主题。参见http://eigen.tuxfamily.org/bz/show_bug.cgi?id=279https://bitbucket.org/eigen/eigen/pull-requests/194/relax-mixing-type-constraints-for-binary/diff

现在,您的代码可以编译并正常运行(与Eigen 3.3.5一起尝试)。 Ccout的内容:

(0,5) (0,6)
(0,7) (0,8)