Quelle est la meilleure façon (la plus rapide) de calculer le déterminant d'une matrice LaMatGenDouble (non symétrique, au carré) avec la bibliothèque lapack++?Comment calculer la matrice déterminante avec lapack ++ (2.5+)
Répondre
Une façon de calculer le déterminant utilise la décomposition LU:
LaVectorLongInt pivots(A.cols());
LUFactorizeIP(A, pivots);
double detA = 1;
for (int i = 0; i < A.cols(); ++i)
detA *= A(i, i);
Attention, A va changer, afin de faire une copie est probablement conseillé.
Je ne sais pas à propos de lapack ++ mais je suis sûr qu'il n'y a pas de lapack standard, check. Autant que je sache, lapack ++ n'implémente pas l'opération matricielle elle-même mais utilise les autres, en fait vous pouvez basculer entre plusieurs d'entre eux (atlas, mkl (intel math kernel library) et ainsi de suite). Par conséquent, mon hypothèse est qu'il existe une opération déterminante dans lapack ++.
Lapack ++ contient toutes les opérations BLAS. Il n'y a pas de fonction déterminante dans BLAS, mais il y a probablement d'autres méthodes qui peuvent être utilisées pour obtenir le déterminant. –
Désolé, j'ai mal compris votre question. Je méritais le mauvais karma :-). –
- 1. Comment puis-je calculer l'inverse d'une matrice?
- 2. Réduction de rang de Lapack
- 3. Existe-t-il un sous-programme Fortran dans LAPACK/BLAS ou ailleurs pour calculer la décomposition des LDL?
- 4. Comment tester si la matrice est diagonale?
- 5. Définir une matrice comme un tableau de tableaux et calculer sa matrice inverse en C++
- 6. Comment calculer la matrice de clé inverse dans l'algorithme de Hill Cipher?
- 7. Problème avec la matrice 2D de JButton
- 8. VIM: Utilisez Python 2.5 avec vim 7.2
- 9. Intégration de Spring 2.5 avec Ibatis 3
- 10. Comment calculer la largeur de la police?
- 11. Comment copier une matrice?
- 12. Calculer le produit avec LINQ
- 13. Comment calculer la puissance en C#?
- 14. Comment calculer la largeur titleView optimale?
- 15. Déterminer la matrice de transformation
- 16. Comment calculer médiane?
- 17. Comment calculer correctement la hauteur d'une table
- 18. itération sélective de la matrice dans php
- 19. Matrice statique ou matrice allouée dynamique
- 20. Comment construire cette matrice php?
- 21. comment calculer tan inverse?
- 22. Comment calculer les scores?
- 23. Propriété Injecter une matrice avec Spring.Net
- 24. Comment calculer l'heure?
- 25. Calculer la TVA dans SQL
- 26. calculer la latitude/longitude Point
- 27. Bits d'itération Java dans la matrice d'octets
- 28. matrice de boutons
- 29. comment prendre une matrice en python?
- 30. Matrice adressable symétriquement
J'ai accepté cette réponse maintenant comme la réponse acceptée, car aucune autre option n'a été fournie. Si quelqu'un ajoute une autre solution (bonne, acceptable), j'accepterai cette réponse. –
Je pense que vous avez également besoin d'un signe négatif si vous avez un nombre impair de permutations (la taille des pivots est impair). Voir aussi: http://icl.cs.utk.edu/lapack-forum/viewtopic.php?p=341p336 –
La factorisation est 'A = PLU'. Ici L a les uns sur la diagonale, donc 'det (L) = 1'. Maintenant 'det (A) = det (P) * det (L) * det (U) = det (P) * 1 * det (U)'. Dans le code ci-dessus, le signe de la matrice de perméance 'P' (représenté par un tableau de pivots) n'est pas géré. – soegaard