侧边栏壁纸
博主头像
LittleAO的学习小站 博主等级

在知识的沙漠寻找绿洲

  • 累计撰写 125 篇文章
  • 累计创建 27 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Python数学之求解微积分问题

LittleAO
2023-08-23 / 0 评论 / 0 点赞 / 16 阅读 / 0 字
温馨提示:
本文最后更新于2023-11-13,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在开始前,请对Python数学之符号数学 | LittleAO学习小站有基本的了解。

使用sympy包求解微积分问题

常用函数

在python的math包中,可以调用sin()、log2()等函数,但这些函数不适用于符号。在sympy包中也有这些函数,它既可以完成math模块中的功能,还可以实现函数中包含未知数。

import sympy as sp

u = sp.Symbol('u')
t = sp.Symbol('t')
g = sp.Symbol('g')
theta = sp.Symbol('theta')
sp.solve(u*sp.sin(theta)-g*t, t)[0]

结果:

notion image

假设

我们可以判断一个未知数的情况,例如我们想知道x为正时,x+5是否为正,程序如下:

import sympy as sp

x = sp.symbols('x', positive=True)
if x + 5 > 0:
    print('yes')
else:
    print('no')

运行结果输出了yes。如果我们不能判断x+5是否为正,那么会出现报错。

在上面的代码中,我们声明了x为positive,同样我们还可以声明它是实数、整数、负数、虚数等。这些声明称为假设。

计算函数极限

我们可以使用sympy计算函数的极限。

比如我们可以计算\frac 1 xx趋于正无穷时的极限:

import sympy as sp

x = sp.symbols('x', positive=True)
l = sp.limit(1/x, x, sp.S.Infinity) # lim x->oo 1/x, S类中包含了正负无穷和其他特殊值
l.doit() # 求解

结果等于0。

默认情况下,我们从正方向计算极限(负无穷则默认为负),我们可以自己定义求解的方向,例如我们要求解1/x中从负方向趋向于0时的极限。

import sympy as sp

x = sp.symbols('x', positive=True)
l = sp.limit(1/x, x, 0, dir='-')  # lim x->-0 1/x
l.doit()  # 求解

解得结果为-\infty

此外,sympy还可以自动处理不定型的函数的极限,例如求解\frac{\sin x}{x}x=0时的极限:

import sympy as sp

x = sp.symbols('x', positive=True)
l = sp.limit(sp.sin(x)/x, x, 0)  
l.doit()  # 求解

运行结果为1。

函数求导

我们可以使用Derivative类进行求导。例如:

import sympy as sp

t = sp.symbols('t')
St = 5*t**2 + 2*t + 8
sp.Derivative(St, t).doit()

运行结果为:10t+2

当然还可以用这个函数来求偏导:

import sympy as sp

x = sp.symbols('x')
y = sp.symbols('y')
exp = 2*x*y + x*y**2
sp.Derivative(exp, x).doit()

运行结果为:y^{2} + 2 y

我们还可以使用diff函数:

import sympy as sp

x = sp.symbols('x')
y = sp.symbols('y')
exp = 2*x*y + x*y**2
sp.diff(exp, x)

求解微分方程

例如求解2 x y^{2} = \frac{d y}{d x}

import sympy as sp

x = sp.symbols('x')
y = sp.Function('y')  # y是x的函数
exp = 2 * x * y(x)**2 - y(x).diff(x)
sp.dsolve(exp, y(x))

使用dsolve来求解有关微分方程的问题,上述代码运行结果为:y{\left(x \right)} = - \frac{1}{C_{1} + x^{2}}

求积分

我们可以使用Integral来求解不定积分:

import sympy as sp

x = sp.symbols('x')
k = sp.symbols('k')
sp.Integral(k*x, x).doit()

运行结果为:\frac{k x^{2}}{2}

也可以求定积分:

import sympy as sp

x = sp.symbols('x')
k = sp.symbols('k')
sp.Integral(k*x, (x, 0, 2)).doit()

运行结果为:2k

0

评论区