Sympy库是进行符号运算的库。
与Scipy库的数值运算不同,Sympy的运算是在推理基础上进行的,不用考虑误差问题。
例如,在Scipy库中, 7 \sqrt7 7计算中使用的是近似值,但是Sympy中, 7 \sqrt7 7是以sqrt(7)
的形式显示的。
Symbol 是 symPy 库中最重要的类。 如前所述,符号计算是用符号完成的。 SymPy 变量是 Symbols 类的对象。
Symbol() 函数的参数是一个包含可以分配给变量的符号的字符串。
例如:
from sympy import Symbol
x=Symbol('x')
y=Symbol('y')
expr=x**2+y**2
print(expr)
"""
x**2 + y**2
"""
当然,也可以类似列表传输数据。在一个语句中定义多个符号变量。
Sympy中的abc模块中,所有拉丁字母和希腊字母都被定义为符号。 引用该模块,可以不用实例化符号对象,提供方便。
例如:
from sympy.abc import x,y,z
print(x)
可以使用类似于 range() 函数的语法来定义索引符号。 范围用冒号表示。 范围类型由冒号右侧的字符确定。
例如:
from sympy import symbols
x=symbols('a:5')
"""
(a0, a1, a2, a3, a4)
"""
sympify() 函数用于转换任意表达式,使其可以用作 SymPy 表达式。 在 SymPy 中转换普通的 Python 对象,例如整数对象。 整数等,字符串也被转换为 SymPy 表达式。
import sympy as sy
from sympy.abc import x
expr="x**2+3*x+2"
expr1=sy.sympify(expr)
"""
x**2 + 3*x + 2
"""
simplify()函数简化sympy表达式。
expand()函数可以进行多项式展开。
例如:
from sympy import *
x=Symbol('x')
expr=sin(x)**2 + cos(x)**2
print(simplify(expr))
"""
1
"""
integrate()
用于计算定积分和不定积分。定积分的计算只需传递参数
from sympy import *
x,y = symbols('x y')
expr=x**2 + x + 1
print(integrate(expr, x))
"""
x**3/3 + x**2/2 + x
"""
print(integrate(expr, (x,1)))
"""
11/6
"""
sympy.integrals.transforms 模块中定义了许多积分变换。
常用的是Laplace变换和傅里叶变换,对应的函数是:laplace_transform和fourier_transform
由于符号 = 和 == 在 Python 中被定义为赋值和相等运算符,因此它们不能用于制定符号方程。 SymPy 提供了 Eq() 函数来建立方程。
import sympy as sy
from sympy.abc import x,y
f=sy.Eq(x**2+y**2,4)
"""
建立了方程x^2+y^2=4
"""
solveset 的输出是解决方案的有限集。 如果没有解决方案,则返回 EmptySet
import sympy as sy
from sympy.abc import x
# solveset(f, symbol, domain=S.Complexes)
# domain:解的数域,默认在复数域上
f=sy.Eq(x**2+2*x+1,4)
print(sy.solveset(f,symbol=x))
"""
{-3, 1}
"""
f=sy.Eq(x**2,-1)
print(sy.solveset(f,symbol=x))
"""
{-I, I}
"""
latex()函数获得sympy表达式的latex形式,方便在latex编辑器中阅读。
例如:
import sympy as sy
from sympy.abc import x
print(sy.latex(sy.sqrt(x**2)))
"""
\sqrt{x^{2}}
"""