python 积分_数值分析笔记(一维数值积分及Python实现)

由高等数学中的牛顿-莱布尼茨(Newton-Leibniz)公式,若函数

在区间
上连续,则有积分

式中,

的原函数,即
,由此可见,只要求出原函数,积分值即可求出。但在许多实际问题中,
的原函数很难求出,甚至根本无法写出表达式,例如
等。另外,有时函数是以在一系列离散点上值的形式出现的,所以我们的思路是构造一系列形式简单的函数
来近似代替

中点公式

对函数

,如果用它
上的函数值近似代替,即得中点公式

bf468e0bc3e4611962fa65ab5c7880cd.png

积分的几何意义为,函数与区间两端以及

轴围成的封闭图形面积,所以中点公式的几何意义即是,用区间两端的原函数平均值作为矩形的宽,区间长度作为矩形的长,用此矩形面积近似代替真实的积分值。

梯形公式

通过节点

作线性插值函数
,得梯形公式

9c76d2c0e340dbb4f607eb54d43d0885.png

同理,梯形公式的几何意义为,用

,过点
的直线以及
轴所围成的梯形面积,近似代替真实的积分值。

辛普森公式

中点公式是利用区间中点的值进行零次多项式插值,梯形公式是利用区间两端的值进行一次多项式插值,而辛普森公式继续延续这一思想,利用区间两端和区间中点的值,即

进行二次多项式插值。得到
,以此近似替代
,即

小结

一般地,若已知函数

在区间
内节点
上的值
,我们可以构造
次插值多项式
近似替代
。即所谓的牛顿-科茨(Newton-Cotes)公式,并称形如

的式子为求积公式,其中

称为求积节点,
称为求积系数,求积节点及求积系数不依赖于被积函数
的具体形式。

复合型公式

复合型积分的主要思想在于将求积区间分成若干份,在每一个小区间上分别应用如上一种求积公式,再将所有区间的计算值相加即得原积分的近似值,即

复合中点公式

将中点公式代入复合积分公式得

首先定义

import math
def Fx(x):
    return math.sin(x)

复合中点积分公式,

为积分区间,
为区间等分数量。

首先得出步长即每一段的区间长度

,第一段区间的上下限为
,第一段区间中点的值为
,积分值为
,此时
在第一段区间的中点,每次循环只需要向右移动一个步长即一段区间长度
即到达下一区间的中点,继而可以直接利用
函数算出新一轮的
值。
def rectangle(a, b, n):
    h = (b - a) / n
    s = 0
    x0 = a + h / 2
    for i in range(0, n):
        s += h * Fx(x0)
        x0 += h
    return s

复合梯形公式

将梯形公式代入复合积分公式得

循环求和部分第一项为

,次数为
次,比中点公式少一次,可以在循环结束后再乘上系数
减少计算量,最后加上剩余的常数项。

注:可以理解为,相邻两个梯形公用的边被计算了两次,如果分成

份,那么需要计算
个梯形的面积,这样的边有
条,区间两端外侧的边即
只用到一次
def trapezoid(a, b, n):
    h = (b - a) / n
    s = 0
    x0 = a + h
    for i in range(0, n - 1):
        s += Fx(x0)
        x0 += h
    s *= h
    s = s + (Fx(a) * (h / 2))
    s = s + (Fx(b) * (h / 2))
    return s

复合辛普森公式

将辛普森公式代入复合积分公式得

其中两项求和项的第一项分别为

,步长为
,次数相差一次,将多出来的一项单独放到循环外,然后乘上相应的系数,最后加上剩余的常数项。
def simpson(a, b, n):
    h = (b - a) / n
    x0 = a + (3 / 2) * h
    x1 = a + h
    s0 = 0
    s1 = 0
    for i in range(0, n - 1):
        s0 += Fx(x0)
        s1 += Fx(x1)
        x0 += h
        x1 += h
    s0 += Fx(a + h / 2)
    s0 *= (2 / 3) * h
    s1 *= (1 / 3) * h
    s = s0 + s1 + ((h / 6) * (Fx(a) + Fx(b)))
    return s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值