感谢@冬-梦大佬提供的源代码;感谢@天元浪子大佬的问题指导,同时感谢我的好哥们飞哥的帮忙修改完成了以下代码!!!
a=0 # 积分下限
b=1 # 积分上限
eps=10**-5 # 精度
T=[] # 复化梯形序列
S=[] # Simpson序列
C=[] # Cotes序列
R=[] # Romberg序列
def f(x): # 被积函数
y=4/(1+x**2)
return y
def Romberg(a,b,eps,f):
h = b - a
T.append(h * (f(a) + f(b)) / 2) # 定义T[0]
ep=eps+1
m=0
while(ep>=eps):
m=m+1
t=0 # 每一次循环都会将t初始化
for i in range(2**m):
if i % 2==1:
t = t + f(i/(2**m))
t = t/(2**m)
t=t + T[-1]/2 # T[-1]指的是数组T中倒数第一个元素
T.append(t)
if m>=1:
S.append((4/3)*T[-1]-(1/3)*T[-2])
if m>=2:
C.append((16/15)*S[-1]-(1/15)*S[-2])
if m>=3:
R.append((64/63)*C[-1]-(1/63)*C[-2])
if m>4:
ep=abs(10*(R[-1]-R[-2]))
Romberg(a,b,eps,f)
print("T[ ]=",T)
print("S[ ]=",S)
print("C[ ]=",C)
print("R[ ]=",R)
print("积分结果为:I = {:.5f}".format(R[-1]))
编写代码遇到的问题:关于使用python完成龙贝格算法-编程语言-CSDN问答
运算结果如下:
T[ ] = [3.0, 3.1, 3.131176470588235, 3.138988494491089, 3.140941612041389,
3.1414298931749745]
S[ ] = [3.133333333333333, 3.1415686274509795, 3.1415925024587064,
3.141592651224822, 3.1415926535528365]
C[ ] = [3.142117647058823, 3.141594094125888, 3.141592661142563,
3.141592653708037]
R[ ] = [3.1415857837618733, 3.141592638396796, 3.141592653590029]
积分结果为:I = 3.14159