begin process at 2012 05 27 13:28:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ALGORITHME DE GAUSS-JORDAN

ALGORITHME DE GAUSS-JORDAN


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :gauss, jordan, inversion, matrice, algebre Niveau :Débutant Date de création :20/02/2006 Date de mise à jour :17/04/2006 17:43:20 Vu :32 962

Auteur : hasnaoui_karim

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

algorithme de gauss-jordan qui inverse une matrice carrée. la fonction gauss-jordan utilise deux fonctions,
l'une qui rempli une matrice par la matrice indentité et l'autre qui copie une matrice dans une autre.
fonction qui ne marche que pour des tenseurs de rang 2.

Notation:
une matrice A(i,j) de dimension dim*dim s'ecrit dans le code
A[i+j*dim]

dim est superieur ou égale à 2.

Source

  • #include <iostream>
  • #include <cmath>
  • using namespace std;
  • void identite(double mat[],int dim);
  • void copie_matriceR(double mat1[],double mat2[],int dim);
  • void gaussR(double mat1[],double mat2[],int dim);
  • int main()
  • {
  • //exemple d'utilisation pour une matrice 2x2
  • int dim=2;
  • double *M=new double[dim*dim];
  • double *M_inv=new double[dim*dim];
  • //remplissage de la matrice M
  • M[0+0*dim]=2.;
  • M[0+1*dim]=4.8;
  • M[1+0*dim]=6.2;
  • M[1+1*dim]=5.1;
  • //inversion de la matrice M
  • gaussR(M,M_inv,dim);
  • //affichage des elements de matrice inverse
  • for(int i=0;i<dim;i++)
  • {
  • for(int j=0;j<dim;j++)
  • {
  • cout<<M_inv[i+j*dim]<<" "<<;
  • }
  • cout<<endl;
  • }
  • }
  • //fonction qui rempli une matrice
  • //par la matrice identité
  • void identite(double mat[],int dim)
  • {
  • for(int i=0;i<dim;i++)
  • {
  • for(int j=0;j<dim;j++)
  • {
  • if(i==j)
  • {
  • mat[i+j*dim]=1.;
  • }
  • else
  • {
  • mat[i+j*dim]=0.;
  • }
  • }
  • }
  • //fonction qui copie une matrice dans une autre
  • void copie_matriceR(double mat1[],double mat2[],int dim)
  • {
  • for(int i=0;i<dim;i++)
  • {
  • for(int j=0;j<dim;j++)
  • {
  • mat2[i+j*dim]=mat1[i+j*dim];
  • }
  • }
  • }
  • //la matrice mat1 est celle qui est à inverser
  • //et l'inverse est contenu dans mat2
  • void gaussR(double mat1[],double mat2[],int dim)
  • {
  • double *temp=new double[dim*dim];
  • copie_matriceR(mat1,temp,dim);
  • double a,b;
  • a=0.;
  • b=0.;
  • int c=0;
  • identite(mat2,dim);
  • for(int k=0;k<dim;k++)
  • {
  • a=temp[k+k*dim];
  • //verifie la condition "a" different de zero
  • //sinon on copie une ligne pour resoudre le probleme
  • c=0;
  • while(abs(a)<0.000000001)
  • {
  • c++;
  • for(int q=0;q<dim;q++)
  • {
  • temp[k+q*dim]=temp[k+q*dim]+temp[k+c+q*dim];
  • mat2[k+q*dim]=mat2[k+q*dim]+mat2[k+c+q*dim];
  • }
  • a=temp[k+k*dim];
  • }
  • //normalisation la ligne k
  • for(int l=0;l<dim;l++)
  • {
  • temp[k+l*dim]=temp[k+l*dim]/a;
  • mat2[k+l*dim]=mat2[k+l*dim]/a;
  • }
  • //reduction de gauss-jordan
  • for(int i=0;i<dim;i++)
  • {
  • b=temp[i+k*dim];
  • if(i!=k)
  • {
  • for(int j=0;j<dim;j++)
  • {
  • temp[i+j*dim]=temp[i+j*dim]-b*temp[k+j*dim];
  • mat2[i+j*dim]=mat2[i+j*dim]-b*mat2[k+j*dim];
  • }
  • }
  • }
  • }
  • delete(temp);
  • }
#include <iostream>
#include <cmath>
using namespace std;

void identite(double mat[],int dim);
void copie_matriceR(double mat1[],double mat2[],int dim);
void gaussR(double mat1[],double mat2[],int dim);

int main()
{
//exemple d'utilisation pour une matrice 2x2
 int dim=2;
 double *M=new double[dim*dim];
 double *M_inv=new double[dim*dim];
//remplissage de la matrice M
 M[0+0*dim]=2.;
 M[0+1*dim]=4.8;
 M[1+0*dim]=6.2;
 M[1+1*dim]=5.1;
//inversion de la matrice M
 gaussR(M,M_inv,dim);
//affichage des elements de matrice inverse
 for(int i=0;i<dim;i++)
 {
  for(int j=0;j<dim;j++)
  {
    cout<<M_inv[i+j*dim]<<" "<<;
  }
  cout<<endl;
 }


}

//fonction qui rempli une matrice
//par la matrice identité
void identite(double mat[],int dim)
{
 for(int i=0;i<dim;i++)
 {
  for(int j=0;j<dim;j++)
  {
   if(i==j)
   {
    mat[i+j*dim]=1.;
   }
   else
   {
    mat[i+j*dim]=0.;
   }
 }
}

//fonction qui copie une matrice dans une autre
void copie_matriceR(double mat1[],double mat2[],int dim)
{
	for(int i=0;i<dim;i++)
	{
		for(int j=0;j<dim;j++)
		{
			mat2[i+j*dim]=mat1[i+j*dim];
		}
	}
}

//la matrice mat1 est celle qui est à inverser 
//et l'inverse est contenu dans mat2
void gaussR(double mat1[],double mat2[],int dim)
{
 double *temp=new double[dim*dim];
 copie_matriceR(mat1,temp,dim);
 double a,b;
 a=0.;
 b=0.;
 int c=0;
 identite(mat2,dim);
 for(int k=0;k<dim;k++)
 {
  a=temp[k+k*dim];
//verifie la condition "a" different de zero
//sinon on copie une ligne pour resoudre le probleme
  c=0;
  while(abs(a)<0.000000001)
  {
   c++;
   for(int q=0;q<dim;q++)
   {
    temp[k+q*dim]=temp[k+q*dim]+temp[k+c+q*dim];
    mat2[k+q*dim]=mat2[k+q*dim]+mat2[k+c+q*dim];
   }
   a=temp[k+k*dim];
  }
//normalisation la ligne k
  for(int l=0;l<dim;l++)
  {
   temp[k+l*dim]=temp[k+l*dim]/a;
   mat2[k+l*dim]=mat2[k+l*dim]/a;
  }
//reduction de gauss-jordan
  for(int i=0;i<dim;i++)
  {
   b=temp[i+k*dim];
   if(i!=k)
   {
    for(int j=0;j<dim;j++)
    {
     temp[i+j*dim]=temp[i+j*dim]-b*temp[k+j*dim];
     mat2[i+j*dim]=mat2[i+j*dim]-b*mat2[k+j*dim];
    }
   }
  }
 }
 delete(temp);
}

 Conclusion

// Karim Hasnaoui                            
// GRAND ACCELERATEUR NATIONAL D'IONS LOURDS,
// Boulevard Henri Becquerel,                
// B.P. 55027, 14076 CAEN Cedex, France      
// bureau 282                                
// E-mail:  Hasnaoui@ganil.fr                
// tel:  0033 (0)2 31 45 49 25


 Historique

20 février 2006 16:23:05 :
Ajout d'un exemple d'utilisation. Correction sur la syntaxe.
20 février 2006 17:15:33 :
ajout de commentaires
17 avril 2006 16:39:23 :
erreur de frappe à un endroit de la source
17 avril 2006 17:43:20 :
erreur de frappe

 Sources du même auteur

CALCUL DE DETERMINANT D'UNE MATRICE

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
INVERSION DE MATRICE par Wyfrel
RÉSOLUTION DES SYSTÈME AX=B par cresuscresus
GAUSS-JORDAN SUR DES MATRICES CARRÉS par Maxou95
Source avec Zip Source avec une capture DETERMINANTS (GAUSS & COFACTEURS) par JCDjcd

Commentaires et avis

Commentaire de mickbad le 20/02/2006 15:54:12

salut,

Ligne 43: ya pas de fonction identiteR(complex<double>[],int) de défini dans ton bout de code !

Il me semble bien (dans l'état) que tu as une fuite de mémoire initialisé à la ligne 37 (new ...), ya pas de delete à priori pour temp!

Toujours dans cette même fonction, si l'utilisateur de ta fonction, lors de son appel, met 0 à la valeur de dim. Oui tu as compris ce que je voulais dire et tu pourrais éviter au processeur du travail inutile !

Enfin, sachant que le code est mis en "débutant", pourrais-tu mettre un main et les includes nécessaires pour effectuer les tests ?


voilà, et sinon tu fais quoi au ganil ?
.Mick.


ps: code utile pour les exos de math en tout cas :)
oula! mes p'tites matrices ...

Commentaire de pjaffren le 14/04/2006 16:35:18

Salut,
alors moi aussi j'ai besoin d'un code en C ou java de pref (car je connais pas le C++) pour faire je cite:
"Méthode de Gauss-Jordan pour la résolution de systèmes linéaires et l'inversion de matrices: on utilisera la structure [A|Id|b] qui permet d'obtenir en même temps l'inverse de A et la solution du système A.x=b".

Le code proposé plus haut ne marche pas chez moi, je c pas s'il y a des erreurs ou quoi mais ça ne marche pas !!
Please HELP ME!!!

Paulon.


 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

gauss en pascal "Tres Urgent " [ par islem2007 ] Svp je voudrais ecrire en pascal le programme correspondant a la methode de gauss pour la matrice suivante :On considere la matrice An=(ai,j)&lt;=i,j& Inversion de matrice [ par Aekq ] Salut,J'ai besoin de code d'inversion de matrice de dimension (30x30). Inversion de matrices [ par Stubbornman ] Bonjour a tous, Mon probleme est le suivant: je cherche à inverser une matrice de taille tres importante (environ 2000x2000), malheureusement, mon al copie par bloc d'une matrice avec vc++ [ par sousou_one ] salut,est ce que quelqu'un peut m'aider &#224; copier une matrice par bloc sous visual c++, sous Matlab je fais :N([0 : h],[0 : k]) = M([x : x+h],[y : matrice inverse [ par vladisback ] bonjour, j'utilise pour mes transformation des matrices 4x3: Xx Yx Zx Tx Xy Yy Zy Ty Xz Yz Zz Tz (Identique au matrice directX excepté une quatrieme Hessien d'une matrice [ par anne-lise ] Bonjour, je recherche des codes sources ou algorithmes simples pour calculer le Hessien d'une matrice donn&#233;e. Mercizezette Deplacement dans le repere de la Camera [ par xabila ] bonjour,voil&#224; j'ai une camera qui est defini avec un vec translation tx ty tzet une rotation h p rj'anrrive bien a recuperer la matrice 3*3 corre matrices et c++ [ par anne-lise ] Bonjour, je debute en c++ et j'ai quelques problemes avec les tableaux... D'abord, y a t'il un moyen d'avoir pour resultat d'une fonction un tableau ? Position et Orientation -> matrice 4*4 [ par xabila ] Bonjour, je voudrais savoir comment &#224; partir d'une position dans l'espace d'un objet avec son orientation, donc un vecteur 3f on arrive &#224; s Langage C(niveau débutant): tableaux et pointeurs [ par DeltaX ] Bonjour &#224; tous.J'ai trouv&#233; ce site par hazard et esp&#232;re que quelqu'un aura quelques secondes pour m'aider, mon niveau &#233;tant tr&#23


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales