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

  FORUM HardWare.fr
  Programmation
  C

  determinant (pivot)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

determinant (pivot)

n°2170069
aklim2
Posté le 07-01-2013 à 02:53:18  profilanswer
 

bonsoir ,  
dans ce code  

Code :
  1. double **change(int nbr)
  2. {
  3.     double **tab=NULL;
  4.     int i,j,k;
  5.     for(k=0; k<nbr-1; k++)
  6.     {
  7.         for(i=k+1; i<nbr; i++)
  8.         {
  9.             if(i!=k&&tab[i][k]!=0)
  10.             {
  11.                 for(j=0; j<nbr; j++)
  12.                     tab[k][j]=tab[k][j]+tab[i][j];
  13.                     //changement des lignes.
  14.             }
  15.         }
  16.     }
  17.     return tab;
  18. }
  19. double calculdet(double **tab,int nbr)
  20. {
  21.     int i;
  22.     double det;
  23.     for(i=0; i<nbr; i++)
  24.     {
  25.         det*=tab[i][i];
  26.     }
  27.     return det;
  28. }
  29. double**triangleMatrice(int nbr)
  30. {
  31.     double **tab=NULL;
  32.     int i,j,k;
  33.     double r;
  34.     for(k=0; k<nbr-1; k++)
  35.     {
  36.         for(i=k+1; i<nbr; i++)
  37.         {
  38.             if(tab[k][k]!=0)//si le pivot diffirent de 0
  39.             {
  40.                 r=-(tab[i][k]/tab[k][k]);
  41.                 for(j=k; j<nbr; j++)
  42.                     tab[i][j]=(tab[i][j]+(r*tab[k][j]));
  43.             }
  44.             else //sinon (pivot =0) on change les lignes puis on transforme la matrice
  45. //en triangulaire
  46.                 tab=change(nbr);
  47.             tab=triangleMatrice(nbr);
  48.         }
  49.         printf("%.2f",calculdet(tab,nbr));//on affiche le determinant
  50.     }
  51.     return tab;//retourner le tableau apres les changements
  52.     /*ici je veux que j'affiche les 0 que j'ai ajouté au tableau par la fonction
  53.     trianglematrice(); */
  54. }


ce code sert a calculer le determinant de la matrice en utilisant la methode pivot de gauss.http://fr.wikipedia.org/wiki/Calcu [...] t_de_Gauss
pour la fonction trianglematrice elle transforme une matrice carré en matrice triangulaire sous forme
1 2 3  
0 5 3  
0 0 2  
(exemple nbr=3)
la le déterminant sera plus facile a calculer c'est : 1*5*2
sinon le problème c'est que si le pivot ( tab[k][k] ==0 ) la on doit changer les lignes ou les colonnes puis transformer la matrice.
mon problème c'est que mes deux fonctions ya une fautes j'arrive pas a trouver.
Merci de m'aider.
 

Message cité 1 fois
Message édité par aklim2 le 07-01-2013 à 11:50:55
mood
Publicité
Posté le 07-01-2013 à 02:53:18  profilanswer
 

n°2170096
rufo
Pas me confondre avec Lycos!
Posté le 07-01-2013 à 11:23:05  profilanswer
 

Sa serait possible d'avoir la traduction de ton post en français, svp? Parce que c'est pas très compréhensible :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170115
leonhard
Posté le 07-01-2013 à 14:52:15  profilanswer
 

Bon, on considère que la matrice que tu veux trianguler est "bonne".
 

aklim2 a écrit :

bonsoir ,  
dans ce code  

Code :
  1. double **change(int nbr)
  2. {
  3.     double **tab=NULL;
  4.     int i,j,k;
  5.     for(k=0; k<nbr-1; k++)
  6.     {
  7.         for(i=k+1; i<nbr; i++)
  8.         {
  9.             if(i!=k&&tab[i][k]!=0)
  10.             {
  11.                   // Un compilo sérieux ne devrait pas râler là ?
  12.             }
  13.         }
  14.     }
  15.     return tab;
  16. }
  17. double**triangleMatrice(int nbr)
  18. {
  19.     double **tab=NULL;
  20.     int i,j,k;
  21.     double r;
  22.     for(k=0; k<nbr-1; k++)
  23.     {
  24.         for(i=k+1; i<nbr; i++)
  25.         {
  26.             if(tab[k][k]!=0)//si le pivot diffirent de 0
  27.             {
  28.                //  Là aussi ça me fait mal aux yeux
  29.         }
  30.         printf("%.2f",calculdet(tab,nbr));//on affiche le determinant
  31.     }
  32. }


 


 
Un petit conseil si tu est débutant : mets des "printf" à différents endroits de ton programme pour voir si les valeurs que tu as bien à ces endroits sont celles que tu souhaites.
 
Notes pour les programmeurs plus expérimentés: un debuggeur c'est bien, mais pour les débutants les printf c'est plus facile à mettre en oeuvre et à comprendre.  


Message édité par leonhard le 07-01-2013 à 14:57:17
n°2170120
Farian
Posté le 07-01-2013 à 15:43:11  profilanswer
 

Bonjour !
 
Dans vos deux fonctions, vous déclarez tab à NULL, puis vous vous en servez comme si la matrice avait été allouée ... Cela ne peut conduire qu'à des plantages ...

n°2170138
aklim2
Posté le 07-01-2013 à 19:40:02  profilanswer
 

Merci pour les propositions :D
j'essaye de relire un peu le cours de pointeur/fonction pour réparer ces problèmes.
et je vais utiliser cette méthode de tester le code en utilisant printf.
merci encore !


Message édité par aklim2 le 07-01-2013 à 19:41:07

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

  determinant (pivot)

 

Sujets relatifs
Déterminant Matrice carrée programmeAvoir la fonction "Sum" par défaut dans la table pivot
determinant matrice carrée fortran 90Pb pour lier deux tables avec un pivot
pivot de gauss en pascal newun systeme avec le pivot de gauss a resoudre
Algo récursif du pivot de gausspivot gauss en PASCAL
tableau croise ou pivot tableMathématiques : calcul de détérminant de matrice
Plus de sujets relatifs à : determinant (pivot)


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