Detérminant et inverse d'une matrice en C++

Fermé
nomadstorm Messages postés 5 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 15 mai 2011 - 6 janv. 2010 à 13:47
nomadstorm Messages postés 5 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 15 mai 2011 - 13 janv. 2010 à 16:08
Bonsoir tout le monde
comment faire pour le déterminant et l'inverse sachant que j'ai fait le produit et la puissance



# include <iostream>
# include <cmath>
using namespace std;
/*lecture de deux matrices carrées*/
void lecture (double X[][10],int a)
{
int I,J;
for (I=0;I<a;I++)
for (J=0;J<a;J++)
{
cout<<"donner votre element "<<I<<" , "<<J<<endl;
cin>>X[I][J];
}
}
/* affichage de la matrice*/
void affichage(double X[][10],int a)
{
int I,J;
cout<<"votre matrice est la suivante:"<<endl;
for (I=0;I<a;I++)
{
for (J=0;J<a;J++)
cout<<X[I][J]<<" ";
cout<<endl;
cout<< " FIN "<<endl;
}
}
void produit(double X[][10],double Y[][10],double Z[][10],int a)
{
int I,J,K;
//initialisation de la matrice C
for (I=0;I<a;I++)
for (J=0;J<a;J++)
Z[I][J]=0;
// Calcul de la matrice C=A*B
for (I=0;I<a;I++)
for (J=0;J<a;J++)
for (K=0;K<a;K++)
Z[I][J]=Z[I][J]+X[I][K]*Y[K][J];
}
void puissance (double X[][10],double CB[][10],int a)
{
double Ck[10][10];
int i,j,k,L;
cout<<"donner la valeur de k pour caculer C^k"<<endl;
cin>>k;
for(i=0;i<a;i++)
for(j=0;j<a;j++)
Ck[i][j]=X[i][j];

for(L=1;L<k;L++)
{produit(X,Ck,CB,a);
for(i=0;i<a;i++)
for(j=0;j<a;j++)
Ck[i][j]=CB[i][j];
}
}
int main()
{
int n;
double A[10][10],B[10][10],C[10][10],CP[10][10];
cout<<"donnez la taille des matrices"<<endl;
cin>>n;
cout<<"lecture de la matrice A"<<endl;
lecture(A,n);
cout<<"lecture de la matrice B"<<endl;
lecture(B,n);
produit(A,B,C,n);
cout<<"affichage des elements de la matrice A "<<endl;
affichage( A,n);
cout<<"affichage des elements de la matrice B "<<endl;
affichage( B,n);
cout<<"affichage des elements de la matrice C "<<endl;
affichage(C,n);
puissance (C,CP,n);
cout<<"la matrice de puissance k "<<endl;
affichage(CP,n);
system("PAUSE");
return 0;

merci
A voir également:

1 réponse

nomadstorm Messages postés 5 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 15 mai 2011 2
13 janv. 2010 à 16:08
salut tout le monde
j'ai uneerreur dans l'affiche de resultat de determinant
j'arrive pas à la trouver
merci d'avance


# include <iostream>
# include <cmath>
using namespace std;
/*lecture de deux matrices carrées*/
void lecture (double X[][10],int a)
{
int I,J;
for (I=0;I<a;I++)
for (J=0;J<a;J++)
{
cout<<"donner votre element "<<I<<" , "<<J<<endl;
cin>>X[I][J];
}
}
/* affichage de la matrice*/
void affichage(double X[][10],int a)
{
int I,J;
cout<<"votre matrice est la suivante:"<<endl;
for (I=0;I<a;I++)
{
for (J=0;J<a;J++)
cout<<X[I][J]<<" ";
cout<<endl;
}
}
void produit(double X[][10],double Y[][10],double Z[][10],int a)
{
int I,J,K;
//initialisation de la matrice C
for (I=0;I<a;I++)
for (J=0;J<a;J++)
Z[I][J]=0;
// Calcul de la matrice C=A*B
for (I=0;I<a;I++)
for (J=0;J<a;J++)
for (K=0;K<a;K++)
Z[I][J]=Z[I][J]+X[I][K]*Y[K][J];
}
void puissance (double X[][10],double CB[][10],int a)
{
double Ck[10][10];
int i,j,k,L;
cout<<"donner la valeur de k pour caculer C^k"<<endl;
cin>>k;
for(i=0;i<a;i++)
for(j=0;j<a;j++)
Ck[i][j]=X[i][j];

for(L=1;L<k;L++)
{produit(X,Ck,CB,a);
for(i=0;i<a;i++)
for(j=0;j<a;j++)
Ck[i][j]=CB[i][j];
}
}

/*Cette fonction nous est utile dans le calcul du determinant, elle supprime dans
la matrice ma les lignes l et c puis enregistre les resultats dans mb*/
void det_aux(double ma[][10],double mb[][10],int l,int c)
{
int i,j,d,e=0;
for(i=0;i<10;i++)
{
d=0;
if(i!=l)
{
for(j=0;j<10;j++)
if(j!=c)
{
mb[e][d]=ma[i][j];
d++;
}
e++;
}
}
}
/*******************************************************************************/
/*Cette fonction teste si un entier est multiple de 2,
cette fonction nous sert dans le calcul du determinant*/
double expo(int n)
{
if(!(n%2)){return (1);}
return (-1);
}
/********************************************************************************/
/* Cette fonction calcul le determinant d'une matrice de maniere recursive*/
double determinant(double m[][10],int l)
{
int i;
double m2[10][10],x=0;
if(l==1)
{
return (m[0][0]);
}
for(i=0;i<l;i++)
{
det_aux(m,m2,i,0);
x=x+(expo(i)*m[i][0]*determinant(m2,(l-1)));
}
return (x);
}

int main()
{
int n;
double A[10][10],B[10][10],C[10][10],CP[10][10];
cout<<"donnez la taille des matrices"<<endl;
cin>>n;
cout<<"lecture de la matrice A"<<endl;
lecture(A,n);
cout<<"lecture de la matrice B"<<endl;
lecture(B,n);
produit(A,B,C,n);
cout<<"affichage des elements de la matrice A "<<endl;
affichage( A,n);
cout<<"affichage des elements de la matrice B "<<endl;
affichage( B,n);
cout<<"affichage des elements de la matrice C "<<endl;
affichage(C,n);
puissance (C,CP,n);
cout<<"la matrice de puissance k "<<endl;
affichage(CP,n);
cout<<"Le determinant de notre matrice C est :"<<endl;
determinant(C,n);
system("PAUSE");
return 0;
}
2