Ho un problema: come posso Scrivere un programma (in qualsiasi linguaggio) che sia in grado di Moltiplicare due matrici(in modo ottimo).
:master:
Ho un problema: come posso Scrivere un programma (in qualsiasi linguaggio) che sia in grado di Moltiplicare due matrici(in modo ottimo).
:master:
Questo è il metodo che fa il prodotto.codice:static int [] Prodotto(int m[][],int n[][]){ int p[]=new int [n.length]; for(int i=0;i<m.length;i++) for(int j=0;j<m[i].length;j++){ for(int z=0;z<n.length;z++) p[z]+=n[i][j]*m[i][j]; } return p; }
Lang=Java
Ambiente = Eclipse forever
Ubuntu& Win XP Pro
Il risultato del prodotto tra due matrici e' ancora una matrice.
Inoltre per fare il prodotto tra due matrici e' necessario che il numero delle colonne della matrice A sia uguale al numero delle righe della matrice B.
Ad esempio:
Matrice A formata da m righe e n colonne
Matrice B formata da n righe e m colonne
Il risultato sara':
Matrice C (quadrata) formata da m righe e m colonne
Ultima considerazione: il prodotto matriciale non e' commutativo, per cui A*B e' diverso da B*Acodice:int m = A.lenght;//righe di A int n = B.lenght;//righe di B C[][] = new int[m][m]; //inizializzare C a 0 for(int i=0; i<m; i++) for(int j=0; j<m; j++) for(int k=0; k<n; k++) C[i][j]+=A[i][k] * B[k][j];
Ciao,
Lorenzo
Ma che stronzata ho scritto :master: :master:Originariamente inviato da Zero-2
Questo è il metodo che fa il prodotto.codice:static int [] Prodotto(int m[][],int n[][]){ int p[]=new int [n.length]; for(int i=0;i<m.length;i++) for(int j=0;j<m[i].length;j++){ for(int z=0;z<n.length;z++) p[z]+=n[i][j]*m[i][j]; } return p; }
Ho letto prodotto e l'ho incollato senza nemmeno controllare
Scusa RmiMik
Ha pienamente ragione lelefante![]()
Lang=Java
Ambiente = Eclipse forever
Ubuntu& Win XP Pro
Solo una correzione.. Il prodotto e` valido per matrici non solo del tipo:
Mmn * Mnm = Mmm
Ma in generale:
Mmn * Mnp = Mmp
Nulla di che, di sicuro il dettaglio dimenticato e` dovuto ad una insignificante distrazione.
Ciao.
Hai ragione tu, righe di A e colonne di B non devono essere necessariamente uguali...l'errore e' dovuto al fatto che Geometria non era tra le mie materie preferiteSolo una correzione.. Il prodotto e` valido per matrici non solo del tipo:
Mmn * Mnm = Mmm
Ma in generale:
Mmn * Mnp = Mmp
Nulla di che, di sicuro il dettaglio dimenticato e` dovuto ad una insignificante distrazione.
Correzione codice:
Ora dovrebbe essee giusto...grazie per la correzionecodice:int m = A.length;//righe di A int n = B.length;//righe di B int p = B[0].length; //colonne di B C[][] = new int[m][p]; //inizializzare C a 0 for(int i=0; i<m; i++) for(int j=0; j<p; j++) for(int k=0; k<n; k++) C[i][j]+=A[i][k] * B[k][j];![]()
Ciao,
Lorenzo
Hm, non e` malaccio .. ma devo farla dopodomani!![]()
A proposito di matrici...
Sepete dirmi qualcosa su questo?
http://forum.html.it/forum/showthrea...hreadid=376949
Blink@go
"Non tutto quel che è oro brilla, Ne gli erranti sono perduti; Il vecchio ch'è forte non s'aggrinza, Le radici profonde non gelano.Dalle ceneri rinascerà un fuoco, L'ombra sprigionerà una scintilla, Nuova sarà la lama ormai rotta, E re quei ch'è senza corona."
------------
Lang: java 1.4.1 Eclipse
Per una matrice 2D potrei anche mettermici, ma per una 3D non saprei proprio. A dire il vero non so nemmeno come e' definito il determinante di una matrice 2D.
Ciao,
Lorenzo
Per le 2D e` facile. Lo feci ere fa.Il metodo funziona pero` e` una ciofeca e di cattivo esempio
, quindi se vuoi te lo posto in privato.
La definizione viene dal 1° teorema di Laplace. Il determinante e` definito _solo_ per matrici quadrate.
In pratica si seleziona una riga/colonna (a piacere), e si sommano i prodotti degli elementi di tale riga/colonna per i rispettivi complementi algebrici. Il complemento algebrico, per chi non lo sapesse, e` il determinante della sottomatrice ottenuta eliminando la riga i-esima e la colonna j-esima moltiplicato per (-1) alla i+j. Naturalmente e` ricorsivo, e si arriva a calcolare il determinante di una matrice 1x1, che e` l`elemento stesso.
Io sul fatto delle matrici 3D indugio ancora, anche perche` una matrice e` cmq una tabella con righe e colonne. Non ho mai sentito parlare di "dimensione" di una matrice. In realta`, parlare di "matrici 2D" e` una cosa scorretta, si dovrebbe parlare di "vettori 2D", ed un vettore 2D e` una matrice. Un vettore 3D, invece, e supposto che esista come concetto quantomeno vicino al calcolo matriciale, che cos`e`?
Matematici, A NOI!
Ciao.