利用Python实现数值积分的方法

 更新时间:2022年02月10日 08:43:40   作者:赵卓不凡   
这篇文章主要介绍了利用Python实现数值积分。本文主要用于对比使用Python来实现数学中积分的几种计算方式,并和真值进行对比,加深大家对积分运算实现方式的理解

1. 栗子

为了加深大家的印象,首先我们来看个例子:

图示如下:

2. 矩形计算面积

我们知道,在数学中,积分运算表示上述曲线和x轴围成的封闭区域的面积,为此,我们在数值预算中,来近似计算上述区域的面积,最直观的想法就是拆成一个个小的矩形来计算对应的面积。

2.1 左侧边长计算面积

为了计算每个小矩形的面积,设计到边长高的选择,这里我么以左侧函数取值作为对应矩形的高来计算相应的小矩形的面积,图示如下:

对应的代码如下:

import numpy as np
x = np.linspace(0, 3, 1001)
f = lambda x: x**3 - 4*x**2 + 4*x + 2
a = 0.5
b = 2.5
Ax = np.linspace(a, b, 101)
Ay = f(Ax)
def defInt_left(f, a, b, N):
    # left-hand point
    result = 0; FX = []; Xn = []
    dx = abs(b - a)/N
    while a < b:
        result += f(a)*dx
        FX += [f(a)]
        Xn += [a]
        a += dx
    return result, FX, Xn, dx
N = 4
I_left, FX, Xn, dx = defInt_left(f, a, b, N)
print(I_left)

上述代码中,我们将横坐标拆分为4小份,也就是拆分成4个小矩形,然后使用函数左侧的点坐位小矩形的高,上述代码的运行结果如下:

5.25

2.2 右侧边长计算面积

这里和上述原理类似,只不过每个小矩形的高采用右侧边长函数取值来近似计算,图例如下:

样例代码如下:

def defInt_right(f, a, b, N):
    # right-hand point
    result = 0; FX = []; Xn = []
    dx = abs(b - a)/N
    while a < b:
        result += f(a + dx)*dx
        FX += [f(a + dx)]
        Xn += [a]
        a += dx
    return result, FX, Xn, dx

N = 4
I_right, FX, Xn, dx = defInt_right(f, a, b, N)
print(I_right)

运行结果如下:

5.0

2.3 中值边长计算面积

看了上述两种近似计算方式,有同学就说有取左侧点算出来面积大的,有取右侧点算出来面积小的,那干脆折中一下,我们来以中值坐位矩形的高来计算对应的面积。图例如下:

代码实现如下:

def defInt_middle(f, a, b, N):
    # middle point
    result = 0; FX = []; Xn = []
    dx = abs(b - a)/N
    while a < b:
        result += f(a + dx/2)*dx
        FX += [f(a + dx/2)]
        Xn += [a]
        a += dx
    return result, FX, Xn, dx

N = 4
I_mid, FX, Xn, dx = defInt_middle(f, a, b, N)
print(I_mid)

运行结果如下:

5.0625

3. 梯形计算面积

读到这里的同学可能会思考,既然可以将封闭区域划分成一个个的小矩形,那当然也可以将其划分成梯形来近似计算相应的面积,图例如下:

样例代码如下:

def defInt_trapezoid(f, a, b, N):
    # trapezoidal rule
    result = 0; FXa, FXb = [], []; Xn = []
    dx = abs(b - a)/N
    while a < b:
        result += (f(a) + f(a + dx))*dx/2
        FXa += [f(a)]; FXb += [f(a + dx)]
        Xn += [a]
        a += dx
    return result, FXa, FXb, Xn, dx

N = 4
I_trap, FXa, FXb, Xn, dx = defInt_trapezoid(f, a, b, N)
print(I_trap)

运行结果如下:

5.125

4. 真值比对

最后,我们来针对不同的N来讲封闭区域划分成对应的小份,分别针对性的计算上述四种方式的积分值,样例代码如下:

Nx = range(1, 11)
I1, I2, I3, I4 = [], [], [], []
for Ni in Nx:
    i1, *_ = defInt_left(f, a, b, Ni); I1 += [i1];
    i2, *_ = defInt_right(f, a, b, Ni); I2 += [i2];
    i3, *_ = defInt_middle(f, a, b, Ni); I3 += [i3];
    i4, *_ = defInt_trapezoid(f, a, b, Ni); I4 += [i4];

最后将其与真值进行对比,如下:

可以看出,随着划分区域的增多,采用梯形计算面积方式最逼近真值。

5. 总结

本文重点介绍了使用不同面积划分方法来近似计算积分取值的原理和相应的代码实现,其中采用梯形计算面积的方式随着划分子区域数目的增加最接近真值,推荐大家使用。

到此这篇关于利用Python实现数值积分的方法的文章就介绍到这了,更多相关Python实现数值积分内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解Python异常处理的哲学

    深入理解Python异常处理的哲学

    这篇文章主要给大家介绍了关于Python异常处理的哲学,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Python读取stdin方法实例

    Python读取stdin方法实例

    在本篇文章中小编给大家分享了关于Python里如何读取stdin的知识点以及相关实例内容,需要的朋友们学习参考下。
    2019-05-05
  • 目前最全的python的就业方向

    目前最全的python的就业方向

    Python是一门面向对象的编程语言,编译速度超快,从诞生到现在已经25个年头了。其特点在于灵活运用,因为其拥有大量第三方库,所以开发人员不必重复造轮子,就像搭积木一样,只要擅于利用这些库就可以完成绝大部分工作
    2018-06-06
  • python抓取搜狗微信公众号文章

    python抓取搜狗微信公众号文章

    这篇文章主要为大家详细介绍了python抓取搜狗微信公众号文章,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python 列表操作全面教程示例

    Python 列表操作全面教程示例

    这篇文章主要为大家介绍了Python 列表操作的全面教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Django 模型类(models.py)的定义详解

    Django 模型类(models.py)的定义详解

    这篇文章主要介绍了Django 模型类(models.py)的定义详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 在Pandas中处理NaN值的方法

    在Pandas中处理NaN值的方法

    这篇文章主要介绍了在Pandas中处理NaN值的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • numpy.insert()的具体使用方法

    numpy.insert()的具体使用方法

    本文主要介绍了numpy.insert()的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python 截取 取出一部分的字符串方法

    python 截取 取出一部分的字符串方法

    下面小编就为大家带来一篇python 截取 取出一部分的字符串方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 一文带你深度解密Python的字节码

    一文带你深度解密Python的字节码

    当我们想要执行一个 py 文件的时候,只需要在命令行中输入 python xxx.py 即可,但你有没有想过这背后的流程是怎样的呢?本文主要贺和大家来聊聊Python中的字节码,感兴趣的可以了解一下
    2022-12-12

最新评论