Soyez le premier à donner votre avis sur cette source.
Snippet vu 74 535 fois - Téléchargée 30 fois
#include <iostream> #include <cmath> using namespace std; void lmatrice(double mat[],double lmat[], int n, int l); double det(double mat[], int n); int main() { //exemple d'utilisation pour une matrice 2x2 int dim=2; double *M=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; //determinant de la matrice M double resultat; resultat=det(M,dim); //affichage du resultat cout<<resultat<<endl; } void lmatrice(double mat[],double lmat[], int n, int l) { int ld=0; int k=n-1; for(int i=0;i<n;i++) { if(i!=l) { for(int j=1;j<n;j++) { lmat[ld+(j-1)*k]=mat[i+j*n]; } ld++; } } } double det(double mat[], int n) { double resultat; resultat=0.; int k=n-1; double signe; signe=1.; double *lmat=new double[k*k]; if(n==1) { return mat[0]; } for(int i=0;i<n;i++) { lmatrice(mat,lmat,n,i); resultat=resultat+signe*mat[i]*det(lmat,k); signe=-signe; } return resultat; delete(lmat); }
double MatriceCarree::det()
{
MatriceCarree a(*this);
double prod = 1.0;
for(int i=0;i<nbrL;i++)
{
int max = i;
for(int j=i+1;j<nbrL;j++)
if(fabs(a.p[j*nbrC+i]) > fabs(a.p[max*nbrC+i]))
max = j;
if(fabs(a.p[max*nbrC+i]) < epsilon)
return 0.0;
if(i != max)
prod *= -1;
for(int k=i;k<nbrC;k++)
swap(a.p[i*nbrC+k],a.p[max*nbrC+k]);
for(int j=i+1;j<nbrL;j++)
{
double coef = a.p[j*nbrC+i]/a.p[i*nbrC+i];
for(int k=nbrC-1;k>=i;k--)
a.p[j*nbrC+k] -= coef*a.p[i*nbrC+k];
}
}
for(int i=0;i<nbrL;i++)
prod *= a.p[i*nbrC+i];
if(fabs(prod) < epsilon)
return 0.0;
else
return prod;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.