定义代数变量
import sympy
x = sympy.Symbol('x')#单变量代数定义
y,z = sympy.symbols('y z')#多变量代数定义
o = 3*x**2+2*y**2+z**2
print(o)
>>> 3*x**2 + 2*y**2 + z**2
表达式展开、折叠、简化
展开:expand()、折叠:factor()、简化:simplify()
o = (x + y)**2
o = sympy.expand(o)
print(o)
>>> x**2 + 2*x*y + y**2
o = sympy.factor(o)
print(o)
>>> (x + y)**2
o = z*x+z*y+z*x*y
print(sympy.simplify(o))
>>> z*(x*y + x + y)
符号替换与变量赋值
符号变换:xx.subs(),变量赋值:xx.subs()、xx.evalf()
#符号变换
x,y,z,k = sympy.symbols("x,y,z,k")
result = x+y
result = result.subs([(x,z),(y,k)])
>>> k + z
#变量赋值
result.subs([(z,1),(k,2)])
>>> 3
result.evalf(subs={z:1,k:2})
>>> 3.00000000000000
构造函数
sympy.lambdify()
z = x+y
input_data = np.arange(6)
func = sympy.lambdify([x,y],z)
func(input_data,input_data)
>>> array([ 0, 2, 4, 6, 8, 10])
字符串转化为表达式
string = "x + y"
x,y = sympy.symbols("x y")
result = sympy.sympify(string)
print(result)
>>> x + y
解多元一次方程
#一元一次方程:2*x+4=8
print(sympy.solve(2*x+4-8,x))
>>> [2]
#二元一次方程:x+y=3,x-y=1
print(sympy.solve([x+y-3,x-y-1],[x,y]))
>>> {x: 2, y: 1}
#多元线性方程
import numpy as np
k1,k2,k3,k4,p = sympy.symbols('k1 k2 k3 k4 p')
jieguo = np.dot([k1,k2,k3,k4],[[0,0,0,1,0,0,1,0,1,1],
[1,3,3,1,1,2,1,1,1,1],
[8,12,6,1,4,4,1,2,1,1],
[27,27,9,1,9,6,1,3,1,1]])
result = solve([jieguo[0]-729*p/8,
jieguo[1]-243*p/4,
jieguo[2]-27*p/2,
jieguo[3]-p,
jieguo[4]-81*p/4,
jieguo[5]-9*p,
jieguo[6]-p,
jieguo[7]-9*p/2,
jieguo[8]-p,
jieguo[9]-p],[k1,k2,k3,k4])
print(result)
>>> {k1: -35*p/16, k2: 135*p/16, k3: -189*p/16, k4: 105*p/16}
微积分
求极限
#求x->0时,sin(x)/x的值
print(sympy.limit(sin(x)/x,x,0))
>>> 1
求导
o=(x + y)**2
print(sympy.diff(o,x,1))
>>> 2*x + 2*y
print(sympy.diff(o,x,2))
>>> 2
求积分
#求sin(x)的不定积分
print(sympy.integrate(sin(x),x))
>>> -cos(x)
#求exp(-x)从0到oo无穷的定积分,两个o代表无穷
print(sympy.integrate(exp(-x),(x,0,oo)))
>>> 1