一、题目
取 利用变步长复化梯形法计算的近似值。
二、变步长复化梯形法
三、Python代码
import numpy as np
def f(x):
return np.sin(x)/x
a, b = 0, 1
f0, f1 = 1, f(1) #定义f(0)=1
t1 = (b-a)/2 * (f0+f1)
h = b-a # 初始步长
k = 0 # 初始二分次数
T = [0, t1] # 储存结果
while 1:
k += 1
n = 2**k # n是等分区间数
points = [] #储存需要求和那部分的点
for point in np.linspace(a, b, n+1)[1::2]:
points.append(point)
#print(points)
sum_f = sum(list(map(f, points)))
temp = T[k]/2 + h/2*sum_f # 算是T2n
if abs(temp-T[k]) < 1.5*(10)**(-7): # 如果满足精度要求,退出
break
T.append(temp) #否则的话,将T2n存进T,在下轮循环作为Tn使用
h /= 2 # 算完当前的n等分后,步长折半
print("中间结果:\n", T)
print("I的近似值:", temp)
四、结果
中间结果:
[0, 0.9207354924039483, 0.9397932848061772, 0.9445135216653896, 0.9456908635827013, 0.9459850299343859, 0.946058560962768,
0.946076943060063, 0.946081538543152, 0.946082687411347, 0.9460829746282349]
I的近似值: 0.946083046432447
总结
1.学习变步长复化梯形法。
2.通过Python写出变步长复化梯形法的程序并运行结果。
3.求和那部分的找点、求值较难。