找回密码
 注册
Simdroid-非首页
查看: 158|回复: 3

[1. Algorithm] 【求助】复系数方程组求解

[复制链接]
发表于 2004-9-5 14:44:35 | 显示全部楼层 |阅读模式 来自 武汉大学
大侠能不能给个例子或思路,复数编程没用过啊
发表于 2004-9-5 21:44:21 | 显示全部楼层 来自 浙江杭州

回复: 【求助】复系数方程组求解

Simdroid开发平台
如果是线性方程组的话,维数小且非奇异的情况下可以直接解或者求逆
维数大的话则是先分块再用迭代算法
  
这是一个fortran的求逆的例子(from smth)
1。功能:采用全选主元Gauss-Jordan法求复数矩阵的逆矩阵
2。形参说明:
AR,AI---均为双精度实数二纬数组,体积为(N,N),输入兼输出参数
调用时分别存放原复矩阵的实部与虚部;返回逆矩阵的实波与虚部
N :  整形变量,输入参数。矩阵阶数
L:整形变量,输出参数。如L=0,说明矩阵奇异,求逆失败;如L不等于0
说明正常返回。
IS,JS:都为整形一纬数组,长度为N。
  SUBROUTINE BCINV(AR,AI,N,L,IS,JS)
  DIMENSION AR(N,N),AI(N,N),IS(N),JS(N)
  DOUBLE PRECISION AR,AI,D,P,T,Q,S,B
  L=1
  DO 100 K=1,N
  D=0.0
  DO 10 I=K,N
  DO 10 J=K,N
 &nbsp=AR(I,J)*AR(I,J)+AI(I,J)*AI(I,J)
  IF (P.GT.D) THEN
  D=P
  IS(K)=I
  JS(K)=J
  ENDIF
10     CONTINUE
       IF (D+1.0.EQ.1.0) THEN
  L=0
  WRITE(*,20)
  RETURN
  END IF
20    FORMAT(1X,'ERR**NOT INV')
       DO 30 J=1,N
       T=AR(K,J)
  AR(K,J)=AR(IS(K),J)
  AR(IS(K),J)=T
  T=AI(K,J)
  AI(K,J)=AI(IS(K),J)
  AI(IS(K),J)=T
30    CONTINUE
       DO 40 I=1,N
  T=AR(I,K)
  AR(I,K)=AR(I,JS(K))
  AR(I,JS(K))=T
  T=AI(I,K)
  AI(I,K)=AI(I,JS(K))
  AI(I,JS(K))=T
40    CONTINUE
      AR(K,K)=AR(K,K)/D
  AI(K,K)=-AI(K,K)/D
  DO 50 J=1,N
  IF (J.NE.K) THEN
  P=AR(K,J)*AR(K,K)
  Q=AI(K,J)*AI(K,K)
  S=(AR(K,J)+AI(K,J))*(AR(K,K)+AI(K,K))
  AR(K,J)=P-Q
  AI(K,J)=S-P-Q
  ENDIF
50    CONTINUE
      DO 70 I=1,N
  IF (I.NE.K) THEN
  DO 60 J=1,N
  IF (J.NE.K) THEN
  P=AR(K,J)*AR(I,K)
  Q=AI(K,J)*AI(I,K)
  S=(AR(K,J)+AI(K,J))*(AR(I,K)+AI(I,K))
  T=P-Q
  B=S-P-Q
  AR(I,J)=AR(I,J)-T
  AI(I,J)=AI(I,J)-B
  ENDIF
60    CONTINUE
       ENDIF
70    CONTINUE
  
  DO 80 I=1,N
  IF (I.NE.K) THEN
  P=AR(I,K)*AR(K,K)
  Q=AI(I,K)*AI(K,K)
  S=(AR(I,K)+AI(I,K))*(AR(K,K)+AI(K,K))
  AR(I,K)=Q-P
  AI(I,K)=P+Q-S
  ENDIF
80    CONTINUE
100   CONTINUE
      DO 130 K=N,1,-1
  DO 110 J=1,N
  T=AR(K,J)
  AR(K,J)=AR(JS(K),J)
  AR(JS(K),J)=T
  T=AI(K,J)
  AI(K,J)=AI(JS(K),J)
  AI(JS(K),J)=T
110   CONTINUE
  
  DO 120 I=1,N
  T=AR(I,K)
  AR(I,K)=AR(I,IS(K))
  AR(I,IS(K))=T
  T=AI(I,K)
  AI(I,K)=AI(I,IS(K))
  AI(I,IS(K))=T
120   CONTINUE
130   CONTINUE
      RETURN
  END
 楼主| 发表于 2004-9-6 15:36:59 | 显示全部楼层 来自 武汉大学

回复: 【求助】复系数方程组求解

谢谢bzzz的热心帮助,还想请教你一个问题:带有复指数的表达式求积分可否用fortran77 算法手册(何光渝主编)里面的高斯积分来求解。
发表于 2004-9-6 17:16:15 | 显示全部楼层 来自 浙江杭州

回复: 【求助】复系数方程组求解

sorry
没有用过,帮不了你 ^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 01:33 , Processed in 0.054110 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表