5.4Python数据处理篇之Sympy系列(四)---微积分

目录

[TOC]

前言

今天讲的是,有关sympy的微积分部分的知识。

对应官网的知识:Calculus

官网教程

https://docs.sympy.org/latest/tutorial/calculus.html

(一)求导数-diff()

1.一阶求导-diff()

(1)说明:

语法是:diff(expr,x)

(2)源代码:

from sympy import *


# 初始化
x = symbols('x')

# 表达式
expr1 = cos(x)

expr2 = exp(x**2)


# 求导
r1 = diff(expr1, x)
r2 = diff(expr2, x)


print("r1:", r1)
print("r2:", r2)

(3)输出:

\cos(x) --> -\sin(x)

e^{x^2} --> 2xe^{x^2}

01.png

2.多阶求导-diff()

(1)说明:

多阶求导同样的使用diff(),其有两种形式

  1. 带参数中,添加几个x,就是对x的几次求导。diff(expr, x, x,x……)
  2. 用数字来控制所求的阶数:diff(expr, x, n)

(2)源代码:

from sympy import *


# 初始化
x = symbols('x')

# 表达式
expr1 = x**4


# 第一种形式多阶求导
r1 = diff(expr1, x)
r2 = diff(expr1, x, x)
r3 = diff(expr1, x, x, x)

print("="*30)
print(r1)
print(r2)
print(r3)

# 第二种形式多阶求导
r4 = diff(expr1, x, 1)
r5 = diff(expr1, x, 2)
r6 = diff(expr1, x, 3)

print("="*30)
print(r4)
print(r5)
print(r6)

(3)输出:

x^4 --> 24x

02.png

3.求偏导数-diff()

(1)说明:

diff()也可以单独对一个变量求导,这便是偏导数。

(2)源代码:

from sympy import *


# 初始化
x, y, z = symbols('x y z')

# 表达式
expr1 = exp(x*y*z)

# 求导
r1 = diff(expr1, x, y, y, z, z, z, z)
r2 = diff(expr1, x, 1, y, 2, z, 4)

print("r1:", r1)
print("r2:", r2)

print(latex(r1))
print(latex(r2))

(3)输出:

e^{xyz} --> x^{3} y^{2} \left(x^{3} y^{3} z^{3} + 14 x^{2} y^{2} z^{2} + 52 x y z + 48\right) e^{x y z}

03.png

(二)求积分-integrate()

(1)说明:

求积分有三种形式,并且都用的是integrate()方法

  1. 求不定积分:integrate(expr, var)
  2. 求定积分:integrate(expr, (var, min, max))
  3. 求多重积分:integrate(expr, (var1, min, max),(var2,min,max))

(2)源代码:

from sympy import *


# 初始化
x, y = symbols('x y')

# 表达式
expr1 = cos(x)
expr2 = exp(-x)
expr3 = exp(-x**2-y**2)

# 求不定积分
r1 = integrate(expr1, x)

# 求定积分
r2 = integrate(expr2, (x, 0, oo))

# 求多重积分
r3 = integrate(expr3, (x, -oo, oo), (y, -oo, oo))

print("r1:", r1)
print("r2:", r2)
print("r3:", r3)

(3)输出:

\cos{\left (x \right )}-->\sin{\left (x \right )}

\int_{0}^\infty{e^{- x}dx}​-->1​

\int_{-\infty}^\infty \int_{-\infty}^\infty e^{- x^{2} - y^{2}}dxdy-->\pi

04.png

(三)求极限-limit()

(1)说明:

求极限使用limit(),其有下两种使用方法:

  1. 趋进某个点的极限:limit(expr, var, doit)
  2. 从侧边趋进某个值的极限:limit(expr, var,doit, "+") (左侧趋进同理)

注:sympy里,不可以使用无穷的趋进。

(2)源代码:

from sympy import *


# 初始化
x = symbols('x')

# 表达式
expr1 = sin(x)/x
expr2 = 1/x

# 求趋于某个值的极限
r1 = limit(expr1, x, 0)

# 正向趋进
r2 = limit(expr2, x, 0, '+')

# 负向趋进
r3 = limit(expr2, x, 0, '-')

print(r1)
print(r2)
print(r3)

(3)输出:

\lim_{x \to 0}\sin(x)/x-->1

\lim_{x \to 0^+}​-->\infty​

\lim_{x \to 0^-}-->-\infty​

05.png

(四)级数展开-series()

1.说明:

级数展开请使用:series(expr, x0, xn),使用.removeO()去除尾数。

2.源代码:

from sympy import *


# 初始化
x = symbols('x')

# 表达式
expr1 = exp(sin(x))

# 级数展开
r1 = expr1.series(x, 0, 6)

# 去除尾数
r2 = expr1.series(x, 0, 6).removeO()

print(r1)
print(r2)

3.输出:

e^{\sin(x)}​-->1 + x + \frac{x^{2}}{2} - \frac{x^{4}}{8} - \frac{x^{5}}{15} + O\left(x^{6}\right)​

e^{\sin(x)}-->- \frac{x^{5}}{15} - \frac{x^{4}}{8} + \frac{x^{2}}{2} + x + 1​

06.png

作者:Mark

日期:2019/03/17 周日

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Simplification print(“字符串”),5/2和5//2的结果是不同的5/2为2.5,5//2为2...
    麦牛2013阅读 9,947评论 1 2
  • 简介 SymPy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简 洁、易于...
    ACphart阅读 4,235评论 0 1
  • 目录 [TOC] 前言 符号化运算也是数值运算中的一个主要的领域,今天我们来学习以下,python里强大的符号运算...
    张一根阅读 7,532评论 0 3
  • 今夜七夕,关乎爱情的故事与祝福满屏飞。 或许应该庆幸自己生活在这样一个信息发达的世界,像我这么传统老土到木讷的女人...
    往事水迢迢阅读 4,202评论 5 3
  • 杂货铺再也开不下去。小小的围村,处处都留着和她有关的记忆。他站在那棵树前面,刻痕仿佛还是新的。 那辆车是从市区的方...
    籽盐阅读 1,579评论 0 0