Errore nell'algoritmo di Cholesky

di Anonimizzato31680 il
4 risposte
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

  • 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?
  • Come hai definito il tipo matrix? Forse l'errore sta lì.
  • Typedef float matrix [SIZE][SIZE];
  • 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