我想在复杂矩阵中添加一个实矩阵,并将结果存储在另一个复杂矩阵中。似乎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;
}
答案 0 :(得分:3)
您应该阅读错误消息。它们可以帮助您意识到数据类型之间没有默认转换。为了明确地将double
矩阵转换为std::complex<double>
矩阵,您可以写:
C = B + A.cast<std::complex<double>>();
答案 1 :(得分:2)
实际上,这一直是积极发展的主题。参见http://eigen.tuxfamily.org/bz/show_bug.cgi?id=279和https://bitbucket.org/eigen/eigen/pull-requests/194/relax-mixing-type-constraints-for-binary/diff
现在,您的代码可以编译并正常运行(与Eigen 3.3.5一起尝试)。 C
和cout
的内容:
(0,5) (0,6)
(0,7) (0,8)