2016-04-02 6 views
0

Ich möchte eine echte Matrix zu einer komplexen Matrix hinzufügen und das Ergebnis in einer anderen komplexen Matrix speichern. Es scheint, dass Eigen eine solche Operation nicht unterstützt. Der folgende Code ist bei der Kompilierung fehlgeschlagen. Der Grund, warum ich ein solches Feature verwenden möchte, ist, dass in einer Template-Funktion eine Eingabematrix reell oder komplex sein kann und ich einen einheitlichen Code verwenden möchte. Warum unterstützt Eigen diese Operation nicht?In Eigen C++: komplexe Matrix und reale Matrix mischen

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; 
} 

Antwort

3

Sie sollten die Fehlermeldungen lesen. Sie würden Ihnen dabei helfen, zu erkennen, dass zwischen den Datentypen keine Standardumwandlung erfolgt. Um die double Matrix auf eine std::complex<double> Matrix explizit zu werfen würden Sie schreiben:

C = B + A.cast<std::complex<double>>(); 
+0

Vielen Dank. Ich kannte solch ein Feature vorher nicht. Jetzt finde ich es in https://eigen.tuxfamily.org/dox/AsciiQuickReference.txt – kevin