/ / Eigenmatrix Rechtes Teilungsäquivalent - c ++, Eigen

Eigenmatrix Rechtes Einteilungsäquivalent - C ++, Eigen

in Matlab, wenn ich schreibe

A = B*inv(C)

(Da A, B und C quadratische Matrizen sind), erhalte ich eine Warnung, dass die Matrixinversion durch eine Matrix "Rechter Division" ersetzt werden sollte (weil sie numerisch stabiler und genauer ist)

A = B/C

In meinem Eigen C ++ Projekt habe ich folgenden Code:

Eigen::Matrix<double> A = B*(C.inverse());

und ich war traurig, wenn es einen äquivalenten Ersatz dafür gibt, die Matrix inverse in Eigen zu nehmen, analog zu der in Matlab erwähnten?

Ich weiß, dass Matrix "linker Division" ausgedrückt werden kann, indem ein Gleichungssystem für Ausdrücke wie

A = inv(C)*B

aber was ist mit

A = C*inv(B)

in Eigen?

Antworten:

2 für die Antwort № 1

Im Moment ist der effizienteste Weg, dies zu tun, Ihre Gleichung umzuschreiben

A^T = inv(C^T) * B^T
A   = (inv(C^T) * B^T)^T

was in Eigen als implementiert werden kann

SomeDecomposition decompC(C);  // decompose C with a suiting decomposition
Eigen::MatrixXd A = decompC.transpose().solve(B.transpose()).transpose();

Dort waren / sind Pläne, dass man irgendwann schreiben kann

A = B * decompC.inverse();

und Eigen wird dies auf die effizienteste Weise bewerten.