C++ 在本征C++;:复矩阵与实矩阵的混合
我想将一个实矩阵添加到一个复矩阵中,并将结果存储在另一个复矩阵中。看来Eigen不支持这种操作。以下代码在编译阶段失败。我想使用这种特性的原因是,在模板函数中,一个输入矩阵可以是实矩阵也可以是复矩阵,我需要一个统一的代码来处理它。为什么Eigen不支持这种操作C++ 在本征C++;:复矩阵与实矩阵的混合,c++,eigen,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;
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;
}
intmain(){
MatrixD A(2,2);
MatrixCd B(2,2);
A您应该阅读错误消息。它们将帮助您认识到数据类型之间没有默认强制转换。为了将double
矩阵显式强制转换为std::complex
矩阵,您需要编写:
C = B + A.cast<std::complex<double>>();
C=B+A.cast();
您应该阅读错误消息。这些消息将帮助您认识到数据类型之间没有默认转换。为了将双
矩阵显式转换为std::complex
矩阵,您需要编写:
C = B + A.cast<std::complex<double>>();
C=B+A.cast();
事实上,这一直是积极开发的主题。请参阅和
现在,您的代码编译并运行良好(使用Egeng 3.3.5进行了尝试)。使用cout
的C
的内容:
(0,5) (0,6)
(0,7) (0,8)
事实上,这一直是积极开发的主题。请参阅和
现在,您的代码编译并运行良好(使用Egeng 3.3.5进行了尝试)。使用cout
的C
的内容:
(0,5) (0,6)
(0,7) (0,8)
非常感谢。我以前不知道这样的功能。现在我在“非常感谢”中找到了它。我以前不知道这样的功能。现在我在中找到了它