Fortran 真诚求教 “复系数方程组的全选主元高斯消去法”

Fortran 真诚求教 “复系数方程组的全选主元高斯消去法”
求解的程序有部分没看懂,下面就是此程序,代入自己要计算的内容运行会输出对话框显示“ERR**FAIL”,这是什么原因?
SUBROUTINE ACGAS(AR,AI,N,BR,BI,L,JS)
real*8 AR(N,N),AI(N,N),BR(N),BI(N),JS(N)
L=1
DO 100 K=1,N-1
E=0.0
DO 10 I=K,N
DO 10 J=K,N
P=AR(I,J)*AR(I,J)+AI(I,J)*AI(I,J)
IF (P.GT.E) THEN
E=P
JS(K)=J
IS=I
END IF
10 CONTINUE
W=E
IF (W+1.0.EQ.1.0) THEN
WRITE(*,20)
L=0
RETURN
END IF
20 FORMAT(1X,' ERR**FAIL ')
DO 30 J=K,N
P=AR(K,J)
AR(K,J)=AR(IS,J)
AR(IS,J)=P
P=AI(K,J)
AI(K,J)=AI(IS,J)
AI(IS,J)=P
30 CONTINUE
P=BR(K)
BR(K)=BR(IS)
BR(IS)=P
P=BI(K)
BI(K)=BI(IS)
BI(IS)=P
DO 50 I=1,N
P=AR(I,K)
AR(I,K)=AR(I,JS(K))
AR(I,JS(K))=P
P=AI(I,K)
AI(I,K)=AI(I,JS(K))
AI(I,JS(K))=P
50 CONTINUE
DO 60 J=K+1,N
P=AR(K,J)*AR(K,K)
Q=-AI(K,J)*AI(K,K)
S=(AR(K,K)-AI(K,K))*(AR(K,J)+AI(K,J))
AR(K,J)=(P-Q)/E
AI(K,J)=(S-P-Q)/E
60 CONTINUE
P=BR(K)*AR(K,K)
Q=-BI(K)*AI(K,K)
S=(AR(K,K)-AI(K,K))*(BR(K)+BI(K))
BR(K)=(P-Q)/E
BI(K)=(S-P-Q)/E
DO 90 I=K+1,N
DO 80 J=K+1,N
P=AR(I,K)*AR(K,J)
Q=AI(I,K)*AI(K,J)
S=(AR(I,K)+AI(I,K))*(AR(K,J)+AI(K,J))
AR(I,J)=AR(I,J)-P+Q
AI(I,J)=AI(I,J)-S+P+Q
80 CONTINUE
P=AR(I,K)*BR(K)
Q=AI(I,K)*BI(K)
S=(AR(I,K)+AI(I,K))*(BR(K)+BI(K))
BR(I)=BR(I)-P+Q
BI(I)=BI(I)-S+P+Q
90 CONTINUE
100CONTINUE
E=AR(N,N)*AR(N,N)+AI(N,N)*AI(N,N)
W=E
IF (W+1.0.EQ.1.0) THEN
L=0
WRITE(*,20)
RETURN
END IF
P=AR(N,N)*BR(N)
Q=-AI(N,N)*BI(N)
S=(AR(N,N)-AI(N,N))*(BR(N)+BI(N))
BR(N)=(P-Q)/E
BI(N)=(S-P-Q)/E
DO 200 I=N-1,1,-1
DO 150 J=I+1,N
P=AR(I,J)*BR(J)
Q=AI(I,J)*BI(J)
S=(AR(I,J)+AI(I,J))*(BR(J)+BI(J))
BR(I)=BR(I)-P+Q
BI(I)=BI(I)-S+P+Q
字数限制 只能复制这么多了
ii船长 1年前 已收到1个回答 举报

lip17_2002 幼苗

共回答了18个问题采纳率:88.9% 举报

系数矩阵奇异了,也就是在计算过程中找到的最大元素的模为零.
如果确认解方程组的程序没问题,建议查系数矩阵,看矩阵是否有错误

1年前 追问

5

ii船长 举报

谢谢你,我这种算法有问题,我换了一种,还有一个问题,就是我要处理一个复数矩阵,矩阵中每一个复数的实部和虚部都有相应的实部和虚部矩阵,该怎么讲实部、虚部导入到复数矩阵呢?就是表示成(X,Y)的形式,因为有好多数据,所有有没有批量的方法?谢谢!

举报 lip17_2002

用DO 循环,将所有元素赋值一遍
do i=1,n
do j=1,n
a(i,j)=dcmplx(ar(i,j),ai(i,j))
enddo
enddo
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.031 s. - webmaster@yulucn.com