- SymPy 教程
- SymPy - 主页
- SymPy - 简介
- SymPy - 安装
- SymPy - 符号计算
- SymPy - 数字
- SymPy - 符号
- SymPy - 替换
- SymPy - sympify() 函数
- SymPy - evalf() 函数
- SymPy - Lambdify() 函数
- SymPy - 逻辑表达式
- SymPy - 查询
- SymPy - 简化
- SymPy - 导数
- SymPy - 集成
- SymPy - 矩阵
- SymPy - 函数类
- SymPy - 四元数
- SymPy - 求解器
- SymPy - 绘图
- SymPy - 实体
- SymPy - 套装
- SymPy - 打印
- SymPy 有用资源
- SymPy - 快速指南
- SymPy - 有用的资源
- SymPy - 讨论
SymPy - 求解器
由于符号 = 和 == 在 Python 中被定义为赋值运算符和相等运算符,因此它们不能用于构建符号方程。SymPy 提供 Eq() 函数来建立方程。
>>> from sympy import * >>> x,y=symbols('x y') >>> Eq(x,y)
上面的代码片段给出了相当于下面表达式的输出 -
x = y
由于当且仅当 xy=0 时 x=y 才可能,因此上式可以写为 -
>>> Eq(x-y,0)
上面的代码片段给出了相当于下面表达式的输出 -
x − y = 0
SymPy 中的求解器模块提供了 soveset() 函数,其原型如下 -
solveset(equation, variable, domain)
默认情况下,域为 S.Complexes。使用solvet()函数,我们可以求解代数方程如下 -
>>> solveset(Eq(x**2-9,0), x)
获得以下输出 -
{−3, 3}
>>> solveset(Eq(x**2-3*x, -2),x)
执行上述代码片段后获得以下输出 -
{1,2}
Solveset 的输出是解的有限集。如果没有解决方案,则返回 EmptySet
>>> solveset(exp(x),x)
执行上述代码片段后获得以下输出 -
$\var什么都没有$
线性方程
我们必须使用 linsolve() 函数来求解线性方程。
例如,方程如下 -
xy=4
x+y=1
>>> from sympy import * >>> x,y=symbols('x y') >>> linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))
执行上述代码片段后获得以下输出 -
$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$
linsolve() 函数还可以求解以矩阵形式表示的线性方程。
>>> a,b=symbols('a b') >>> a=Matrix([[1,-1],[1,1]]) >>> b=Matrix([4,1]) >>> linsolve([a,b], (x,y))
如果执行上面的代码片段,我们会得到以下输出 -
$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$
非线性方程
为此,我们使用 nonlinsolve() 函数。这个例子的方程 -
a 2 +a=0 ab=0
>>> a,b=symbols('a b') >>> nonlinsolve([a**2 + a, a - b], [a, b])
如果执行上面的代码片段,我们会得到以下输出 -
$\lbrace(-1, -1),(0,0)\rbrace$
微分方程
首先,通过将 cls=Function 传递给符号函数来创建一个未定义的函数。要求解微分方程,请使用 dsolve。
>>> x=Symbol('x') >>> f=symbols('f', cls=Function) >>> f(x)
执行上述代码片段后获得以下输出 -
f(x)
这里 f(x) 是一个未计算的函数。其导数如下 -
>>> f(x).diff(x)
上面的代码片段给出了相当于下面表达式的输出 -
$\frac{d}{dx}f(x)$
我们首先创建对应于以下微分方程的 Eq 对象
>>> eqn=Eq(f(x).diff(x)-f(x), sin(x)) >>> eqn
上面的代码片段给出了相当于下面表达式的输出 -
$-f(x) + \frac{d}{dx}f(x)= \sin(x)$
>>> dsolve(eqn, f(x))
上面的代码片段给出了相当于下面表达式的输出 -
$f(x)=(c^1-\frac{e^-xsin(x)}{2}-\frac{e^-xcos(x)}{2})e^x$