前面介绍了数值积分的基本背景知识,接下来就介绍各种常见的数值积分算法,本次主要介绍矩形和梯形积分公式。
1. 矩形积分公式
对于一个连续函数,根据中值定理有:
现在的关键是如何确定使误差尽可能比较小,一个比较简单的想法是使用该区间中间值,亦即
Python中实现代码如下:
def RectInt(f,a,b):
return (b-a)*f((a+b)/2)
其效果如图所示:
图中黄色区域就是以1为底边长,humps(0.5)为高的矩形,其面积为25,而解析式的结果为35.858325395498674,两者之间的差距相当大,误差达到了惊人的30.28%,这几乎是不可接受的。
复合矩形积分公式
如果使用微分的思想,我们可以把这个积分区间划分为等长的N个子区间,然后在每个子区间上应用矩形积分,再把每一段的积分结果求和,其误差就会比单一的区间要好很多,这也就是复合矩形积分公式,假设有n个等距的点,将划分为个子区间,则:
其中:
可以把每一个区间的积分,看做是一个矩形,其高是中点处的函数值,而宽则是子区间长h。
算法实现如下:
def compRectInt(f,a,b,n=100):
'''
复合矩形法则求积分
'''
x=np.linspace(a,b,n)
h=x[1]-x[0]
func=np.vectorize(f)
Int=0
for i in range(n-1):
Int+=h*f(x[i]+h/2)
return Int
运行效果展示如下:
可以看到,随着子区间数量的不断增加,其相对误差也越来越小。
标签:Python,积分,30,复合,Int,公式,区间,矩形 From: https://blog.csdn.net/cdinten/article/details/143195680