sympy是一个Python的科学计算库,用一套强大的符号计算体系完成诸如多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等等计算问题。
Python以其语法简单、易上手、丰富的三方库生态,个人认为可以更优雅地解决日常生活、工作遇到的各种计算问题。
安装:
pip install sympy
虚数单位i
sympy.I #i平方 sympy.I**2
-1的平方根
sympy.sqrt(-1)
自然对数的底e:
print(sympy.log(sympy.E))
无穷大oo:
print(sympy.oo)
圆周率:
print(sympy.pi)
求n次方根 root(8,4)即求8的4次方根:
rst = sympy.root(8,4) print(rst)
求K次方以及阶乘
print(2**3) #2的3次方 print(sympy.factorial(5)) #求5的阶乘
求三角函数
print(sympy.sin(sympy.pi/2))
表达式与表达式求值
sympy可以用一套符号系统来表示一个表达式,如函数、多项式等,并且可以进行求值。
x = sympy.Symbol('x') fx = 2*x + 1 print(type(fx)) #查看fx的类型 f = fx.evalf(subs={x:6}) #传入一个x的值,求出fx print(f)
多元方程求解:
x1,y = sympy.symbols('x1 y') f1 = 2 * x1 + y f1 = f1.evalf(subs = {x1:1,y:2}) #传入自变量值求出因变量值 print(f1)
求解方程:solve()
使用sympy.solve函数解方程,该函数通常传入两个参数,
第1个参数是方程的表达式(把方程所有的项移到等号的同一边形成的式子),
第2个参数是方程中的未知数。函数的返回值是一个列表,代表方程的所有根(可能为复数根)
解普通方程:
首先定义 x
为一个符号,代表一个未知数
x = sympy.Symbol('x')
解方程:x - 6 = 0 返回一个解组成的列表
print(sympy.solve(x - 6,x))
解方程组
x,y = sympy.symbols('x y') print(sympy.solve([x-y-8,x+y-2],[x,y])) #第一个参数传入的方程组(也就是表达式), #第二个参数传入的是方程组的变量,两个参数都是以列表形式传入
求和:summation(a,b)
第一个参数传入求和的表达式,第二个参数以元组形式传入求和的相关信息
第二个参数的元组的第一个参数是变量、第二个参数是变量起始、第三个参数是变量上限。
n = sympy.Symbol('n') print(sympy.summation(2 * n, (n,1,100)))
解带有求和式的方程
x = sympy.Symbol('x') #声明符号变量 i = sympy.Symbol('i',integer = True) f = sympy.summation(x,(i,1,5)) + 10 * x - 15 #构造表达式 reslute = sympy.solve(f,x) #第一个参数是表达式,第二个是变量;求解结果 print(reslute)
求极限:
x = sympy.Symbol('x') f1 = sympy.sin(x)/x #声明表达式 sympy.limit(f1,x,0) #求解表达式是f1,变量x趋于0的极限
求导:
x= sympy.Symbol('x') f = x**2+2*x+1 print(sympy.diff(f,x)) #第一个参数是表达式,第二个参数是符号变量、返回一个<class 'sympy.core.add.Add'>类型的结果
多元函数求偏导
y = sympy.Symbol('y') f3 = x**2+2*x+y**4 print(sympy.diff(f3,x)) #对x求偏导 print(sympy.diff(f3,y)) #对y求偏导
求定积分:sympy.integrate函数:
第一个参数填入被积表达式,第二个参数填入一个元组【元组的第一个参数是变量、第二个参数是下限、第二个参数是上限】
#求解复杂积分的时候,遵循变量嵌套原则
x = sympy.Symbol('x') f = 2 * x print(sympy.integrate(f,(x,0,1)))
求解不定积分:简单来说不定积分就是没有上下限的积分:
x = sympy.Symbol('x') f = sympy.exp(x)+3**2+sympy.log(x) print(sympy.integrate(f,x)) #求不定积分,此时第二个参数填入的不再是元组,而是直接传入变量,因为没有上下限。当然也可以作为元组形式传入元组
求解微分方程 y’=4xy [即(dy/dx) = 4xy] :
#定义符号变量 x=sympy.Symbol('x') #定义符号函数、f可以与x构成函数方程f(x)、因为x就是自变量、f是因变量。 f = sympy.Function('f') fx = sympy.diff(f(x),x) print(sympy.dsolve(fx-2*x*f(x),f(x))) #dsolve函数第一个参数传入微分方程表达式,第二个参数传入函数【f与x构成的函数f(x)】
矩阵操作交给numpy还是比较习惯numpy.