python梯形法计算积分值_复化梯形求积分实例――用Python进行数值计算

本文介绍了使用Python实现复化梯形法来计算积分值,通过将大区间分为多个小区间,避免了高次多项式求积分的问题。文章提供了一个简单的`integral`函数,用于计算指定函数在特定区间的积分,并展示了分段绘制梯形帮助理解积分过程。

用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式。

学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的。

插值函数一般是一个不超过n次的多项式,如果用插值函数来求积分的话,就会引进高次多项式求积分的问题。这样会将原来的求积分问题带到另一个求积分问题:如何求n次多项式的积分,而且当次数变高时,会出现龙悲歌现象,误差反而可能会增大,并且高次的插值求积公式有可能会变得不稳定:详细原因不赘述。

牛顿-科特斯公式解决这一问题的办法是将大的插值区间分为一堆小的插值区间,使得多项式的次数不会太高。然后通过引入参数函数

104a43c97fd8b20d0dcfc184a7ec33e1.jpg

将带有幂的项的取值范围固定在一个固定范围内,这样一来就将多项式带有幂的部分的求积变为一个固定的常数,只需手工算出来即可。这个常数可以直接带入多项式求积函数。

上式中x的求积分区间为[a, b],h = (b - a)/n, 这样一来积分区间变为[0, n],需要注意的是从这个公式可以看出一个大的区间被分为n个等长的小区间。 这一部分具体请参见任意一本有关数值计算的书!

n是一个事先确定好的值。

又因为一个大的插值区间需要被分为等长的多个小区间,并在这些小区间上分别进行插值和积分,因此此时的牛顿-科特斯公式被称为:复化牛顿-科特斯公式。

并且对于n的不同取值牛顿-科特斯有不同的名称: 当n=1时,叫做复化梯形公式,复化梯形公式也就是将每一个小区间都看为一个梯形(高为h,上底为f(t), 下底为f(t+1))。这与积分的本质:无限分隔 相同。

当n=2时,复化牛顿-科特斯公式被称为复化辛普森公式(非美国法律界著名的那个辛普森)。

我这

### 梯形公式的Python实现 梯形公式通过将积分区间细分为多个子区间,在每个子区间应用基本的梯形法则,从而提高数积分精度。对于给定函数 \(f(x)\),在区间 \([a,b]\) 上采用 \(n\) 个等分点,则可以按照如下方式定义梯形公式: \[ I ≈ h\left(\frac{f(a)+f(b)}{2}+\sum_{i=1}^{n-1}{f(x_i)}\right), \] 其中 \(h=\frac{(b-a)}{n}\),\(x_i=a+i*h\)。 下面是基于上述原理编写的 Python 函数 `composite_trapezoidal` 来执行梯形积过程[^1]: ```python def composite_trapezoidal(f, a, b, n): """ 使用梯形公式计算积分 参数: f : 被积函数 a : 积分区间的起点 b : 积分区间的终点 n : 子区间的数量 返回: 定积分的结果作为浮点数返回. """ h = (b - a) / float(n) sum_y = 0.5 * (f(a) + f(b)) for i in range(1, n): x = a + i * h sum_y += f(x) result = h * sum_y return result ``` 为了验证此方法的有效性,考虑一个具体的实例:假设要估计函数 \(f(x)=e^{-x^2}\) 在范围 `[0, 1]` 的定积分,可以选择适当的大整数 \(n\) 表示分割数目以获得更精确的结果[^3]。 ```python import math # 测试被积函数 def test_function(x): return math.exp(-x ** 2) # 设置参数并调用梯形规则 interval_start = 0 interval_end = 1 subdivisions = 1000 # 更多细分意味着更高的准确性 integral_approximation = composite_trapezoidal(test_function, interval_start, interval_end, subdivisions) print("The approximate value of the integral is:", integral_approximation) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值