Fortran Coder

查看: 398|回复: 4

[微积分] 高斯积分 最后w出现负值 ,怎样才能找出因为哪步错误 而...

[复制链接]

12

帖子

8

主题

0

精华

入门

F 币
95 元
贡献
58 点
发表于 2018-1-8 14:34:50 | 显示全部楼层 |阅读模式
[Fortran] 纯文本查看 复制代码
Program Baidu_Thlws
Implicit None
Real*8 g
call FLRGS( 0.0D0 , 2.0D0 , F , 0.001D0 , g )
write( * , * ) g
Contains
Real*8 Function F( x )
Real*8 x
F = x ** 2.0D0
End Function F
Subroutine FLRGS(A,B,F,EPS,G)
Real*8 :: T(5),C(5)
Real*8 :: A,B,F,G,S,P,H,AA,BB,W,X,Q,EPS
DATA T/-0.9061798459,-0.5384693101,0.0,0.5384693101,0.9061798459/
DATA C/0.2369268851,0.4786286705,0.5688888889,0.4786286705,0.2369268851/
Integer :: M , I , J
M=1
S=(B-A)*0.001
P=0.0
10H=(B-A)/M
G=0.0
DO 30 I=1,M
AA=A+(I-1)*H
BB=A+I*H
W=0.0
DO 20 J=1,5
X=((BB-AA)*T(J)+(BB+AA))/2.0
W=W+F(X)*C(J)
20 CONTINUE
G=G+W
30CONTINUE
G=G*H/2.0
Q=ABS(G-P)/(1.0+ABS(G))
IF ((Q.GE.EPS).AND.(ABS(H).GT.ABS(S))) THEN
P=G
M=M+1
GOTO 10
END IF
RETURN
End Subroutine FLRGS
End Program Baidu_Thlws

回复

使用道具 举报

462

帖子

3

主题

0

精华

大宗师

F 币
3119 元
贡献
1850 点

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

发表于 2018-1-8 14:54:30 | 显示全部楼层
本帖最后由 pasuka 于 2018-1-8 14:56 编辑

用Excel计算没有出现负值,注意需要把被积函数转化成(x+1)^2

Excel计算结果

Excel计算结果

12

帖子

8

主题

0

精华

入门

F 币
95 元
贡献
58 点
 楼主| 发表于 2018-1-8 16:43:29 | 显示全部楼层
pasuka 发表于 2018-1-8 14:54
用Excel计算没有出现负值,注意需要把被积函数转化成

我的程序上用的是高斯积分 只不过是数不一样 我的程序上输出的w是负值 不知道为什么

462

帖子

3

主题

0

精华

大宗师

F 币
3119 元
贡献
1850 点

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

发表于 2018-1-8 17:45:47 | 显示全部楼层
ylw0710 发表于 2018-1-8 16:43
我的程序上用的是高斯积分 只不过是数不一样 我的程序上输出的w是负值 不知道为什么 ...

5次循环的结果都贴出来了,挨个对照,自然就能找出问题所在

1290

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂伙计

F 币
47 元
贡献
154 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2018-1-11 18:07:54 | 显示全部楼层
你用的什么编译器?我这里可以得到结果,w也没有出现负值。
我用的IVF2015
QQ截图20180111180717.png
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2018-10-20 07:34

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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