|
|
★ 小木虫: 金币+0.5, 给个红包,谢谢回帖
前辈您好,我写了一个计算复数矩阵行列式的小程序,出现错误了,望前辈指点!
SUBROUTINE CDET(A,N,DET)
USE MSIMSL
IMPLICIT INTEGER*4 (I-N)
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 A(N,N),DET
DIMENSION RAR(N,N),RAI(N,N)
REAL*8 SS
!C=====================================================================
RAR=DREAL(A)
RAI=DIMAG(A)
F =1.0
DET=1.0
!C=====================================================================
DO L=1,N-1
RD=0.0
DO I=L,N
!C=====================================================================
DO J=L,N
!C---------------------------------------------------------------------
RM=RAR(I,J)*RAR(I,J)+RAI(I,J)*RAI(I,J)
!C---------------------------------------------------------------------
IF (RM.GT.RD) THEN
RD=RM
IS=I
JS=J
END IF
!C---------------------------------------------------------------------
ENDDO
ENDDO
!C=====================================================================
IF (RD+1.0.EQ.1.0) THEN
DET=0.0
RETURN
END IF
!C=====================================================================
IF (IS.NE.L) THEN
F=-F
!C---------------------------------------------------------------------
DO J=L,N
P=RAR(L,J)
RAR(L,J)=RAR(IS,J)
RAR(IS,J)=P
P=RAI(L,J)
RAI(L,J)=RAI(IS,J)
RAI(IS,J)=P
ENDDO
!C---------------------------------------------------------------------
ENDIF
!C=====================================================================
IF (JS.NE.L) THEN
F=-F
!C---------------------------------------------------------------------
DO I=L,N
P=RAR(I,L)
RAR(I,L)=RAR(I,JS)
RAR(I,JS)=P
P=RAI(I,L)
RAI(I,L)=RAI(I,JS)
RAI(I,JS)=P
ENDDO
!C---------------------------------------------------------------------
END IF
DET=DET*DCMPLX(RAR(L,L),RAI(L,L))
!C=====================================================================
DO J=L+1,N
P=RAR(L,J)*RAR(L,L)
Q=-RAI(L,J)*RAI(L,L)
SS=(RAR(L,L)-RAI(L,L))*(RAR(L,J)+RAI(L,J))
RAR(L,J)=(P-Q)/RD
RAI(L,J)=(SS-P-Q)/RD
ENDDO
DO I=L+1,N
DO J=L+1,N
P=RAR(I,L)*RAR(L,J)
Q=RAI(I,L)*RAI(L,J)
SS=(RAR(I,L)+RAI(I,L))*(RAR(L,J)+RAI(L,J))
RAR(I,J)=RAR(I,J)-P+Q
RAI(I,J)=RAI(I,J)-SS+P+Q
ENDDO
ENDDO
!C---------------------------------------------------------------------
ENDDO
!C=====================================================================
DET=F*DET*DCMPLX(RAR(N,N),RAI(N,N))
RETURN
END SUBROUTINE
!C=====================================================================
错误为Error: The shapes of the array expressions do not conform. [DET]
请您看一下,万分感谢! |
|