• 【python数据建模】Sympy库


    概述

    Sympy库是进行符号运算的库。
    与Scipy库的数值运算不同,Sympy的运算是在推理基础上进行的,不用考虑误差问题。
    例如,在Scipy库中, 7 \sqrt7 7 计算中使用的是近似值,但是Sympy中, 7 \sqrt7 7 是以sqrt(7)的形式显示的。

    符号类 Symbol

    Symbol 是 symPy 库中最重要的类。 如前所述,符号计算是用符号完成的。 SymPy 变量是 Symbols 类的对象。
    Symbol() 函数的参数是一个包含可以分配给变量的符号的字符串
    例如:

    from sympy import Symbol 
    x=Symbol('x') 
    y=Symbol('y') 
    expr=x**2+y**2 
    print(expr)
    """
    x**2 + y**2
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    当然,也可以类似列表传输数据。在一个语句中定义多个符号变量。

    abc模块

    Sympy中的abc模块中,所有拉丁字母和希腊字母都被定义为符号。 引用该模块,可以不用实例化符号对象,提供方便。
    例如:

    from sympy.abc import x,y,z
    print(x)
    
    • 1
    • 2

    索引定义字符

    可以使用类似于 range() 函数的语法来定义索引符号。 范围用冒号表示。 范围类型由冒号右侧的字符确定。
    例如:

    from sympy import symbols 
    x=symbols('a:5')
    """
    (a0, a1, a2, a3, a4)
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Sympy表达式的转换

    evalf()& lambdaify()转换成python函数进行数值计算

    转换成sympy表达式 sympify()

    sympify() 函数用于转换任意表达式,使其可以用作 SymPy 表达式。 在 SymPy 中转换普通的 Python 对象,例如整数对象。 整数等,字符串也被转换为 SymPy 表达式。

    import sympy as sy
    from sympy.abc import x
    expr="x**2+3*x+2" 
    expr1=sy.sympify(expr) 
    """
    x**2 + 3*x + 2
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    simplify&expand

    simplify()函数简化sympy表达式。
    expand()函数可以进行多项式展开。
    例如:

    from sympy import * 
    x=Symbol('x')
    expr=sin(x)**2 + cos(x)**2 
    print(simplify(expr))
    """
    1
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    积分

    integrate()用于计算定积分和不定积分。定积分的计算只需传递参数

    from sympy import * 
    x,y = symbols('x y') 
    expr=x**2 + x + 1 
    print(integrate(expr, x))
    """
    x**3/3 + x**2/2 + x
    """
    print(integrate(expr, (x,1)))
    """
    11/6
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    积分变换

    sympy.integrals.transforms 模块中定义了许多积分变换。
    常用的是Laplace变换和傅里叶变换,对应的函数是:laplace_transform和fourier_transform

    求方程

    由于符号 = 和 == 在 Python 中被定义为赋值和相等运算符,因此它们不能用于制定符号方程。 SymPy 提供了 Eq() 函数来建立方程。

    import sympy as sy
    from sympy.abc import x,y
    f=sy.Eq(x**2+y**2,4)
    """
    建立了方程x^2+y^2=4
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代数方程 solveset()

    solveset 的输出是解决方案的有限集。 如果没有解决方案,则返回 EmptySet

    import sympy as sy
    from sympy.abc import x
    # solveset(f, symbol, domain=S.Complexes)
    # domain:解的数域,默认在复数域上
    f=sy.Eq(x**2+2*x+1,4)
    print(sy.solveset(f,symbol=x))
    """
    {-3, 1}
    """
    f=sy.Eq(x**2,-1)
    print(sy.solveset(f,symbol=x))
    """
    {-I, I}
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    线性方程 linsolve()

    非线性方程 linsolve()

    微分方程 dsolve()

    打印输出Latex形式

    latex()函数获得sympy表达式的latex形式,方便在latex编辑器中阅读。
    例如:

    import sympy as sy
    from sympy.abc import x
    print(sy.latex(sy.sqrt(x**2)))
    """
    \sqrt{x^{2}}
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Jetson Orin NX 开发指南(3): 安装 ROS 系统
    java -数据结构,单向链表
    【一知半解】零值拷贝
    python多进程(类成员函数、log在多进程中使用、自己维护进程池)
    QT 创建多个子项目,以及调用
    RK356x U-Boot研究所(命令篇)3.3 env相关命令的用法
    AI性能优化之TensorRT(1 tensorrt简介及安装)
    kotlin 转 Java
    C++深度优化——无锁队列实现及测试
    【C++】string模拟实现
  • 原文地址:https://blog.csdn.net/Yorusimo/article/details/133621082