Python符号计算库sympy使用笔记

1. 介绍

sympy是一个非常好用的基于Python的符号计算库,科技做微分、积分、极限等一系列高等数学运算,可以帮我们自动的进行符号化计算,即带入运算的不是某个具体的数值,而是抽象的数学符号,并且还可以帮我们将最终得到的结果进行归并简化(例如sin cos函数的合并)。

2. 安装工具包

sudo pip3 install sympy

3. 导入工具包

import sympy as sym
from sympy import sin,cos

4. 求解二元一次方程组

x,y = sym.symbols('x, y')
sym.solve([x + y - 1,x - y -3],[x,y])

输出日志:

{x: 2, y: -1}

5. 拓展Latex格式

例如想要显示

delta_t = sym.symbols('delta_t')

6. 测试行列式求解

dt = sym.symbols('delta_t')
# 定义矩阵T
T = sym.Matrix(
    [[1, 0, 0, 0], 
     [1, dt, dt**2, dt**3], 
     [0, 1, 0, 0],
     [0, 1, 2*dt, 3*dt**2]])
T

7. 极限计算

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

7.1. 函数极限

比如这个简单的函数,我们想知道它在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

7.2. 瞬时速度

 用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

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

7. 微分计算

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

7.1. 导数

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

from sympy import Derivative

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

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

7.2. 偏导数

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

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()

7.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()

8. 积分计算

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

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

from sympy import Integral

expr = 2 * x
Integral(expr).doit()

参考文献

SymPy符号计算-让Python帮我们推公式 - 知乎

[python从入门到放弃]手边没稿纸推公式sympy - 云+社区 - 腾讯云

Python Sympy:计算微积分利器

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值