Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在本征C++;:复矩阵与实矩阵的混合_C++_Eigen - Fatal编程技术网

C++ 在本征C++;:复矩阵与实矩阵的混合

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;

我想将一个实矩阵添加到一个复矩阵中,并将结果存储在另一个复矩阵中。看来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;
}
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)

非常感谢。我以前不知道这样的功能。现在我在“非常感谢”中找到了它。我以前不知道这样的功能。现在我在中找到了它