DESIGN STUDIO FORUM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
PortailAccueilRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
SSD interne Crucial BX500 2,5″ SATA – 500 Go à 29,99€
29.99 €
Voir le deal

 

 ALGORITHME DE GAUSS-JORDAN

Aller en bas 
AuteurMessage
Admin
Admin
Admin


Masculin
Nombre de messages : 138
Age : 38
Date d'inscription : 02/09/2006

ALGORITHME DE GAUSS-JORDAN Empty
MessageSujet: ALGORITHME DE GAUSS-JORDAN   ALGORITHME DE GAUSS-JORDAN EmptyMer 13 Sep - 5:28

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.


Code:
#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);
}
Revenir en haut Aller en bas
https://design.jeun.fr
 
ALGORITHME DE GAUSS-JORDAN
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Algorithme d'Euclide
» ALGORITHME MOVE TO FRONT (MTF)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
DESIGN STUDIO FORUM :: programmation :: C,C++-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser