初中我们学习过整式和分式的加减乘除运算,sympy也可以实现这个功能。
3.2.1 整式加减乘除运算
例如:
>>> from sympy import * #导入sympy方法
>>> x = Symbol('x')# 符号化一个运算对象或者变量。
>>> 3*x+5*x+4
8*x + 4
Symbol()方法符号化一个运算对象或者变量,当想使用符号化的变量时就可以使用这个方法。我们还可以同时定义几个符号化变量。
>>> x,y=symbols('x y')
>>> x**2+y**2+2*x**2+4*y**2
3*x**2 + 5*y**2
>>>
要注意symbols()函数首字母不是大写,其参数是一个用空格分开的字符串。如果需要进行展开代数式然后在合并同类项,我们可以使用simplify()函数,相当于化简代数式。
例如:
>>> from sympy import *
>>> x,y= symbols('x y')
>>> a=(x+y)**2
>>> a-x**2
-x**2 + (x + y)**2
>>> simplify(a-x**2)
y*(2*x + y)
>>>
simplify()函数的功能是展开之后在于进行运算。如果不使用simplify()就会原样输出。这个过程相当于合并同类项,与之相对的是因式分解。
- 创建多个变量的方法:
import sympy
vrs = sympy.symbols('x1:10')
输出结果:
(x1, x2, x3, x4, x5, x6, x7, x8, x9)
其结果是一个元组。
- 多个变量下标从0开始
import sympy
vrs = sympy.symbols('x:10')
输出结果:
(x0,x1, x2, x3, x4, x5, x6, x7, x8, x9)
- 多个变量下标有两个
import sympy
vrs = sympy.symbols('x:2:10')
print(vrs)
输出结果
(x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19)
3.2.2 代数式展开
代数式的展开是有理式的乘法运算。
from sympy import *
x,y= symbols('x y')
a=(x+y)**2
apart(a,x)
或者
from sympy import *
x,y= symbols('x y')
a=(x+y)**2
expand(a)
运行结果都是
x**2 + 2*x*y + y**2
看看apart()和expand()的区别
from sympy import *
x,y= symbols('x y')
a=(x+y)**2
print apart(a,x)
print apart(a,y)
b= (x+y)**4
print apart(b,y)
print expand(b)
运行结果是:
x**2 + 2*x*y + y**2
x**2 + 2*x*y + y**2
x**4 + 4*x**3*y + 6*x**2*y**2 + 4*x*y**3 + y**4
x**4 + 4*x**3*y + 6*x**2*y**2 + 4*x*y**3 + y**4
看看apart()和expand()输出结果并没有区别。
3.2.4代数式合并
代数式的合并相当于分式运算
from sympy import *
x,y= symbols('x y')
b=(1/x+1/y)
together(b,x)*2
运行结果是
2*(x + y)/(x*y)
3.2.5 因式分解
>>> sympy.factor(x**2-1)
(x - 1)*(x + 1)
>>>
>>> sympy.factor(x**2-2*x+1)
(x - 1)**2
只需调用factor()函数即可把一个多项式进行因式分解。
3.2.6 代数式求值
from sympy import *
x,y= symbols('x y')
a=(x+y)**2
print a.subs(x,1)#把1代替x。
pprint (a.subs(y,2))#把2代替y。
b= (x+y)**4
print b.evalf(subs={x:1,y:2})
print b.subs({x:1,y:2})
运行结果是:
(y + 1)**2
2
(x + 2)
81.0000000000000
81
subs()代数式方法就是把变量替换(substitute)为数字。evalf()与subs()方法结合使用给代数式进行多重负值。