View Single Post
Old 29-05-2011, 22:04   #7
BlackShark92
Member
 
Iscritto dal: May 2011
Messaggi: 39
Quote:
Originariamente inviato da Lazy Bit Guarda i messaggi
In teoria si potrebbe allocare un unico blocco, utilizzando un normale puntatore, come ha fatto Devil Prince, ma nel caso le matrici contenessero parecchi elementi, sarebbe difficile trovare un intero blocco di grandi dimensioni. Invece, utilizzando i puntatori a puntatori, i blocchi sarebbero di dimensioni ridotte e meglio gestibili (utilizzando la notazione matrix[i][j]).

Comunque, anche se ciò non risolverà il problema, la formula per il calcolo del prodotto di matrici è scorretta, perché la matrice prodotto è C[M, N], non C[M, P]. Quindi la formula corretta sarà la seguente:

Codice:
for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
        {
            for(k = 0; k < m; k++)
            {
                c[i][j] = a[i][k] * b[k][j];
            }
        }
    }
L'inizializzazione della matrice a zero non è necessaria. Appena avrò un po' di tempo, inserirò l'algoritmo completo.
Ti manca un più lì...l'elemento c[i][j]esimo è dato dalla somma di quei prodotti lì...
Ecco qua
Codice:
int matXmatt(double **matrice1, int nrighe1, int ncolon1, double **matrice2, int nrighe2, int ncolon2, double **res) {
    int i, j, k;
    if (ncolon1!=nrighe2) return -1;
    else {for (i=0; i<nrighe1; i++) {
            for (j=0; j<ncolon2; j++) { res[i][j]= 0.0;
                                        for (k=0; k<ncolon1; k++)
                                        res[i][j]+= matrice1[i][k]*matrice2[k][j];
            }
                                    }
    return 0;
    }
}
Ho messo anche il controllo per gli errori
BlackShark92 è offline   Rispondi citando il messaggio o parte di esso