什么是Sympy
Sympy 是一个可以进行符号运算的第三方科学计算库,数学对象可以被精确的表达,而不是近似值,这也意味着带有未计算的未知量可以以符号的形式留在数学表达式中。
一个更有趣的例子
在Sympy 中,用symbols来定义变量,也就是说,在使用某个变量前,必须先定义它。
x,y=sympy.symbols('x y')
expr=x+2*y;expr
x+2y
expr+1
x+2y+1
xexpr # 除了 x-x=0,sqr(8)=2sqrt(2),很多简化不能自动的进行,这是因为我们有可能希望展开,也有可能希望是多因式的形式,在sympy中,有专门的函数来进行转化
x(x+2y)
expanded_expr=sympy.expand(x*expr)
expanded_expr
x2+2xy
sympy.factor(expanded_expr)
x(x+2y)
sympy还可以用来 快速做题 简化表达式,计算导数,积分,极限,解方程,矩阵运算 。
x,y,z,nu=sympy.symbols('x y z nu')
- 对 sin(x)exp(x)求导
sympy.diff(sympy.sin(x)*sympy.exp(x),x)
exsin(x)+excos(x)
- 计算exsin(x)+excos(x)的积分
sympy.integrate(sympy.exp(x)*(sympy.sin(x)+sympy.cos(x)),x)
exsin(x)
- 计算sin(x2)的无穷积分:
from sympy import *
sympy.integrate(sympy.sin(x**2),(x,-oo,oo))
- sin(x)/x,当x趋近于0时的极限:
sympy.limit(sympy.sin(x)/x,x,0)
- 解方程:x**2-2=0
sympy.solve(x**2-2,x)
[−2–√,2–√]
- 解微分方程 y’’-y=e(t)
y=sympy.Function('y')
t=sympy.symbols('t')
sympy.dsolve(sympy.Eq(y(t).diff(t,t)-y(t),sympy.exp(t)),y(t))
- 找矩阵[[1,2],[2,2]]的特征值:
sympy.Matrix([[1,2],[2,2]]).eigenvals()
等号
在Python中,=代表赋值,为了不与python冲突,所以等式不能用=来表示,而==代表逻辑判断等于,其返回布尔值,显然作为表示符号运算中的“等于”,也不合适。在Sympy中,我们用Eq来表示等式:
sympy.Eq(x+1,4)
False
- 为了比较两个式子是否相等,可以将两个式子做减法,然后用simplify方法:
x=sympy.symbols('x')
a=(x+1)**2;a
b=x**2+1+2*x;b
(a-b).simplify()
0
- 另外,还有一个equals方法可以用来判断,两个式子是否是相同的:
a.equals(b)
True
其他用途还有多项式/有理式函数简化,三角几何简化,指数和对数,特殊函数,重写rewrite,微积分,级数展开,有限差分,矩阵,理解表达式树等等,感兴趣可以去查一查,这里没有需求就暂时不放上去了。
溜了。