基本操作

在开始之前我们先输入
>>> from sympy import *
>>> x, y, z = symbols("x y z")

为一个变量的赋值不限于一个固定的值比如
>>> expr = cos(x)+1
>>> expr.subs(x,x+y)
cos(x + y) + 1
这里我们让x+y的表达式赋值给x带入得到
cos(x + y) + 1
不过,尽量不要这样做,因为容易混淆。你可以写成z+y,这样才像换元法。

处理三角函数时,你可以用expand_trig(expr)展开,例如
>>> expr = sin(2*x) + cos(2*x)
>>> expand_trig(expr)
2*sin(x)*cos(x) + 2*cos(x)**2 - 1
再给一个例子:
>>> expand_trig(expr)
-8*sin(x)**3*cos(x) + 4*sin(x)*cos(x)

在处理多个变量赋值时,你可以这样写
>>> expr = x**3 + 4*x*y - z
>>> expr.subs([(x, 2), (y, 4), (z, 0)])
40

看上去挺麻烦,不过,一般不要求过高的运算速度时,也可以这样,显然下面便于记忆
>>>expr.subs(x,2).subs(y,4).subs(z,0)
40

在某些情况下你可能需要一个值而不是表达式
例如
>>>expr = sqrt(8)
>>>expr.evalf()
2.82842712474619
你也可以通过设置evalf来得到精确的位数
>>>pi.evalf(20)#pi 就是圆周率
配合前面的subs你可以这样写
>>> sin(2*x).subs(x,2.4).evalf()
-0.996164608835841

有时候,我们需要形象的表示比如积分
>>>Integral(sqrt(1/x),x)
在输入这个之前输入一次
>>>init_session()
>>> Integral(sqrt(1/x),x)

⎮ ___
⎮ ╱ 1
⎮ ╱ ─ dx
⎮ ╲╱ x

接下来是常用的操作
化简
>>> simplify(sin(x)**2 + cos(x)**2)
1
>>> simplify((x**3 + x**2 - x - 1)/(x**2 + 2*x + 1))
x - 1
>>>simplify(gamma(x)/gamma(x - 2))
>>>(x - 2)⋅(x - 1)
Here, gamma(x) is Γ(x), the gamma function. We see that simplify() is capable of handling a large class of expressions.


展开(分解因式)
>>> expand((x + 1)**2)
2
x + 2⋅x + 1
>>> expand((x + 2)*(x - 3))
2
x - x - 6

合并因式
>>> factor(x**3 - x**2 + x - 1)
>>> factor(x**2*z + 4*x*y*z + 4*y**2*z)

合并同类项,比如关于x合并, x+xy 会被合并为 x(y+1)

约分,化简成p/q形式。
>>> expr = 1/x + (3*x/2 - 2)/(x - 4)
>>> expr
3⋅x
─── - 2
2 1
─────── + ─
x - 4 x
>>> cancel(expr)
2
3⋅x - 2⋅x - 8
──────────────
2
2⋅x - 8⋅x

apart 将分子分解,形成多个p/q相加
>>>expr = (4*x**3 + 21*x**2 + 10*x + 12)/(x**4 + 5*x**3 + 5*x**2 + 4*x)
>>>apart(expr)
>>>(2*x - 1)/(x**2 + x + 1) - 1/(x + 4) + 3/x

三角函数的生幂与将幂、
>>>trigsimp(sin(x)**4 - 2*cos(x)**2*sin(x)**2 + cos(x)**4)
cos(4*x)/2 + 1.2
>>>expand_trig(sin(x + y))
sin(x)⋅cos(y) + sin(y)⋅cos(x)

log函数的操作
log在标准库中都是以e为底数
同时ln(x)与log(x)相同
>>> ln(x)
log(x)
展开log
>>>expand_log(ln(x**y),force= True)
ylog(x)
>>> logcombine(log(x) + log(y),force=True)
log(x⋅y)

 

posted @ 2017-03-12 20:49  hello827840348  阅读(106)  评论(0编辑  收藏  举报