Partage
  • Partager sur Facebook
  • Partager sur Twitter

determinant matrice n*n

30 avril 2014 à 17:26:45

bonjour,

je viens de créer un programme me permettant de calculer l'inverse d'une matrice et maintenant je souhaiterai calculer le déterminant d'une matrice carrée de taille n.

mais je ne vois pas comment traduire la "formule mathématique" en python...

merci de votre aide!! et bonne journee

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 avril 2014 à 18:17:53

Salut, par récursion, tout simplement.

  • Partager sur Facebook
  • Partager sur Twitter
30 avril 2014 à 18:32:31

recursion? peut tu développer?

merci pour ta reponse

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 avril 2014 à 18:42:59

Je ne sais pas quelle définition tu prends pour le déterminant, mais une couramment employée est : \[\mathrm{det} A=\sum_{j=1}\^n(-1)\^{i+j}A_{i,j}\Delta_{i,j}\] Avec \(\Delta _{i,j}\) le déterminant de la matrice obtenue en enlevant la ligne \(i\) et la colonne \(j\) de la matrice \(A\) . En faisant un calcul récursif, ça passe tout seul.

-
Edité par Anonyme 30 avril 2014 à 18:43:55

  • Partager sur Facebook
  • Partager sur Twitter
30 avril 2014 à 21:23:44

oui j ai bien cela mais en fait le problème c'est que je ne sais pas faire de récursion en python.

peut tu me faire un petit topo?

merci

  • Partager sur Facebook
  • Partager sur Twitter
30 avril 2014 à 21:36:38

Exemple courant de calcul récursif :

def factorielle(n):
    if n <= 1:
        return 1
    else:
        return n * factorielle(n - 1)

La fonction factorielle() sera appelée plusieurs fois de suite jusqu'à ce qu'elle puisse retoruner 1, et tout le calcul sera remonté.

Dans ton cas, ça devrait être très similaire. Le cas sans appel de la fonction sera le calcul du déterminant de la plus petite sous-matrice de A.

  • Partager sur Facebook
  • Partager sur Twitter
19 mai 2014 à 14:41:28

Récursivité : SURTOUT PAS

La récursivité est une démarche élégante, le code est court, facilement compréhensible, mais l'exécution ...

J'ai programmé pour les 2 méthodes

  .- Méthode du pivot : Un déterminant 11x11 est calculé en une fraction de seconde (en C++)

  .- Méthode récursive : le même déterminant se calcul en plusieurs minutes.

  .- pour un déterminant 12x12, je n'ai pas eu la patience d'attendre plus de 1/4 d'heure, alors que la méthode du pivot ne réclamait ine fraction de seconde ! J'ai même calculé des déterminants 100x100 en moins d'une seconde.

Explication : Par la méthode récursive, un déterminant nxn demande le calcul de n déterminants (n-1)x(n-1), chacun d'eux calcul (n-1) déterminants ((n-2)x(n-2)

Au final un déterminant nxn utilise n(n-1)(n-2)...4 déterminants 3x3 (soit n!/3!), calculable par la méthode de Sarrus. Pour n = 12 ce nombre de déterminants 3x3 vaut

12!/3! = 6 653 800. Il faut une pile conséquente, donc beaucoup de mémoire et du temps.

En calcul numérique, les déterminants d'ordre supérieurs à 5 sont courants.

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2014 à 18:50:26

bonjour

comment calculer le determiant et l'inverse d'une matrice 11x11 en c++?

merci

-
Edité par FatihaAsn 15 novembre 2014 à 18:52:10

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2014 à 18:54:08

FatihaAsn a écrit:

bonjour

comment calculer le determiant et l'inverse d'une matrice 11x11 en c++?

merci

Avec la méthode du pivot, dixit ton voisin du dessus.

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2014 à 23:06:14

@dri1 a écrit:

Salut,
par récursion, tout simplement.


Pour info, python calcule un déterminant sur une matrice aléatoire 500x500 en 0,04 seconde sur un vieux laptop tout pourri.

Claude le lorrain donne un indice pour comprendre comment ça se fait...

-
Edité par Lord Casque Noir 15 novembre 2014 à 23:12:35

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 novembre 2014 à 16:58:08

Si tu as utilisé la bibliothèque numpy, celle-ci s'appuie sur la célèbre bibliothèque C lapack pour inverser les matrices, qui elle même s'appuie sur la décomposition LU. Qui n'a pas grand chose à voir avec le pivot de Gauss.

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2014 à 18:08:58

C'est numpy bien sûr. Avant de coder un truc à l'arrache, c'est pas une mauvaise idée de vérifier si il existerait pas une librairie codée par des spécialistes, débuggée, et optimisée à mort...
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 novembre 2014 à 21:42:10

Quand c'est pour utiliser dans un cadre pro, oui. Quand c'est pour coder soi-même pour saisir la logique du truc (comme c'est le cas ici), ça a tout de suite moins d'intérêt...

  • Partager sur Facebook
  • Partager sur Twitter