回 帖 发 新 帖 刷新版面

主题:请问各位,怎么定义一个复数矩阵,每个矩阵元是一个小函数。要把子程序的结果代入主程序中

COMPLEX*8 BR(4,4)
COMPLEX*8 BL(4,4)
call sub()
data BL/(0.0,0.0),(0.0,-0.5*PL),(h1,0.5*NL),(-0.5*NL,0.0),&
     (0.0,0.5*PL),(0.0,0.0),(-0.5*NL,0.0),(h1,-0.5*NL),&
     (-h1,-0.5*NL),(0.5*NL,0.0),(0.0,0.0),(0.0,-0.5*PL),&
     (0.5*NL,0.0),(-h1,0.5*NL),(0.0,0.5*PL),(0.0,0.0)/

data BR/(0.0,0.0),(0.0,-0.5*PR),(h2,0.5*NR),(-0.5*NR,0.0),&
     (0.0,0.5*PR),(0.0,0.0),(-0.5*NR,0.0),(h2,-0.5*NR),&
     (-h2,-0.5*NR),(0.5*NR,0.0),(0.0,0.0),(0.0,-0.5*PR),&
     (0.5*NR,0.0),(-h2,0.5*NR),(0.0,0.5*PR),(0.0,0.0)/
    
    
subroutine sub()

INTEGER GL1,GR1,TL,TR
real h1,h2,e
REAL*8 GL2,GR2,PL,NL,PR,NR
e=2.71828
h1=1.5
h2=1.5
GL1=1.0
GR1=1.0
TL=10
TR=5.0

GL2=GL1*(e**(-2.0*h1/TL))
GR2=GR1*(e**(-2.0*h2/TR))
pL=GL2+GL1
NL=GL2-GL1
PR=GR2+GR1
NR=GR2-GR1
write(*,'(1x,F6.3)')  PL
write(*,'(1x,F6.3)')  NL
write(*,'(1x,F6.3)')  PR
write(*,'(1x,F6.3)')  NR
stop
end
endsubroutine sub

回复列表 (共5个回复)

沙发

楼主, 你的程序这么写是不对的, 先看看函数, 子程序是怎么调用的吧.
至于后面 data 是属性, 不应该放在运行区. 一个个矩阵元赋值就是了(有规律可以考虑用判断语句,循环这些辅助)

板凳


谢谢你啊,我是初学者,好多都不会,我最近又遇到一个问题,怎么把子程序里的结果调出来,用到主程序里面

3 楼

"把子程序里的结果调出来,用到主程序里面"  所以先看看书里面关于子函数,子程序是如何调用的. 那才值得计算结果怎么传递进去然后传递结果出来. 你楼顶的代码对sub的调用就不对(除非你还有部分代码没贴出来), 你主程序要的值没有从子程序里面获得.

4 楼


哈哈,谢谢你啦,我已经把这个问题解决啦,看看这个初次编的代码,觉得好粗糙好多错误,呵呵~~

5 楼

能自己解决问题是最好的, 这样其实学到更多.

我来回复

您尚未登录,请登录后再回复。点此登录或注册