我想问一下是否有人知道为什么这不起作用:
例如,让
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]
我做错了什么?
非常感谢您的帮助!
答案 0 :(得分:1)
您需要启用c ++ 14才能使1.0i
按预期工作。使用GCC或clang,您需要添加-std=c++14
编译器选项。
然后,您可以这样做:
MatrixXd A = MatrixXd::Random(3,3);
MatrixXcd B;
B = A * 1.0i;
与SparseMatrix
相同。