Bonjour, voici un algorithme de decomposition LU ecrit en C avec les pointeur et retournant si la matrice carre d'entree est singuliere ou pas j'espere que ca sera utile :)
int LU_Decomp(double *A, int dim, double **LU ) { int singular=0; int i,j,k; double pivot,cumul,TINY=1.0e-40; int size=dim*dim; *LU=(double*)malloc(sizeof(double)*size); for(j=0;j<dim;j++) { for(i=0;i<=j;i++) { cumul=Get_Element(A,dim,i,j); for(k=0;k<i;k++) cumul-=(Get_Element(*LU,dim,i,k)*Get_Element(*LU, dim, k,j)); Set_Element(*LU, dim,i,j,cumul); } if(Get_Element(*LU,dim, j,j)==0) { Set_Element(*LU,dim, j,j,TINY); singular=1; }
pivot=Get_Element(*LU,dim,j,j); for(i=j+1;i<dim;i++) { cumul=Get_Element(A,dim,i,j); for(k=0;k<j;k++) cumul-=(Get_Element(*LU,dim,i,k)*Get_Element(*LU, dim, k,j)); cumul=cumul/pivot; Set_Element(*LU,dim,i,j,cumul); } } return singular; }
Aspirez toujours a meileur pour ateindre ses buts :-)
|