变步长复化梯形法的Python实现

一、题目

在这里插入图片描述利用变步长复化梯形法计算在这里插入图片描述的近似值。

二、变步长复化梯形法

取 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3b9a03fe28a0fc3f9dd93857e11c0ddc.png)利用变步长复化梯形法计算![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8fb4a75720f2a6f79c3337ae8a99bc34.png)的近似值。

三、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.求和那部分的找点、求值较难。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值