乘法 - 由虚数单位组成的矩阵

时间:2016-09-18 09:28:39

标签: eigen

我想问一下是否有人知道为什么这不起作用:

例如,让

SparseMatrix<int> A 

SparseMatrix<std::complex<float> > B

我想做以下数学:

B =我* A

代码:

std::complex<float> c;
c=1.0i;
B=A.cast<std::complex<float> >()*c;

或同等的:

B=A.cast<std::complex<float> >()*1.0i;

我希望A的所有实际值都在B中是虚构的 只有零(0,0)。

示例:

#include <Eigen/Sparse>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace Eigen;
using std::cout;
using std::endl;

int main(int argc, char *argv[]){

    int rows=5, cols=5;

    SparseMatrix<int> A(rows,cols);
    A.setIdentity();


    SparseMatrix<std::complex<float> > B;
    std::complex<float> c;
    c=1i;

    B=A.cast<std::complex<float> >()*1.0i;
    //B=A.cast<std::complex<float> >()*c;

    cout << B << endl;

    return 0;    
}

编译: g ++ [name] .cpp -o [name]

我做错了什么?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要启用c ++ 14才能使1.0i按预期工作。使用GCC或clang,您需要添加-std=c++14编译器选项。

然后,您可以这样做:

MatrixXd A = MatrixXd::Random(3,3);
MatrixXcd B;
B = A * 1.0i;

SparseMatrix相同。

相关问题