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

nomadstorm Messages postés 8 Statut Membre -  
nomadstorm Messages postés 8 Statut Membre -
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
Configuration: Windows 7 Internet Explorer 8.0

1 réponse

  1. nomadstorm Messages postés 8 Statut Membre 2
     
    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