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

  FORUM HardWare.fr
  Programmation
  C++

  Mathématiques : calcul de détérminant de matrice

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Mathématiques : calcul de détérminant de matrice

n°807189
lunarnet76
Posté le 27-07-2004 à 03:43:36  profilanswer
 

Salut a tous!
Je fais actuellement une class matrice avec tous les trucs basiques (transposer, opérations divers etc...)
et je n'arrive pas a trouver de méthode pour calculer les détérminants NxN, j'ai trouver sur le net plusieurs code source deja tout fait mais je n'ai rien compris... alors si vous pouviez m'aider et me donner un algorithme (enfin juste comment on fait quoi, pas de code source, ou le - possible)...
Merci!!! :bounce:  :bounce:  :bounce:  
ps: c + mathématiques qu'autre chose, mais je le fait en c++ alors!


---------------
!jb!
mood
Publicité
Posté le 27-07-2004 à 03:43:36  profilanswer
 

n°807204
Taz
bisounours-codeur
Posté le 27-07-2004 à 07:49:38  profilanswer
 

quelle est ta question sur le C++ ?

n°807311
Ace17
Posté le 27-07-2004 à 10:03:14  profilanswer
 

Pivot de Gauss...

n°807313
Taz
bisounours-codeur
Posté le 27-07-2004 à 10:04:11  profilanswer
 

chez boost sinon

n°807352
TriadPtale
Posté le 27-07-2004 à 10:46:24  profilanswer
 

pour calculer le déterminant c'est plutot simple question algorithme... mais le probleme c'est qu'il ne sera pas factorisé...
 
tu as des matrices numériques ou "algébriques" ?

n°807539
Ace17
Posté le 27-07-2004 à 12:37:05  profilanswer
 

Je ne pense pas qu'un gars qui ne sache pas calculer un déterminant s'attaque a une classe de matrice dont les termes sont formels...

n°807589
neg'gwada
rafix 971
Posté le 27-07-2004 à 13:16:40  profilanswer
 

decomposition suivant une ligne ou une colonne + recursivité


---------------
--- WinSplit Revolution ---
n°807604
lunarnet76
Posté le 27-07-2004 à 13:43:53  profilanswer
 

ben en fait g pas de probleme pour transposer l'algorithme en c++ mais je me rappel plus comment on fait pour calculer un détérminant!!! lol ... en fait je cherche a savoir quels sont les choses qu'on peut faire pour calculer un détérminant, mais surtt la version la plus facilement transposable en c++...  
ps:"tu as des matrices numériques ou "algébriques" ?" ben g un tableau rempli de nombre quoi (d int koi)lol


---------------
!jb!
n°807608
TriadPtale
Posté le 27-07-2004 à 13:51:15  profilanswer
 

Citation :

ps:"tu as des matrices numériques ou "algébriques" ?" ben g un tableau rempli de nombre quoi (d int koi)lol


 
bien vu Ace17 ;)
 
et pour revenir aux matrices, il n'y a pas 36000 façons de calculer un déterminant NxN ...
 
tu décompose en ligne ou colonnes (donc le plus simples est de prendre la premiere ligne vu que c'est numérique)
et pour chaque terme , par récursivité tu calcule les "petits" déterminant formés...

n°807618
youdontcar​e
Posté le 27-07-2004 à 14:09:14  profilanswer
 

TriadPtale a écrit :

par récursivité tu calcule les "petits" déterminant formés...

Méthode des cofacteurs, google donne http://www.les-mathematiques.net/b/c/j/node17.php3

mood
Publicité
Posté le 27-07-2004 à 14:09:14  profilanswer
 

n°807640
lunarnet76
Posté le 27-07-2004 à 14:21:54  profilanswer
 

par récursivité  : ah ok!!!
c vrai ke c logik en + lol ...
j vais essayer ca !!
merci!


---------------
!jb!
n°807814
el muchach​o
Comfortably Numb
Posté le 27-07-2004 à 16:46:17  profilanswer
 

Les cofacteurs, c'est très inefficace.
Je dirais diagonalisation (par un pivot de Gauss par ex. ou une décomposition LU). Le déterminant est alors trivial (c'est le produit des éléments diagonaux pour une matrice carrée).


Message édité par el muchacho le 27-07-2004 à 16:53:48

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°807950
Ace17
Posté le 27-07-2004 à 18:37:27  profilanswer
 

Mais oubliez la un peu la méthode des cofacteurs! Calculer un déterminant de cette facon la c'est un peu du meme genre que la version récursive naive de fibonacci (en pire)! Ca marche pour n = 2, 3, 4 mais des que n=100 vous pouvez toujours attendre d'avoir le résultat...
 
La méthode des cofacteurs n'a qu'un intéret *théorique*. Personne ne calcule un déterminant en "récursivant" des développements par rapport a une ligne/colonne.
 
Et pour répondre a el muchacho, il ne s'agit pas de diagonalisation mais de trigonalisation ;)

n°807964
el muchach​o
Comfortably Numb
Posté le 27-07-2004 à 18:53:33  profilanswer
 

Ca s'appelle trigonaliser, mettre la matrice sous forme triangulaire supérieure ? Ah merde, ça remonte à loin...


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°808032
Ace17
Posté le 27-07-2004 à 19:59:31  profilanswer
 

Triangulaire supérieure ou inférieure, c'est bien trigonaliser, tout comme mettre sous forme diagonale c'est diagonaliser.

n°808112
lunarnet76
Posté le 27-07-2004 à 22:54:40  profilanswer
 

mais on trigonalise comment? on fait des opérations de ligne et de colones pour avoir genre
1 2 3 4
0 1 3 4
0 0 1 4
0 0 0 1
non?
genre  
1 2   le det c -2
3 4
 
si on trigonalise ca donne
1 2
0 6
ah ouais ca marche lol, mais c sure ke ca marche pour au dela de 4x4???
sinon c sure ke c 100 fois + simple! et g deja tout c k il me faut!

n°808208
lunarnet76
Posté le 28-07-2004 à 04:22:50  profilanswer
 

re.. g un probleme toujours, mon algorithme de triagonalisation ne marche pas bien...
redligne(l) modifie la ligne (l-1)spécifié en mettant des 0 et des 1, et je l ai tésté et elle marche sans aucun probleme!
sousligne(1,2) enleve a la ligne 1 la ligne 2
num[][] est ma matrice
 
void Matrice::redgauss(){
 for (int i=0;i<nl;i++){
  //on soustrait des autres lignes celle ci
  for (int l=(i+1);l<nl;l++){
   redligne(i+1);
//+1 a cause de ma fonction que j'ai fait comme ca
   redligne(l+1);
//+1 a cause de ma fonction que j'ai fait comme ca
   if (num[l][i]!=0){
                                 redligne(l+1);
                                 sousligne(l+1,i+1);
                        }
   
  }
 
 }
 afficher();//affiche la matrice
}
 
Si quelqu'un pouvait me dire ou est le probleme, ca fait des heures que je cherche lol  :bounce:  :bounce:  :bounce:  
mici


---------------
!jb!
n°808223
farib
Posté le 28-07-2004 à 08:22:28  profilanswer
 

Ace17 a écrit :


La méthode des cofacteurs n'a qu'un intéret *théorique*. Personne ne calcule un déterminant en "récursivant" des développements par rapport a une ligne/colonne.


 
 
Bein le développement suivant une ligne ou colonne, ça a rien à voir avec les cofacteurs, hein....


---------------
Bitcoin, Magical Thinking, and Political Ideology
n°808251
el muchach​o
Comfortably Numb
Posté le 28-07-2004 à 09:21:48  profilanswer
 
n°808641
lunarnet76
Posté le 28-07-2004 à 13:38:34  profilanswer
 

mon compte marche pas sur cppfrance.com lol ... c bien ma veine!


---------------
!jb!
n°808657
Ace17
Posté le 28-07-2004 à 13:49:31  profilanswer
 

farib a écrit :

Bein le développement suivant une ligne ou colonne, ça a rien à voir avec les cofacteurs, hein....


Tu me fous le doute la...
Le déterminant que tu calcules lorsque tu as rayé ta ligne et ta colonne (modulo la multiplication par (-1)^(i+j) ) ce serait pas un cofacteur?


Message édité par Ace17 le 28-07-2004 à 13:49:43
n°808727
tarfteck
Posté le 28-07-2004 à 15:01:49  profilanswer
 

j'ai fait un programme de calcul de determinant de matrice N*N en delphi, ça peut surement t'aider :
 
http://perso.wanadoo.fr/tutoprog/det.html
 
bye

n°808737
el muchach​o
Comfortably Numb
Posté le 28-07-2004 à 15:13:18  profilanswer
 

Ace17 a écrit :

Tu me fous le doute la...
Le déterminant que tu calcules lorsque tu as rayé ta ligne et ta colonne (modulo la multiplication par (-1)^(i+j) ) ce serait pas un cofacteur?


 
Ben si.
Et le programme de tafteck est encore une implémentation des cofacteurs. Il serait temps d'apprendre qu'utiliser les cofacteurs pour calculer un déterminant est la pire des méthodes existante, vu que c'est qq chose comme du N^3 !!


Message édité par el muchacho le 28-07-2004 à 15:22:53

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°808760
lunarnet76
Posté le 28-07-2004 à 15:34:53  profilanswer
 

oui c vrai, c super nul lol, mais c con car ca au moins j arrive a le faire lol, j'ai de grave probleme pour les moments ou il y a des zeros! bouh!!!
Par contre c dure aussi d'intégré la methôde des cofacteurs dans ma classe de matrice simplement parce que il faut spécifié la taille des tableaux! ce que je n'ai pas besoin de faire avec ma class! donc c 2 fois + nul que c ke tu dit lol


---------------
!jb!
n°808761
tarfteck
Posté le 28-07-2004 à 15:35:27  profilanswer
 

en effet, la meilleure méthode est la trigonalisation, pour les matrices plus complexe je crois qu'il faut utiliser la méthode de Jordan pour pouvoir trigonaliser n'importe qu'elle matrice.

n°808914
Ace17
Posté le 28-07-2004 à 17:32:34  profilanswer
 

tarfteck a écrit :

en effet, la meilleure méthode est la trigonalisation, pour les matrices plus complexe je crois qu'il faut utiliser la méthode de Jordan pour pouvoir trigonaliser n'importe qu'elle matrice.


Non, pas la peine, Gauss marche a tous les coups. Et il ne s'agit pas vraiment de trigonalisation, dans la mesure ou il ne s'agit pas de trouver une base dans laquelle la matrice de l'application soit triangulaire mais d'arriver a une matrice triangulaire de meme déterminant, et ce, par des opérations élémentaires


Message édité par Ace17 le 28-07-2004 à 17:32:51
n°809353
lunarnet76
Posté le 29-07-2004 à 00:25:17  profilanswer
 

euh g une question: si on multiplie une ligne par un nombre est-ce que ca change le détérminant???


---------------
!jb!
n°809438
tarfteck
Posté le 29-07-2004 à 01:33:05  profilanswer
 

si tu multiplies une ligne par a ou une colonne par a le déterminant est multiplié par a ...
si tu ajoute a fois une colonne a une autre tu ne changes pas le déterminant.
Et si tu echanges 2 lignes d'une matrice le determinant est multiplié par -1  
voila  
A+

n°809439
lunarnet76
Posté le 29-07-2004 à 01:33:53  profilanswer
 

ah ben voila, je savais que j avais oublié un truc lol
Merci


Message édité par lunarnet76 le 29-07-2004 à 01:34:05

---------------
!jb!
n°809462
el muchach​o
Comfortably Numb
Posté le 29-07-2004 à 07:05:36  profilanswer
 

>lunarnet : au vu de ta question, tu t'es lancé dans Gauss, non ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°809828
lunarnet76
Posté le 29-07-2004 à 12:23:19  profilanswer
 

oui , je réduisais les lignes et les colones en multipliant par le premier terme de la ligne non nul (enfin l'inverse de ce nombre) et je soustrayer les lignes. J'avais oublié le détail du dessus du coup je ne trouver jamais de détérminant juste!!!


---------------
!jb!
n°810624
el muchach​o
Comfortably Numb
Posté le 30-07-2004 à 01:24:43  profilanswer
 

Ok, je m'en doutais. N'oublie pas de choisir le pivot maximal à chaque étape, de façon à minimiser les erreurs d'arrondi dans tes calculs. C'est le point à ne pas oublier de l'algo. Si tu ne fais pas cela, avec certaines matrices, tu as de fortes chances de te retrouver avec un résultat grossièrement faux à la fin.
Etudie bien la référence que je t'ai donnée, les algos de calcul numérique sont pleins de pièges.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°810627
lunarnet76
Posté le 30-07-2004 à 01:39:25  profilanswer
 

tarfteck a écrit :

si tu multiplies une ligne par a ou une colonne par a le déterminant est multiplié par a ...
si tu ajoute a fois une colonne a une autre tu ne changes pas le déterminant.
Et si tu echanges 2 lignes d'une matrice le determinant est multiplié par -1  


et... il se passe quoi si tu ajoute a fois une ligne a une autre???


Message édité par lunarnet76 le 30-07-2004 à 01:49:42
n°810664
Ace17
Posté le 30-07-2004 à 08:16:19  profilanswer
 

Tu ne changes pas le déterminant si tu ajoutes une ligne a une autre. Tu peux meme l'ajouter a fois, ca ne change toujours pas le déterminant.

n°825604
lunarnet76
Posté le 18-08-2004 à 03:28:04  profilanswer
 

ca y est j'ai enfin réussi mon algorithme qui marche sans aucun probleme, tester sur des centaines d exemples! ca fait plaisir parce que j'y ai passé des semaines!
                           :bounce:
mais en fait mon seul probleme reste le depassement de donnée: les int ne sont pas assez grand et ca fait tout buggé des fois, y a pas un moyen de savoir si un int arrive a son maximum histoire de mettre un cout<<"votre int est trop grand,choisissez en un autre!"; `???

n°825621
Ace17
Posté le 18-08-2004 à 08:37:55  profilanswer
 

Il marche avec une matrice d'ordre 100 ton algo? :D

n°825634
Moktar1er
No one replies...
Posté le 18-08-2004 à 09:10:36  profilanswer
 

j'arrive aprés la bataille mais...
j'ajouterais un vote pour la décomposition LU
surtout si aprés on fait mumuse avec Cholesky et on a même la fonction inverse

n°825638
Ace17
Posté le 18-08-2004 à 09:23:03  profilanswer
 

Il faut que A soit inversible pour pouvoir la décomposer ainsi

n°825640
Moktar1er
No one replies...
Posté le 18-08-2004 à 09:24:17  profilanswer
 

Ace17 a écrit :

Il faut que A soit inversible pour pouvoir la décomposer ainsi


 
certes, mais vu qu'on peut calculer facilement le determinant comme ça?
on s'arrête à cette phase là non?

n°825816
lunarnet76
Posté le 18-08-2004 à 14:11:11  profilanswer
 

Ben en fait l avantage c'est que j'ai appris Gauss en cour donc le but c'était de l'utiliser, sinon mon algo marche pour NxN mais la c sure que aprés 10x10 le pc est totalement dépassé par les valeurs qu'il a, mais il suffit d avoire un determinant 4x4 et hop c foutu pour peu que les nombres soit premier genre 4665*4651*5999*4566*9 et c fini, en fait faudrai juste que je limite les nombres a 3 chifres comme ca plus de problémes!!!!
 
ps: ces nombres ne sont pas premiers mais g pas que ca a faire d'en trouver lol, et en fait le probleme c'est que vu qu'ils sont premiers ils sont irreductibles (mes matrices sont composés de fraction)


Message édité par lunarnet76 le 18-08-2004 à 14:13:45
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Mathématiques : calcul de détérminant de matrice

 

Sujets relatifs
librairires mathématiquesCalcul de l'âge en sql sous access
Bases d'IA, mathématiques et statistiquescalcul le temps de l installation
matrice binaire[Sybase] calcul de date
PB avec une valeur NULL dans un calcul sous SQLalgo du calcul formel du determinant matrice symetrique pas positive
Plus de sujets relatifs à : Mathématiques : calcul de détérminant de matrice


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR