Bonjours,
Je suis un débutant en fortran et je n'arrive pas a comparer des matrices dans un if en fortran. Est-ce que c'est parceque on ne peux pas ?
voila mon programme et les erreurs de compilation :

Program estdrazin
IMPLICIT NONE
INTEGER, PARAMETER :: N=4
REAL, DIMENSION (N,N) :: Ad=RESHAPE((/1,-1,-1,1,0,-2,0,0,1,-5,-2,2,1,-7,-3,3/),(/4,4/))
REAL, DIMENSION (N,N) :: A=RESHAPE((/1,1,1,-1,0,0,0,0,1,1,0,0,1,-1,-1,1/),(/4,4/))
REAL, DIMENSION (N,N) :: I=RESHAPE((/1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1/),(/4,4/))
REAL, DIMENSION (N,N) :: Z=RESHAPE((/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/),(/4,4/))
REAL, DIMENSION (N,N) :: Ak, AdA, AkAdA, AdAAd, AAd
INTEGER :: k=0, verif=0


print*, 'A='
Call AFFICHE(A)
print*, 'Ad='
Call AFFICHE(Ad)

Ak=A
Ak=matmul(Ak,A)
AdA=matmul(Ad,A)

if((AdA-I).eq.Z) then
print*, 'L''indice de la matrice est :', k
else
k=k+1
do while ((k.lt.10).and.(verif.eq.0))
Ak=matmul(Ak,A)
AdA=matmul(Ad,A)
AkAdA=matmul(Ak,AdA)
if(AkAdA.eq.Ak) then
AdAAd=matmul(AdA,Ad)
if(AdAAd.eq.Ad) then
AAd=matmul(A,Ad)
if(AAd.eq.AdA) then
Print*, 'Ad est bien l''inverse de Drazin de A'
print*, 'L''indice de la matrice est :', k
endif
endif
verif=1
else
k=k+1
endif
end do
endif

CONTAINS
!FUNCTION MATMAT(A,B)
! integer :: i, j, k
! REAL, DIMENSION (N,N) :: A, B
!
! MATMAT=0
! Do i=1,N
! do j=1,N
! do k=1,N
! MATMAT(i,j)=MATMAT(i,j)+A(i,k)*B(k,j)
! end do
! end do
! end do
! END FUNCTION MATMAT


SUBROUTINE AFFICHE (A)

REAL, DIMENSION (:, :: A
INTEGER :: M,N,I,J
CHARACTER*6 :: FMT='(F7.3)'
M=SIZE(A,1)
N=SIZE(A,2)


DO I = 1,M
DO J = 1,N-1
WRITE (6,FMT,ADVANCE='NO') A(I,J)
END DO
WRITE (6,FMT,ADVANCE='YES') A(I,N)
END DO
END SUBROUTINE AFFICHE

end program estdrazin




et les erreurs :

if((AdA-I).eq.Z) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression
estdrazin.f90:29.6:

if(AkAdA.eq.Ak) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression
estdrazin.f90:31.7:

if(AdAAd.eq.Ad) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression
estdrazin.f90:33.8:

if(AAd.eq.AdA) then
1
Error: IF clause at (1) requires a scalar LOGICAL expression