人生苦短

记录大学,记录生活,天道殷勤,请多关注!

人生苦短,我用Python!
大数据、机器学习、深度学习
  menu

科学计算库sympy

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.


标题:科学计算库sympy
作者:chenruhai
地址:http://www.love520.ltd/articles/2019/08/03/1564795491164.html
CSDN博客地址:https://blog.csdn.net/qq_42658739
GitHub地址:https://github.com/chenruhai

评论