3.2 使用sympy进行代数运算

初中我们学习过整式和分式的加减乘除运算,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()就会原样输出。这个过程相当于合并同类项,与之相对的是因式分解。

  1. 创建多个变量的方法:
import sympy
vrs = sympy.symbols('x1:10')

输出结果:

(x1, x2, x3, x4, x5, x6, x7, x8, x9)

其结果是一个元组。

  1. 多个变量下标从0开始
import sympy
vrs = sympy.symbols('x:10')

输出结果:

(x0,x1, x2, x3, x4, x5, x6, x7, x8, x9)
  1. 多个变量下标有两个
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()方法结合使用给代数式进行多重负值。

你可能感兴趣的:(3.2 使用sympy进行代数运算)