1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| double ** L = Choleski(R,m);
/* Pour alléger, tout le contenu du main n'est pas affiché.
Ici, je travaille un peu sur le tableau R, j'assigne des valeurs
à tous ses éléments avant de l'expédier à la fonction Choleski,
fonction source de mon problème vraisemblablement. */
double ** Choleski(int ** A, int m)
{
int i, j, k;
double sum;
double ** L = malloc(m*sizeof(double*));
for ( k=0 ; k<m ; k++ ) { L[k]=malloc(m*sizeof(double)); }
// Initialization of L (0 above the diagonal of the matrix)
for ( j=1 ; j<m ; j++ )
{
for ( i=0 ; i<j ; i++ ) { L[i][j]=0.0; }
}
// First colum of L
L[0][0] = sqrt((double)A[0][0]);
printf("%e\n",A[0][0]); /* CE PRINTF AFFICHE UN NOMBRE EN 10^-314 */
for ( j=1 ; j<m ; j++ )
{
L[j][0] = ((double)A[0][j])/L[0][0];
}
// Other columns
for ( i=1 ; i<m ; i++ )
{
printf("%d iterations remaining for Choleski-descomposition of RP.\n",m-1-i);
sum=0.0;
for ( k=0 ; k<i ; k++ ) { sum += pow(L[i][k],2.0); }
L[i][i] = sqrt(((double)A[i][i])-sum);
for ( j=i+1 ; j<m ; j++ )
{
sum=0.0;
for ( k=0 ; k<i ; k++ ) { sum += L[i][k]*L[j][k]; }
L[j][i] = (((double)A[i][j])-sum)/L[i][i];
}
}
return L;
} |
Partager