[Fortran] Prodotto di due matrici.

galles90
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 :

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
galles90
Non c'è nessuno che mi può illuminare :roll:

apatriarca
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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.