greenfunction 发表于 2016-1-13 10:59:39

如何将徐士良程序集中的多重积分程序改写成一个完整的...

请问如何将下面(徐士良程序集)高斯方法计算多重积分的程序,改写成只有一个主程序,而不是源程序中的由主程序+子程序组成的形式? 谢谢
EXTERNAL FS,F
DIMENSION JS(3),X(3)
DOUBLE PRECISION F,S,X
DATA JS/4,4,4/
N=3
CALL FGAUS(N,JS,X,FS,F,S)
WRITE(*,10) S
10 FORMAT(1X,'S=',D13.6)
END
SUBROUTINE FS(J,N,X,DN,UP)
DIMENSION X(N)
DOUBLE PRECISION X,DN,UP,Q
IF (J.EQ.1) THEN
   DN=0.0
   UP=1.0
ELSE IF (J.EQ.2) THEN
   DN=0.0
   UP=SQRT(1.0-X(1)*X(1))
ELSE IF (J.EQ.3) THEN
   Q=X(1)*X(1)+X(2)*X(2)
   DN=SQRT(Q)
   UP=SQRT(2.0-Q)
END IF
RETURN
END
FUNCTION F(N,X)
DIMENSION X(N)
DOUBLE PRECISION F,X
F=X(3)*X(3)
RETURN
END

SUBROUTINE FGAUS(N,JS,X,FS,F,S)
DIMENSION JS(N),X(N)
DIMENSION T(5),C(5),D(2,11),CC(11),IS(2,11)
DOUBLE PRECISION X,F,S,T,C,D,CC,DN,UP,P
DATA T/-0.9061798459,-0.5384693101,0.0,
   *         0.5384693101,0.9061798459/
DATA C/0.2369268851,0.4786286705,0.5688888889,
   *         0.4786286705,0.2369268851/
M=1
D(1,N+1)=1.0
D(2,N+1)=1.0
10 DO 20 J=M,N
   CALL FS(J,N,X,DN,UP)
   D(1,J)=0.5*(UP-DN)/JS(J)
   CC(J)=D(1,J)+DN
   X(J)=D(1,J)*T(1)+CC(J)
   D(2,J)=0.0
   IS(1,J)=1
   IS(2,J)=1
20 CONTINUE
J=N
30 K=IS(1,J)
IF (J.EQ.N) THEN
   P=F(N,X)
ELSE
   P=1.0
END IF
D(2,J)=D(2,J+1)*D(1,J+1)*P*C(K)+D(2,J)
IS(1,J)=IS(1,J)+1
IF (IS(1,J).GT.5) THEN
   IF (IS(2,J).GE.JS(J)) THEN
   J=J-1
   IF (J.EQ.0) THEN
       S=D(2,1)*D(1,1)
       RETURN
   END IF
   GOTO 30
   END IF
   IS(2,J)=IS(2,J)+1
   CC(J)=CC(J)+D(1,J)*2.0
   IS(1,J)=1
END IF
K=IS(1,J)
X(J)=D(1,J)*T(K)+CC(J)
IF (J.EQ.N) GOTO 30
M=J+1
GOTO 10
END

fcode 发表于 2016-1-13 13:32:44

函数和主程序这种形式很好,没必要改成一个主程序。你这想法就是本末倒置。

greenfunction 发表于 2016-1-13 13:58:21

我也知道这种形式很好,但是这种写有时候在有些地方用起来就不方便。所以还是想改写成一个完整的主程序形式,而不想是现在这种由主程序+若干子程序组成。

pasuka 发表于 2016-1-13 14:10:50

greenfunction 发表于 2016-1-13 13:58
我也知道这种形式很好,但是这种写有时候在有些地方用起来就不方便。所以还是想改写成一个完整的主程序形式 ...

那就用contains,不过主程序里面这么用,很另类

fcode 发表于 2016-1-13 18:23:15

你的逻辑让我非常惊讶。
什么叫“完整的主程序”??难道调用了函数,就不完整了?
函数调用是构成计算机系统的基本机制,如果没有函数调用,就没有现在的计算机行业。
函数调用可以让代码独立,模块化,易于理解和阅读,易于分工合作,易于封装,易于重复使用。有百益而无一害。

为何你要反其道而行之?
页: [1]
查看完整版本: 如何将徐士良程序集中的多重积分程序改写成一个完整的...