求积分I=01e-xdx,并使误差小于10-4。
import numpy as np
def ET(x1,x2,H0,Ep):#此程序可以处理区间不对称的情况
x3=(x1+x2)/2;A=x3;S2=0;S1=0#注意区间的中点位置
def f(x):#定义积分函数
y=np.exp(-x)
return y
RP=f(-A+x3)+f(A+x3);N=1;H=2*A
while True:
X=-A-H/2+x3;RC=0#平移坐标
for i in range(0,N):
X=X+H
RC=RC+f(X)
while abs(H)>H0:
S1=(RP+4*RC)*H/6
S2=S1;RP=RP+2*RC;N=N+N;H=H/2
X=-A-H/2+x3;RC=0
for i in range(1,N):
X=X+H
RC=RC+f(X)
D=S2-S1
if abs(S2)>=1:
D=D/S2
if abs(D)<=Ep:
print('变步长辛卜生近似计算:{}'.format(S2))
print('原积分值:{}'.format(1 - 1 / np.e))
break
else:
S2=S1;RP=RP+2*RC;N=N+N;H=H/2
x1=0;x2=1#区间端点
H0=10**(-4);Ep=10**(-5)#误差
ET(x1,x2,H0,Ep)#调用函数
结果
变步长辛浦生近似计算:0.6319028365720271
原积分值:0.6321205588285577