Errore nell'algoritmo di Cholesky

di il
4 risposte

Errore nell'algoritmo di Cholesky

Buongiorno ragazzi, sto cercando di sviluppare l'algoritmo di Cholesky per la fattorizzazione di una matrice simmetrica definita positiva. Penso di averlo scritto bene, ma ho un problema nel risultato. La funzione che utilizzo è
int decomposizione(matrix a, matrix l, int n){
	int i,j,k;
	double sum;
	for (j=0; j<n; j++) {
       for (sum=k=0; k<j; k++) sum += l[j][k]*l[j][k];
       sum=a[j][j]-sum;
       l[j][j] = sqrt(sum);
       for (i=j+1; i<n; i++) {
           for (sum=k=0; k<j; k++) sum += l[i][k]*l[j][k];
           l[i][j]=(a[i][j]-sum)/l[j][j];
       }
   }
}
La matrice A è una matrice nxn simmetrica e attraverso questa funzione vado anche a verificare che sia definita positiva (ho tolto quelle righe in quanto futili al fine della mia domanda).
La funzione fa quello che deve fare, ma ogni volta che metto ad esempio una matrice 3x3 mette in posizione L[0][2] un numero a 38 cifre. Dove sto sbagliando?

4 Risposte

  • Re: Errore nell'algoritmo di Cholesky

    Adesso ho provato a compilarlo con un altro compilatore (fino a poco fa stavo usando Dev-C++, mentre ora ho usato online GDB) e non mi dà più lo stesso errore, anzi funziona perfettamente.
    Però adesso non capisco, per quale motivo da una parte va bene e dall'altra no?
  • Re: Errore nell'algoritmo di Cholesky

    Come hai definito il tipo matrix? Forse l'errore sta lì.
  • Re: Errore nell'algoritmo di Cholesky

    Typedef float matrix [SIZE][SIZE];
  • Re: Errore nell'algoritmo di Cholesky

    Intanto dichiara void decomposizione, non int che non hai nessun return value , poi presenta un minimo di programma completo altrimenti bisogna tirare a indovinare
Devi accedere o registrarti per scrivere nel forum
4 risposte