zoukankan      html  css  js  c++  java
  • 5.4Python数据处理篇之Sympy系列(四)---微积分

    目录

    前言

    今天讲的是,有关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 ight) 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 ight )})-->(sin{left (x ight )})

    (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 o 0}sin(x)/x)-->(1)

    (lim_{x o 0^+}​)-->(infty​)

    (lim_{x o 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} + Oleft(x^{6} ight)​)

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

    06.png

    作者:Mark

    日期:2019/03/17 周日

  • 相关阅读:
    希尔排序
    折半插入排序
    自学git心得-2
    读书笔记-1 《人月神话》
    USTCCourseCommunity 项目介绍
    自学git心得-1
    HDU 2006 求奇数的乘积
    HDU 2007 平方和与立方和
    HDU 2005 第几天?
    HDU 2004 成绩转换
  • 原文地址:https://www.cnblogs.com/zyg123/p/10548905.html
Copyright © 2011-2022 走看看