Fortran Coder

查看: 5421|回复: 4
打印 上一主题 下一主题

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

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
6 点
跳转到指定楼层
楼主
发表于 2016-1-13 10:59:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问如何将下面(徐士良程序集)高斯方法计算多重积分的程序,改写成只有一个主程序,而不是源程序中的由主程序+子程序组成的形式? 谢谢
[Fortran] 纯文本查看 复制代码
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
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-1-13 13:32:44 | 只看该作者
函数和主程序这种形式很好,没必要改成一个主程序。你这想法就是本末倒置。

2

帖子

1

主题

0

精华

新人

F 币
20 元
贡献
6 点
板凳
 楼主| 发表于 2016-1-13 13:58:21 | 只看该作者
我也知道这种形式很好,但是这种写有时候在有些地方用起来就不方便。所以还是想改写成一个完整的主程序形式,而不想是现在这种由主程序+若干子程序组成。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

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

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

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

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

为何你要反其道而行之?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 05:42

Powered by Tencent X3.4

© 2013-2024 Tencent

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