2016-09-18 51 views
0

矩陣我想問一下是否有人知道這是爲什麼不工作:乘法 - 由虛數單位

例如,讓

SparseMatrix<int> A 

SparseMatrix<std::complex<float> > B 

我想做下面的數學計算:

B = i * 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 ++ [名]的.cpp -o [名]

我在做什麼錯?

非常感謝您的幫助!

+0

如果您使用我而不是我,這有幫助嗎?我在c標準中讀到(也許在這種情況下,它是不同的),我不反駁這個虛構的單位。否則,你應該不是<#include complex>,它會定義小寫字母i? –

+0

以上應該說#包括

+0

感謝您的建議!不幸的是我得到了同樣的結果。 – nik

回答

1

您需要啓用C++ 14以獲得1.0i按預期工作。使用GCC或clang,您需要添加-std=c++14編譯器選項。

然後,你可以簡單地做:

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

同一個SparseMatrix

+0

太棒了! 非常感謝! – nik