前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python sympy 模块常用功能(二)

Python sympy 模块常用功能(二)

作者头像
用户6021899
发布2019-08-14 17:03:26
2.4K0
发布2019-08-14 17:03:26
举报
  • 极限
代码语言:javascript
复制
>>> limit(sin(x)/x, x, 0)
1
>>> limit(sin(x)/x, x, oo) #正无穷处极限
0
>>> limit(sin(x) * E**x, x, -oo)#负无穷处极限
0
>>> limit(1/x, x, 0, '+') #右极限
oo
>>> limit(1/x, x, 0, '-')#左极限
-oo
>>> limit(1/sin(x), x, oo) #极限不存在
AccumBounds(-oo, oo)
  • 求导
代码语言:javascript
复制
>>> diff(cos(x), x)
-sin(x)
>>> diff(cos(x)*sin(y), x, x, x) #多次求导(对x连续求3次偏导数)
sin(x)*sin(y)
>>> diff(cos(x)*sin(y), x,3) #与上式等价,对x求3阶偏导数
sin(x)*sin(y)
>>> diff(sinh(x)/E**y, x,x,y,y,y) 
-exp(-y)*sinh(x)
>>> diff(sinh(x)/E**y, x,2,y,3)#与上式等价。对x求2阶偏导数,再对y求3阶偏导数
-exp(-y)*sinh(x)

diff也可以作为方法调用,用法同上:

代码语言:javascript
复制
>>> expr = exp(x*y*z)
>>> expr.diff(x,2,y,2,z,2)
(x**4*y**4*z**4 + 12*x**3*y**3*z**3 + 38*x**2*y**2*z**2 + 32*x*y*z + 4)*exp(x*y*z)
  • 不定积分
代码语言:javascript
复制
>>> integrate(cos(x), x)
sin(x)
>>> integrate(cos(x), x,x) #对x 2 次积分
-cos(x)
>>> integrate(cos(x), x,x,x) ##对x 3 次积分
-sin(x)
>>> integrate(cos(x), x,2) #这样写会报错
SyntaxError: invalid character in identifier

>>> integrate(sinh(x)*cosh(y), x, y)
sinh(y)*cosh(x)
>>> integrate(sinh(x)*cosh(y), y, x)
sinh(y)*cosh(x)

如果无法计算出积分表达式,则返回 Integral 对象:

代码语言:javascript
复制
>>> integrate(x**x, x)
Integral(x**x, x)
  • 定积分

单变量定积分:

代码语言:javascript
复制
>>> integrate(exp(-x), (x, 0, oo)) #(integration variable, lower limit, upper limit)
1
代码语言:javascript
复制
>>> integrate(sin(x**2), x)
3*sqrt(2)*sqrt(pi)*fresnels(sqrt(2)*x/sqrt(pi))*gamma(3/4)/(8*gamma(7/4))
  • 多重积分
代码语言:javascript
复制
>>> integrate(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo))
pi
代码语言:javascript
复制
>>> integrate(x**y*exp(-x), (x, 0, oo))
Piecewise((gamma(y + 1), re(y) > -1), (Integral(x**y*exp(-x), (x, 0, oo)), True)) #分段函数
  • 泰勒展开
代码语言:javascript
复制
>>> series(sin(x)) # 默认余项次数为6,在 x=0 处展开
x - x**3/6 + x**5/120 + O(x**6)
>>> series(exp(x), x, 1, n= 3)#在 x=1 处展开,余项次数为3
E + E*(x - 1) + E*(x - 1)**2/2 + O((x - 1)**3, (x, 1))

series 也可以作为方法调用:

代码语言:javascript
复制
>>> sin(x).series(x,1,n=3)
sin(1) + (x - 1)*cos(1) - (x - 1)**2*sin(1)/2 + O((x - 1)**3, (x, 1))

极限的方向也是用dir参数表示,"+"表示右极限,"-"表示左极限,

eries(expr, x=None, x0=0, n=6, dir='+')

  • 有限差分
代码语言:javascript
复制
>>> Derivative.as_finite_difference(f(x).diff(x)) #差分近似微分
-f(x - 1/2) + f(x + 1/2)
  • 微分方程
代码语言:javascript
复制
>>>f = Function('f')
>>> diffeq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x))
>>> dsolve(diffeq, f(x))
Eq(f(x), (C1 + C2*x)*exp(x) + cos(x)/2)
  • 级数求和
代码语言:javascript
复制
>>> i, n = var("i n")
>>> summation(i, (i, 1, n)) #summation函数用于级数求和
n**2/2 + n/2
>>> summation(1/n, (n, 1, +oo)) # 调和级数,发散
oo
>>> summation(1/n**r, (n, 1, +oo)) # 仅当r>1时 收敛
Piecewise((zeta(r), r > 1), (Sum(n**(-r), (n, 1, oo)), True))
  • 拉普拉斯变换
代码语言:javascript
复制
>>> from sympy.integrals import laplace_transform
>>> from sympy.abc import t, s, a #导入多个符号变量
laplace_transform(sin(t), t, s)
(1/(s**2 + 1), 0, True)
>>> laplace_transform(exp(t), t, s)
(1/(s - 1), 1, True)
  • 逆拉普拉斯变换
代码语言:javascript
复制
>>> from sympy.integrals.transforms import inverse_laplace_transform
>>> from sympy import exp, Symbol
>>> from sympy.abc import s, t
>>> a = Symbol(’a’, positive=True)
>>> inverse_laplace_transform(exp(-a*s)/s, s, t)
Heaviside(-a + t)
>>> inverse_laplace_transform(1/(s - 1), s, t)
exp(t)*Heaviside(t)
>>> inverse_laplace_transform(s**(-2), s, t)
t*Heaviside(t)
  • 傅里叶变换
代码语言:javascript
复制
>>> from sympy import fourier_transform, exp
>>> from sympy.abc import x, k
>>> fourier_transform(exp(-x**2), x, k)
sqrt(pi)*exp(-pi**2*k**2)
>>> fourier_transform(exp(-x**2), x, k, noconds=False)
(sqrt(pi)*exp(-pi**2*k**2), True)
  • 逆傅里叶变换
代码语言:javascript
复制
>>> from sympy import inverse_fourier_transform, exp, sqrt, pi
>>> from sympy.abc import x, k
>>> inverse_fourier_transform(sqrt(pi)*exp(-(pi*k)**2), k, x)
exp(-x**2)
>>> inverse_fourier_transform(sqrt(pi)*exp(-(pi*k)**2), k, x, noconds=False)
(exp(-x**2), True)
  • 卷积

暂未找到相关函数,可根据定义自行计算。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档