Python+Sympy实现计算微积分

 更新时间:2023年07月16日 09:46:03   作者:databook  
微积分的计算也许平时用不到,会让人觉得有点高深,它们的计算过程中需要使用很多计算规则,但是使用 Sympy 可以有效减轻这方面的负担,本文就来和大家简单讲讲吧

微积分的计算也许平时用不到,会让人觉得有点高深。

但其实它在数学专业的人眼中,也不过是一种极其普通的计算,是一种和加减乘除差不多的级别的常用计算方式。

微积分和求极限运算本身不是很难,只是它们的计算规则不像加减乘除那么简单。

它们的计算过程中需要使用很多计算规则(这些不太容易记住),就像计算三角函数要记住很多三角函数的公式和定理一样。

使用 Sympy 可以有效减轻这方面的负担,让我们用编程的方式来解决微积分问题。

1. 极限计算

极限计算的应用场景很广,也是学习微积分的前置步骤。

1.1. 函数极限

比如这个简单的函数lim⁡x→∞1/x,

我们想知道它在x趋于无穷大时的值,普通的加减乘除算法就无法运算。

Sympy 来计算:

from sympy import Symbol, Limit, S
Limit(1/x, x, S.Infinity).doit()
#运行结果
0

当 x 趋向于0时,

Limit(1/x, x, 0).doit()
#运行结果,下面的符号表示正无穷大
oo

1.2. 瞬时速度

在物理上,计算瞬时速度的时候,也会用极限的计算。

比如,存在一个路程和时间的公式:S=t2+2t+10 (S表示路程,t表示时间)

计算瞬时速度时,步骤如下:

  • 假设初始路程S
  • 经过Δt时间后,路程变为ΔS=(t+Δt)2+2(t+Δt)+10
  • 此时间间隔内的平均速度为:V=(ΔS−S​)/Δt
  • 当Δt趋向于0时,此速度V即为瞬时速度。

Sympy来实现很方便:

# 2. 顺时速度
t = Symbol("t")
s_t = t * t + 2 * t + 10
delta_t = Symbol("delta_t")
s_delta = s_t.subs({t: t + delta_t})
expr = Limit((s_delta - s_t) / delta_t, delta_t, 0)
expr.doit()

运行结果:2t+2

这就是瞬时速度时间的关系,通过这个公式,就能算出每个时间点的瞬时速度。

3. 微分计算

微分计算可以看做是一种求极限的运算方式,通过微分的运算规则,求极限更加简单。

3.1. 导数

还是上面瞬时速度的例子,用微分的方式,可以更快的得到结果。

from sympy import Derivative
#导数
s = t * t + 2 * t + 10
Derivative(s, t).doit()

运行的结果:2t+2,和上面求极限的方式计算的结果一样。

3.2. 偏导数

当函数的变量不止一个的时候,可以分别对不同的变量求导,这也就是偏导数

比如函数:f(x,y)=5x2+6y2+10xy+2x+3y

  • 对变量x的偏导数:df(x,y)/dx=10x+10y+2
  • 对变量y的偏导数:df(x,y)/dy=10x+12y+3

Sympy 实现方式:

f_xy = 5 * x * x + 6 * y * y + 10 * x * y + 2 * x + 3 * y
dx = Derivative(f_xy, x).doit()
dy = Derivative(f_xy, y).doit()

运行结果:dx=10x+10y+2,dy=10x+12y+3

3.3. 高阶导数

上面的微分计算求解的都是一阶导数,在寻找函数全局极值点的时候,还要用到高阶导数。

计算高阶导数也简单,上面 Derivative 函数的第三个参数就是求导的阶数(默认是1)。

#高阶导数
f = x**5 - 3 * x**3 + 5 * x
#3阶导数
dx3 = Derivative(f, x, 3).doit()
#4阶导数
dx4 = Derivative(f, x, 4).doit()

运行结果:dx3=6(10x2−3),dx4=120x

4. 积分计算

积分是微分的逆运算,手动计算的话一般需要查询积分表,非常麻烦。

使用Sympy的话,就是一行代码的事儿。

from sympy import Integral
expr = 2 * x
Integral(expr).doit()

运行结果:x2

除了可以得到积分后的表达式,也可以直接计算积分的值。

比如计算:∫2.57.5(x2+2)

expr = x * x + 2
Integral(expr, (x, 2.5, 7.5)).doit()
#运行结果:145.416666666667

5. 总结回顾

本篇主要介绍了Sympy微积分方面的使用方法。

不过,能够计算微积分这些还不是Sympy吸引我的地方,它最主要的特色是能够符号化程序中的变量和表达式,这样就使得编写的程序和用数学公式推导的过程极其类似,可以更加直观的表达自己的数学知识。

PS.

我在jupyter notebook中使用 Sympy 时,发现直接显示Sympy的变量和表达式都非常漂亮,都是Latex格式的。

以上就是Python+Sympy实现计算微积分的详细内容,更多关于Python Sympy计算微积分的资料请关注脚本之家其它相关文章!

相关文章

  • python分治法求二维数组局部峰值方法

    python分治法求二维数组局部峰值方法

    下面小编就为大家分享一篇python分治法求二维数组局部峰值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 解决PyCharm同目录下导入模块会报错的问题

    解决PyCharm同目录下导入模块会报错的问题

    今天小编就为大家分享一篇解决PyCharm同目录下导入模块会报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python-pymysql获取字段名称-获取内容方式

    python-pymysql获取字段名称-获取内容方式

    这篇文章主要介绍了python-pymysql获取字段名称-获取内容方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python求两个list的差集、交集与并集的方法

    Python求两个list的差集、交集与并集的方法

    这篇文章主要介绍了Python求两个list的差集、交集与并集的方法,是Python集合数组操作中常用的技巧,需要的朋友可以参考下
    2014-11-11
  • python 删除空值且合并excel的操作

    python 删除空值且合并excel的操作

    这篇文章主要介绍了python 删除空值且合并excel的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 教你python 中如何取出colomap部分的颜色范围

    教你python 中如何取出colomap部分的颜色范围

    这篇文章主要介绍了python 中如何取出colomap部分的颜色范围,本文以以jet为例给大家提供一种方法,可以提取colormap色标中的一部分,取出我们满意的色标区域,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • Python pymysql连接数据库并将查询结果转化为Pandas dataframe

    Python pymysql连接数据库并将查询结果转化为Pandas dataframe

    这篇文章主要为大家介绍了Python pymysql连接数据库并将结果转化为Pandas dataframe实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 基于Python进行年龄和性别检测

    基于Python进行年龄和性别检测

    这篇文章主要介绍了通过Python 编程语言带您完成使用机器学习进行年龄和性别检测的任务。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2021-12-12
  • 利用Celery实现Django博客PV统计功能详解

    利用Celery实现Django博客PV统计功能详解

    给网站增加pv、uv统计,可以是件很简单的事,也可以是件很复杂的事。下面这篇文章主要给大家介绍了利用Celery实现Django博客PV统计功能的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • pytest使用@pytest.mark.parametrize()实现参数化的示例代码

    pytest使用@pytest.mark.parametrize()实现参数化的示例代码

    这篇文章主要介绍了pytest使用@pytest.mark.parametrize()实现参数化,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论