2017-06-02 1 views
7

Supposons que j'ai un carré matrixM. Supposons que je voudrais invert la matrice M.Inversion de matrice rapide sans paquet

J'essaie d'utiliser la classe des fractions mpq au sein de gmpy2 en tant que membres de ma matrice M. Si vous n'êtes pas familier avec ces fractions, elles sont fonctionnellement similaires au package intégré de python fractions. Le seul problème est, il n'y a pas de paquets qui vont inverser ma matrice à moins que je les sorte de la forme de fraction. J'ai besoin des nombres et des réponses sous forme de fraction. Donc, je vais devoir écrire ma propre fonction pour inverser M.

Il existe des algorithmes connus que je pourrais programmer, tels que gaussian elimination. Cependant, la performance est un problème, donc ma question est la suivante:

Existe-t-il un algorithme de calcul rapide que je pourrais utiliser pour calculer l'inverse d'une matrice M?

+1

Tout algorithme rapide et raisonnable pour cela aurait besoin d'être implémenté en C, en tant qu'extension. Une autre approche serait de les multiplier tous par leur GCD, ou simplement le produit de leurs dénominateurs, de les transformer en entiers, et d'utiliser des paquets avec des extensions C et beaucoup plus de temps mis à optimiser. C'est 'O (n)', donc à moins que l'algorithme à inverser soit meilleur que 'O (n)', cela ne nuira pas à la complexité temporelle. – Artyer

+3

Avez-vous regardé sympy? Cela fonctionne très bien avec gmpy2 et les matrices: http://docs.sympy.org/dev/modules/matrices/matrices.html#linear-algebra – denfromufa

+0

Oui, mais l'inversion de sympy est plus lente que de coder l'élimination gaussienne à la main. Je peux partager mon code pour l'élimination gaussienne avec des repères. –

Répondre

4

Y a-t-il autre chose que vous connaissez à propos de ces matrices? Par exemple, pour les matrices symmetricpositive definite, la décomposition Cholesky vous permet de vous inverser plus rapidement que la méthode Gauss-Jordan standard que vous avez mentionnée.

Pour les inversions matricielles générales, le Strassen algorithm vous donnera un résultat plus rapide que Gauss-Jordan mais plus lent que Cholesky.

Il semble que vous vouliez des résultats exacts, mais si vous êtes satisfait des inversions approximatives, il existe des algorithmes qui approchent l'inverse beaucoup plus rapidement que les algorithmes mentionnés précédemment. Toutefois, vous pourriez vous demander si vous avez besoin de l'inverse de la matrice entière pour votre application spécifique. En fonction de ce que vous faites, il peut être plus rapide d'utiliser une autre propriété de matrice. Dans mon expérience, le calcul de l'inverse de la matrice est une étape inutile.

J'espère que cela aide!