Aiuto prodotto matrici

di il
1 risposte

Aiuto prodotto matrici

Ciao a tutti ragazzi, chi mi spiega come funziona il prodotto tra matrici??
grazie a quanti mi aiuteranno!


posto un esempio:


public class Prodotto {
public static double [][] prodottoMatrici(double[][]A, double[][]B){
double[][]C=new double[A.length][A[0].length];
for(int i=0;i<A.length;i++)
for(int j=0;j<A[0].length;j++){
C[j]=0;
for(int k=0;k<A[0].length;k++)
C[j] +=A[k]*B[k][j];
}
return C;
}
public static void stampaMatrice(double[][]A) {
for(int i=0;i<A.length;i++) {
for(int j=0;j<A[0].length;j++) {
System.out.print(A[j]);
System.out.print(" ");
}
System.out.println();
}
}
public static void main(String[] args) {
double[][]A= {
{1.0,2.0,2.0},
{7.0,5.0,9.0},
{3.0,0.0,6.0}
};
double [][]B= {
{5.0,4.0,1.0},
{1.0,0.0,3.0},
{7.0,5.0,2.0}
};
double[][] C=prodottoMatrici(A,B);
stampaMatrice(C);
}
}


Chi sarebbe in grado di spiegarmela? grazie!

1 Risposte

  • Re: Aiuto prodotto matrici

    http://it.wikipedia.org/wiki/Moltiplicazione_di_matric, questo e' il link di wikipedia, il mio professore di matematica lo ha usato per disegnare la terza dimensione sul piano cartesiano e per modificare la forma di partenza( anzi forse era piu il piano di Gauss ).
    Intanto il codice da te presentato presume che in partenza si debbano avere 2 matrici identiche, infatti se guardi sul link di wiki usa 2 matrici diverse e il loro prodotto da una matrice che e' diversa dalle 2 di partenza.
    nel tuo caso la casella
    c[0][0]= somma( a[0][0]*b[0][0], a[0][1]*b[1][0]......)
    praticamente la somma dei prodotti della coppia di elementi della riga e colonna selezionata da c in quel momento.
    nel saso di
    c[2][3]=somma(a[2][0]*b[0][3], a[2][1]*b[1][3]......)
    infatti se controlli il codice la matrice c usa esclusivamente i contatori i, j quindi gli elementi vengono selezionato sequenzialmente, mentre A usa i, k, e B usa k, j, e per come e' impostato i e' l'indice di riga mentre j e' l'indice di colonna e il ciclo piu interno seleziona gli elementi della righa di A con indice i e tutti gli elementi della colonna di B con indice di colonna j.
    Annidare molti cicli interni diventa molto laborioso e difficilissimo da gestire volendo potresti fare la trasposta di B e creare un metodo in piu che ti fa il prodotto di di array.

    C[j] = prodottoArray( A, B[j] ) naturalmente dopo avere trasposta la B
    Il nome del metodo non sarebbe propriamente adatto dal momento che risulterebbe una somma del prodotto di lementi e il codice risulterebbe semplicemente

    for( int i=0; i<A.length; a++ )
    {
    somma += A*B;
    }

    in questo modo avresti spostato il ciclo piu interno in un metodo estreno e la gestione potrebbe diventare piu semplice.
Devi accedere o registrarti per scrivere nel forum
1 risposte