Je crois Adrien est juste avec la raison de ne pas avoir BLAS une fonction inverse pour les matrices carrées. Cela dépend de la matrice que vous utilisez pour optimiser le calcul de son inverse.
En général, vous pouvez utiliser la décomposition LU, qui est valable pour n'importe quelle matrice carrée. . I. e, quelque chose comme:
gsl_linalg_LU_decomp(A, p, signum);
gsl_linalg_LU_invert(A, p, invA);
où A est la matrice carrée que vous voulez son inverse, p est un objet gsl_permutation
(l'objet de permutation où la matrice de permutation est codée), Signum est le signe de la permutation et invA est l'inverse de A.
Puisque vous déclarez que A = P' G P
étant P
normal et G
diagonale, probablement A
est une matrice normale. Je ne les ai pas utilisés depuis un moment, mais il doit y avoir un théorème de factorisation pour eux, que vous pouvez trouver dans le Chapter 14 of the GSL reference manual ou mieux, dans un livre d'algèbre linéaire.Par exemple, si vous aviez des matrices positives positives symétriques et que vous vouliez trouver l'inverse, vous pourriez utiliser la factorisation de Cholesky, qui est optimisée pour ce type de matrices. Ensuite, vous pouvez utiliser les fonctions gsl_linalg_cholesky_decomp()
et gsl_linalg_cholesky_invert()
dans le GSL pour le rendre efficace.
J'espère que ça aide!
Merci pour votre réponse. Je ne suis pas sûr d'où vient la permutation. Avez-vous peut-être confondre quelque chose parce que l'une de mes matrices s'appelle "P"? Vous avez raison de dire que esentially je pourrais reformuler mon problème (P ') * G * P * X = B, mais je ne vois pas comment vous pouvez déduire que suite à ce que vous proposez? Pourriez-vous élaborer un peu? Aussi, s'il vous plaît ne pas que, tandis que ma matrice A est composée de P '* G * P, ce n'est pas une sorte de décomposition de valeurs propres, dans le cas où vous pensiez dans ces lignes. – Tom
Mon erreur, ... Je travaillais avec des matrices de permutation plus tôt, ... Je vais éditer le post pour corriger. – Adrien