[Fortran] Prodotto di due matrici.
Buongiorno,
il professore ha chiesto un algoritmo per il prodotto di matrici, il quale ho fatto è funziona. Inoltre ha chiesto una subroutine riguardante l'algoritmo proprio per il prodotto di matrici.
Ho sviluppato l'algoritmo "programma chiamante" e "subroutine" , li mando in esecuzione e non si presentano errori. Inserisco i dati e mi da diversi errori !!
Ora non so come procedere, non riesco ad individuare l'errore, vi posto i due algoritmi:
Programma chiamante :
Subroutine:
Se possono ritornare utili, ho riportato i dati inseriti dal prof. per la testata della subroutine.
DATI:
SUBROUTINE MATMAT(A, B, C, N, M, L, LDA, LDB, LDC)
A: matrice di N righe e M colonne (reale, input)
B: matrice di M righe e L colonne (reale, input)
C: matrice risultato (reale, output)
N: numero di righe di A (intero, input)
M: numero di colonne di A e righe di B (intero, input)
L: numero di colonne di C (intero, input)
LDA: leading dimension di A (intero, input)
LDB: leading dimension di B (intero, input)
LDC: leading dimension di C (intero, input)
Buona giornata.
il professore ha chiesto un algoritmo per il prodotto di matrici, il quale ho fatto è funziona. Inoltre ha chiesto una subroutine riguardante l'algoritmo proprio per il prodotto di matrici.
Ho sviluppato l'algoritmo "programma chiamante" e "subroutine" , li mando in esecuzione e non si presentano errori. Inserisco i dati e mi da diversi errori !!
Ora non so come procedere, non riesco ad individuare l'errore, vi posto i due algoritmi:
Programma chiamante :
program prodottomatrici real:: X(10,10),Y(10,10),Z(10,10) integer:: i,j,n,m,p,k read*, n,m,p,k do i =1,n do j=1,m read*, X(i,j) end do end do do i=1,m do j=1,p read*, Y(i,j) end do end do CALL MATMAT (X,Y,N,M,10,10,Z) do i =1,n do j=1,m print*, Z(i,j) end do end do end
Subroutine:
SUBROUTINE MATMAT (A,B,C,N,M,L,LDA,LDB,LDC) REAL:: A(LDA,N),B(LDB,M),C(LDC,L) INTEGER:: N,M,L,LDA,LDB,LDC,I,J DO I=1,N DO J=1,M C(I,J)=0 C(I,J)=C(I,J)+A(I,M)*B(M,J) END DO END DO END
Se possono ritornare utili, ho riportato i dati inseriti dal prof. per la testata della subroutine.
DATI:
SUBROUTINE MATMAT(A, B, C, N, M, L, LDA, LDB, LDC)
A: matrice di N righe e M colonne (reale, input)
B: matrice di M righe e L colonne (reale, input)
C: matrice risultato (reale, output)
N: numero di righe di A (intero, input)
M: numero di colonne di A e righe di B (intero, input)
L: numero di colonne di C (intero, input)
LDA: leading dimension di A (intero, input)
LDB: leading dimension di B (intero, input)
LDC: leading dimension di C (intero, input)
Buona giornata.
Risposte
Non c'è nessuno che mi può illuminare

Le dimensioni che hai scritto per le matrici non sono corrette.. Dovrebbero essere A(LDA, M), B(LDB, L), C(LDC, L). La moltiplicazione matriciale ha inoltre bisogno di 3 indici. Qualcosa come segue insomma:
DO I=1,N DO J=1,L C(I,J)=0 DO K=1,M C(I,J) = C(I,J) + A(I,K) * B(K, J) END DO END DO END DO