我正在尝试使用辛普森规则来评估从 -1 到 1 区间内 sqrt(1-x^2) 的积分。但是,在我开发的代码中,由变量“s”表示的总和并没有完全不会收敛到 pi 超过 2。我是 fortran 和一般编程的绝对新手,所以请多多包涵。我究竟做错了什么?
PROGRAM integral
REAL*8 :: x
REAL*8 :: h
REAL*8 :: fodd
REAL*8 :: feven
REAL*8 :: simpson
REAL*8 :: s
x = -1
s = 0
simpson = 0
h = 0
DO WHILE (x<=1)
fodd = sqrt(1-(x+(2*h+0.1))**(2))
feven = sqrt(1-(x+2*h)**(2))
simpson = 4*fodd + 2*feven
s = s + simpson*(h/3)
WRITE(*,*) x,h, fodd, feven, simpson, s
h = 0.1
x = x + h
END DO
END PROGRAM
这是它生成的输出的链接:https ://pastebin.com/mW06Z6Lq
由于这个积分只是半径为 1 的圆面积的一半,它应该收敛到 pi 超过 2,但它大大超过了这个值。我考虑过将步长缩小以提高精度,但这不是问题,因为当我尝试这样做时,它甚至超过了预期值。