/ / Equivalence de la division droite de la matrice propre - c ++, eigen

Equivalence de la division droite de la matrice propre - c ++, eigen

dans Matlab si j'écris

A = B*inv(C)

(avec A, B et C étant des matrices carrées), je reçois un avertissement indiquant que l'inversion de la matrice doit être remplacée par une matrice "division droite" (en raison de sa stabilité numérique et de sa précision)

A = B/C

Dans mon projet Eigen C ++, j'ai le code suivant:

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

et j'étais blessant s'il y avait un remplacement équivalent pour prendre l'inverse de la matrice dans Eigen analogue à celui de Matlab mentionné ci-dessus?

Je sais que la matrice "division gauche" peut être exprimée en résolvant un système d'équations pour des expressions comme

A = inv(C)*B

mais qu'en est-il

A = C*inv(B)

dans Eigen?

Réponses:

2 pour la réponse № 1

Pour le moment, le moyen le plus efficace est de réécrire votre équation pour

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

qui peut être implémenté dans Eigen as

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

étaient / sont des plans, que finalement, on peut écrire

A = B * decompC.inverse();

et Eigen évaluera cela de la manière la plus efficace.