sympy介绍:
Sympy是一个数学符号库(sym代表了symbol,符号),包括了积分,微分方程等各种数学运算方法,为python提供了强大的数学运算支持。对于图像来说,虽然都是做离散的计算,操作最多的还是numpy里的数组,但实际上,这个库包含了积分微分,三角等最基本的数学运算,可以说是工科最基本的,用起来媲美matlab。 --摘自网络
Sympy安装方法
安装命令:pip install sympy
当然如果使用anacanda工具,是自带了这个sympy的包,无需安装导入即可使用
1.简单看下例子:
In [4]:
# x**2 代表x²,sqrt(x)表示√x
import sympy,math
math.sqrt(2)**2
Out[4]:
2.0000000000000004
In [3]:
sympy.sqrt(2)**2
Out[3]:
2
In [7]:
x = sympy.Symbol('x')
sympy.sqrt(x)**2
Out[7]:
x
In [8]:
sympy.sqrt(8)
Out[8]:
2*sqrt(2)
In [20]:
from sympy import *
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
a = Symbol('a')
b = Symbol('b')
c = Symbol('c')
#等同于 x,y,z,a,b,c = symbll('x,y,z,a,b,c')
#展开式
f = (x+1)**2
print(expand(f))
x**2 + 2*x + 1
In [19]:
f.simplify()
print(f)
(x + 1)**2
2.solve方程自动求解
f(x) = {2x - y + z = 10 {3x + 2y - z = 16 {x + 6y - z = 28
In [21]:
f1 = 2*x - y + z -10
f2 = 3*x + 2*y -z -16
f3 = x + 6*y -z -28
solve([f1,f2,f3])
Out[21]:
{x: 46/11, y: 56/11, z: 74/11}
3.limit求极限
limit可以作为普通的代入化简求值方法,比如f = (x+2)^2 +1 用 x = a+1代入,得到a^2 + 6*a + 10
In [22]:
f = (x+1)**2 + 1
limit(f ,x, a+1)
Out[22]:
a**2 + 6*a + 10
求极限lim x趋向0 sinx/x
In [28]:
f = sin(x)/x
limit(f, x, 0)
Out[28]:
1
从负方向或者从正向逼近,可以用dir‘+’或者‘-’
In [33]:
f = sin(x)/x
limit(f, x, 0,dir = '-')
Out[33]:
1
In [40]:
# 求解:lim n趋向于无穷大((n+3)/(n+2))** n 无穷大用oo表示,负无穷用-oo表示
n = Symbol('n')
limit(((n+3)/(n+2))**n,n,oo)
Out[40]:
E
4.diff求导
diff(函数,自变量,求导次数)
In [41]:
diff(sin(2*x),x)
Out[41]:
2*cos(2*x)
In [42]:
sin(2*x).diff(x)
Out[42]:
2*cos(2*x)
In [43]:
diff(sin(2*x), x, 2)
Out[43]:
-4*sin(2*x)
In [44]:
diff(sin(x*y),x,2,y,3)
Out[44]:
x*(x**2*y**2*cos(x*y) + 6*x*y*sin(x*y) - 6*cos(x*y))
5.dsolve()计算微分方程
In [54]:
k=Function('k')
dsolve(k(x).diff(x, x) + k(x), k(x))
Out[54]:
Eq(k(x), C1*sin(x) + C2*cos(x))
6.intergrate积分计算
In [55]:
f = x**2 +1
integrate(f, (x,-1,1))
Out[55]:
8/3
1.定积分求解
{0 e**x = 1
{-oo
In [56]:
integrate(exp(x),(x, -oo ,0))
Out[56]:
1
2.不定积分求解
{(3x**2+1)dx = 3x + x
In [57]:
f = 3*x**2 +1
integrate(f,x)
Out[57]:
x**3 + x
3.双重定积分
{4 {1((3/4)*x +2y)dxdy
{-3{0
In [58]:
f = (4/3)*x + 2*y
integrate(f,(x,0,1),(y,-3,4))
Out[58]:
11.6666666666667
4.双重不定积分
{x {1((3/4)*x +2y)dxdy
{-x{0
In [59]:
f = (4/3)*x + 2*y
integrate(f,(x,0,1),(y, -x, x))
Out[59]:
1.33333333333333*x
Sympy源码库:https://github.com/sympy/sympy