Python数值计算(30)——矩形及复合矩形积分公式

前面介绍了数值积分的基本背景知识,接下来就介绍各种常见的数值积分算法,本次主要介绍矩形和梯形积分公式。

1. 矩形积分公式

对于一个连续函数eq?f%28x%29,根据中值定理有:

eq?%5Cint_%7Ba%7D%5E%7Bb%7Df%28x%29dx%3D%28b-a%29f%28%5Cxi%29%2C%20%5Cxi%20%5Cin%20%28a%2Cb%29

现在的关键是如何确定eq?%5Cxi使误差尽可能比较小,一个比较简单的想法是使用该区间中间值,亦即2

Python中实现代码如下:

def RectInt(f,a,b):
    return (b-a)*f((a+b)/2)

其效果如图所示:

48dd9bdbbb154d9b8213e80ba7e3518a.png

图中绿色区域就是以1为底边长,humps(0.5)为高的矩形,其面积为25,而解析式的结果为35.858325395498674,两者之间的差距相当大,误差达到了惊人的30.28%,这几乎是不可接受的。

复合矩形积分公式

如果使用微分的思想,我们可以把这个积分区间划分为等长的N个子区间,然后在每个子区间上应用矩形积分,再把每一段的积分结果求和,其误差就会比单一的区间要好很多,这也就是复合矩形积分公式,假设有n个等距的点,将eq?%5Ba%2Cb%5D划分为eq?%28n-1%29个子区间,则:


2%29

其中:

%28n-1%29%5C%5C%20x_i%3Da+i*h

可以把每一个区间的积分,看做是一个矩形,其高是中点处的函数值,而宽则是子区间长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

运行效果展示如下:

5a9f36b5666d44849400ab74247660dc.gif

可以看到,随着子区间数量的不断增加,其相对误差也越来越小。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值