📜  SymPy-解算器

📅  最后修改于: 2020-11-05 04:46:38             🧑  作者: Mango


由于在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中的Solver模块提供了soveset()函数,其原型如下:

solveset(equation, variable, domain)

该域默认为S.Complexes。使用resolveset()函数,我们可以求解一个代数方程,如下所示:

>>> solveset(Eq(x**2-9,0), x)

获得以下输出-

{−3,3}

>>> solveset(Eq(x**2-3*x, -2),x)

执行上述代码段后,将获得以下输出-

{1,2}

Solveset的输出是解决方案的FiniteSet。如果没有解决方案,则返回EmptySet

>>> solveset(exp(x),x)

执行上述代码段后,将获得以下输出-

$ \ varnothing $

线性方程

我们必须使用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创建未定义的函数=功能的符号函数。要求解微分方程,请使用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 $