In [1]:
import sympy as sy
In [14]:
x=sy.Symbol('x')
y=sy.Symbol('y')
x, y, z = sy.symbols('x y z') # 符号对象, 可限定 real = True , positive = True, complex = True , integer = True ...
In [41]:
f = sy.Function("f")
In [51]:
f, g = sy.symbols('f g', cls=sy.Function)
它所得到的表达式的分母部分将不含无理数。即将表达式转换为分子除分母的形式。
只能对纯符号的分式表达式进行约分
不能对函数内部的表达式进行约分,不能对带函数的表达式进行约分
可以对表达式中的任意部分进行约分,并且支持函数表达式的约分运算。
有两个可选参数——deep和recursive,默认值都为False。
当deep参数为True时,将对表达式中所有子表达式进行化简运算
当recursive参数为True时,将递归使用trigsimp()进行最大限度的化简
In [6]:
sy.integrate(6*x**5, x)
Out[6]:
In [7]:
sy.integrate(x**3, (x, 0, 10)) #定积分
Out[7]:
In [8]:
sy.integrate(6*x**5+y, x,y) #双重不定积分
Out[8]:
In [9]:
sy.integrate(x**3+y, (x, -1, 1),(y,1,3) ) #双重定积分
Out[9]:
In [55]:
print f(x).diff(x)
In [16]:
sy.diff(sy.sin(x), x) # 解析微分
Out[16]:
In [17]:
sy.diff(sy.sin(2*x), x, 2) # 高阶微分 diff(func, var, n)
Out[17]:
In [20]:
sy.diff(sy.sin(x*y),x,2,y,3) # 对表达式进行x的2阶求导,对y进行3阶求导
Out[20]:
In [21]:
sy.diff(sy.sin(2*x),x)
Out[21]:
In [22]:
sy.sin(2*x).diff(x,1)
Out[22]:
In [24]:
t=sy.Derivative(sy.sin(x),x)
# Derivative是表示导函数的类,它的第一个参数是需要进行求导的数学函数,第二个参数是求导的自变量,
# 注意:Derivative所得到的是一个导函数,它不会进行求导运算。
In [25]:
sy.limit(sy.sin(x)/x, x, 0) # 极限
Out[25]:
In [28]:
sy.summation(2*x - 1, (x, 1, y)) # 连加求和
Out[28]:
expression.subs(x, y) # 将算式中的x替换成y 替换
In [32]:
(1 + x*y).subs(x, sy.pi)
Out[32]:
expression.subs({x:y,u:v}) 使用字典进行多次替换
expression.subs([(x,y),(u,v)]) 使用列表进行多次替换
In [34]:
(1 + x*y).subs([(x, sy.pi), (y, 2)])
Out[34]:
In [36]:
# 用sy.Eq构建方程
u_max, rho_max, A, B = sy.symbols('u_max rho_max A B') # 符号对象, 可限定 real = True , positive = True, complex = True , integer = True ...
eq1 = sy.Eq( 0, u_max*rho_max*(1 - A*rho_max-B*rho_max**2) ) # 一般方程
In [52]:
eq1 = sy.Eq(f(x).diff(x)+f(x)+f(x)**2,0) # 微分方程
print eq1
sy.solve(方程,未知数) # 方程求解 ,返回值为list 方程求解
它的第一个参数是表示方程的表达式,其后的参数是表示方程中未知量的符号。
In [53]:
sy.solve(eq1,x)
In [48]:
sy.solveset(sy.sin(x)+x,x) # 即对 sy.sin(x)+x=0 求解
Out[48]:
sy.roots(expr) # 计算单变量方程expr=0的根 方程求解
In [56]:
sy.dsolve(eq1,f(x)) # 微分方程求解 微分方程求解
Out[56]:
可以对微分方程进行符号求解,它的第一个参数是一个带未知函数的表达式,第二个参数是需要进行求解的未知函数。
它在解微分方程中可以传递hint参数,指定微分方程的解法,若设置为“best”则放dsolve()尝试所有的方法并返回最简单的解。
In [57]:
from sympy.utilities.lambdify import lambdify
In [58]:
lambdify([x],f(x),modules="numpy") # 第一个参数为自变量列表
Out[58]:
In [59]:
sy.N(sy.pi,20)
Out[59]:
In [60]:
sy.pi.evalf(n=50)
Out[60]:
In [62]:
i=sy.Symbol('i')
In [64]:
f = sy.Sum(sy.Indexed('x',i)*sy.cos(i*sy.pi),(i,1,10))
f
Out[64]:
In [67]:
func = lambdify(x, f, 'numpy') # returns a numpy-ready function
print func
In [68]:
numpy_array_of_results = func(y)
numpy_array_of_results
In [ ]: