Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5064 connectés 

 


Dernière réponse
Sujet : Determinant d'une matrice[n][n]???
LeGreg

greg113 a écrit a écrit :

// Algorithme recursif de calcul du déterminant d'une matrice n*n




le probleme de ta methode
c'est qu'elle revient en complexite a calculer
le determinant avec la formule du determinant
et qu'elle est tres inefficace.
(nombreuses operations redondantes)
 
la methode de reduction de matrices par Gauss-Jordan,
est plus rapide et est facile a mettre en oeuvre.
(meme si ce n'est pas la plus rapide)
 
LEGREG


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
LeGreg

greg113 a écrit a écrit :

// Algorithme recursif de calcul du déterminant d'une matrice n*n




le probleme de ta methode
c'est qu'elle revient en complexite a calculer
le determinant avec la formule du determinant
et qu'elle est tres inefficace.
(nombreuses operations redondantes)
 
la methode de reduction de matrices par Gauss-Jordan,
est plus rapide et est facile a mettre en oeuvre.
(meme si ce n'est pas la plus rapide)
 
LEGREG

greg113 Arghhhhhhhhhhhh l'indentation ne ressemble à rien :) !!!!!
 
@+ ++
greg113 // Algorithme recursif de calcul du déterminant d'une matrice n*n
 
// tu dois insérer ce code dans une classe car le tableau ne passe pas par
// l'appel de la fonction, ou alors tu fais un tableau global :) beurk
 
 
int det(unsigned i)
{
 int d, s, j ;
   if(i < n-1)
   {
    d=0;
      s=-1;                //utilisé pour l'alternance + - + - + - ...
      for(j=0; j<n; ++j)
      {
       if(V[j])
         {
          s=-s;
            V[j]=false;
            d+=s*M[i][j]*det(i+1);        // appel recursif
            V[j]=true;
         }
      }
   }
   else
   {
    j=0;
      while(!V[j])
       ++j;
      d=M[i][j];
   }
   return d;
}
 
// tu dois déclarer dans le private de ta classe un tableau V de taille n
// int V[n]; n étant le nombre de ligne (=colonne) de ta matrice carré
// dans mon code, ta matrice s'appelle M
// tu dois donc avoir créé une matrice int M[n][n];
// si tu ne sais pas ce que c'est que la recursivité, il est normal que tu ne
// comprennes rien au code précédent :)
// @+
LeGreg bon le probleme de ce calcul c'est qu'il n'est pas deterministe
(contrairement a un calcul systematique avec la formule des determinants
det= somme sur p(sig(p)*produit(a(i,p(i))) )  
 
Mais qui s'en soucie ;).
 
A+
LEGREG
LeGreg j'crois qu'il y avait une methode avec un pivot de gauss
genre tu ramenes ta matrice a une forme diagonale superieure.
 
Tu ne t'autorises que deux operations:
Une soustraction d'une ligne par une ligne d'ordre superieure
multiplie par un facteur reel non nul.
Une permutation de lignes si tu te retrouves avec un zero sur une diagonale et les coefficients de colonne inferieurs. (en n'oubliant pas de multiplier ton determinant par -1).
 
A la fin ca se ramene a calculer le produit des coefficients
sur la diagonale.
 
J'ai pas l'algo detaille en tete mais fais recherche
gauss + determinant
 
A+
LEGREG
vendeeman Tu peux me l'envoyer par mail ton algo stp :D
vendeeman@libertysurf.fr
Merci ;)
C pr ce soir que j'en aurais desoin!
greg113 bon c'est du c ou pas ??? que tu veux ??
Cherrytree

Vendeeman a écrit a écrit :

 
AU fait, c ki Sarrus :??: :D  




Un mathématicien ? :D

greg113 Tu codes sous koi comme langage ??? Si tu veux j'ai un algorithme c++ qui utilise de la recurisvité et qui résoud pour n'importe quelle grandeur ;)
vendeeman Merci les mecs de vos explications ;)
G tout compris!!!
Bon, resultat: j'y arrive pour une 3*3, et pis au dessus, ben tant pis :D
 
AU fait, c ki Sarrus :??: :D
Cherrytree

Kyle_Katarn a écrit a écrit :

Sarrus ne marche (efficaxcement en tout cas) que dans la cas 3*3  




Allons bon !

Kyle_Katarn Sarrus ne marche (efficaxcement en tout cas) que dans la cas 3*3
Giz_ c pas si dur...
 
au moins pour une 3*3: ....Ex:
 
2 3 4
7 8 9
4 5 6
 
le det de cet matrice est: (2*8*6+3*9*4+7*5*4)-(4*8*4+3*7*6+9*5*2)
A partir de la tu mets des i pour ligne et j pour colonne dans ton algo...mais je suppose que tu veux que ca marche pour tout type de matrice ??
parce que pour une 4*4, ca se complique (moi je me ramène tjs a une 3*3) ...
Je@nb En basic sur Ti89 tu fais det([x,y;z,w]) et hop ta le déterminant  :D  :D  :D  :D
aurel

Cherrytree a écrit a écrit :

 
Ouais, mais Vendeeman il faut qu'il bosse aussi un peu.  




bon ba bonne chance Vendeeman, alors... :)

Cherrytree

Aurel a écrit a écrit :

 
:lol:
ah ba oui, vu de ce point, c tout con, c sur !!!
Ce qu'il veut Vendeeman, je pense que ce serait le code source de la fonction sarrus(), ou alors si elle est déja implémenté dans le langage ou il veut écrire son algo, ce serait top !!!  




Ouais, mais Vendeeman il faut qu'il bosse aussi un peu.

aurel

Cherrytree a écrit a écrit :

Bon un déterminant c'est tout con.
if (!matrice_carré(matrice)) {
   print "grosse burne";
}
else {
   return sarrus(matrice);
}
 
où sarrus est la règle de Sarrus. On somme le produit des éléments d'une même diagonale (cyclique) et on soustrait la somme des produits des antidiagonales.  




:lol:
ah ba oui, vu de ce point, c tout con, c sur !!!
Ce qu'il veut Vendeeman, je pense que ce serait le code source de la fonction sarrus(), ou alors si elle est déja implémenté dans le langage ou il veut écrire son algo, ce serait top !!!

Cherrytree Bon un déterminant c'est tout con.
if (!matrice_carré(matrice)) {
   print "grosse burne";
}
else {
   return sarrus(matrice);
}
 
où sarrus est la règle de Sarrus. On somme le produit des éléments d'une même diagonale (cyclique) et on soustrait la somme des produits des antidiagonales.
aurel

dropsy a écrit a écrit :

euh, j'ai un doute :heink: Ca existe le déterminant d'une matrice non carrée :??:  
pffff la prépa c loin :pt1cable:  




 
ah ba non ca existe, pas. gtait une burne en math apres le bac, maos qd meme.
pour repondre a la question, j'ai déja vu trainé l'algo quelquepart, mais je saispu ou, mais faut bien chercher et c un truc baleze car il y a plein de recusivité! :)

dropsy euh, j'ai un doute :heink: Ca existe le déterminant d'une matrice non carrée :??:  
pffff la prépa c loin :pt1cable:
Cherrytree

dropsy a écrit a écrit :

je crois que ça veut tout simplement dire une matrice carrée (au vu du post...)  




Oui, je veux bien, mais en math, il faut être précis.

dropsy je crois que ça veut tout simplement dire une matrice carrée (au vu du post...)
Cherrytree

Vendeeman a écrit a écrit :

C koi l'algo pour calculer le determiant d'une matrice a 2 dimension de taille [n][n]?
C chaud et je trouve pas :sweat:
;)  




Qu'appelle tu une matrice à 2 dimensions si elle est de taille [n][n]. Pour moi ça veux dire que (n - 2) lignes ou colonnes sont des combaisons linéaires des 2 restantes. J'ai du mal à croire que ce soit ton problème ?!

vendeeman et c'est koi? :D
asphro essai avec les co-matrice
vendeeman C koi l'algo pour calculer le determiant d'une matrice a 2 dimension de taille [n][n]?
C chaud et je trouve pas :sweat:
;)

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)