美文网首页
Sympy:Getting started

Sympy:Getting started

作者: ACphart | 来源:发表于2018-08-16 10:49 被阅读18次

    简介

    • SymPy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简 洁、易于理解和扩展。它完全由Python写成,不依赖于外部库。SymPy支持符号计算、高精度计算、模式匹配、绘图、解方程、微积分、组合数学、离散 数学、几何学、概率与统计、物理学等方面的功能。

    安装及导入

    • 使用命令行执行conda install sympypip install sympy即可
    • 以下示例代码事先均已from sympy import *

    基本数值类型

    实数、有理数和整数

    • SymPy有三个内建的数值类型:实数,有理数和整数。有理数类用两个整数来表示一个有理数,分子与分母,如sympy.Rational(1, 2)代表1/2

    特殊的常数

    • 我们也可以有一些特殊的常数,像epi,它们会被当作符号去对待。(1+pi不会求得值,反而它会保持为1+pi),若要求出表达式的浮点值,可以使用evalf()函数,如下:
    >>> pi**2
    pi**2
    >>> pi.evalf()
    3.14159265358979
    >>> (pi+exp(1)).evalf()
    5.85987448204884
    
    • 如果对浮点数计算有确切的精度要求,或者要用于精确的数值计算,可用如下方法:
    >>> (1/x).evalf(subs={x: 3.0}, n=21)
    0.333333333333333333333
    

    subs表示用数值替换变量进行计算,n指示小数位数。

    无穷大

    • 有一个无穷大的类型oo
    >>> oo + 1
    oo
    >>> print(oo > 99999)
    True
    

    定义变量与表达式

    • symbols()函数用以定义变量,之后可以再定义表达式
    >>> eg = symbols('x')
    >>> eg + 1
    x + 1
    >>> z = symbols('z')
    >>> expr = z**2 + 1
    >>> print(expr)
    z**2 + 1
    
    • 也可以在定义变量的时候指定变量类型
    >>> x = Symbol("x", real=True)
    >>> y = Symbol("y", integer=True)
    >>> z = Symbol("x", complex=True)
    
    · 后面实例代码中所用的变量均需先定义好。

    变量替换函数subs()

    • 调用方式为subs(*args, **kwargs)
    >>> x = symbols('x')
    >>> expr = x + 1
    >>> expr.subs(x, 2)
    3
    >>> expr.subs(x, pi)
    pi + 1
    >>> (1 + x*y).subs({x:1, y:2})
    3
    >>> (1 + x*y).subs([(x, 1), (y, 2)])
    3
    >>> reps = [(x, 1), (y, 2)]
    >>> (1 + x*y).subs(reps)
    3
    

    复数

    使用sympy.I

    >>> x = Symbol("x")
    >>> exp(I*x).expand()
    exp(I*x)
    >>> exp(I*x).expand(complex=True)
    I*exp(-im(x))*sin(re(x)) + cos(re(x))*exp(-im(x))
    >>> x = Symbol("x", real=True)
    >>> exp(I*x).expand(complex=True)
    I*sin(x) + cos(x)
    

    函数

    支持初等函数、阶乘fractorial(x)、伽玛函数、Zeta函数

    多项式

    • PASS

    代数式展开,apart(expr, x)

    >>> 1/((x+2)*(x+1))
          1
    ───────────────
    (2 + x)*(1 + x)
    >>> apart(1/((x+2)*(x+1)), x)
      1       1
    ───── - ─────
    1 + x   2 + x
    

    代数式的合并,together(expr, x)

    >>> together((1/(1+x) - 1/(2+x)), x)
    1/((x + 1)*(x + 2))
    

    微积分

    极限

    使用limit( f(x), x, p),即计算x -> pf(x)的极限。

    >>> limit(sin(x)/x, x, 0)
    1
    >>> limit(1/x, x, oo)
    0
    
    • 求导,使用diff(f(x), x, n)即求f(x)n阶导数
    >>> diff(sin(2*x), x, 1)
    2 * cos(2*x)
    >>> diff(sin(2*x), x, 2)
    -4 * sin(2*x)
    

    级数展开

    使用series(var, point, order)

    >>> cos(x).series(x, 0, 10)
    1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10)
    

    积分

    sympy支持不定积分、超越函数与特殊函数的定积分,使用integrate(f(x), x)求不定积分,使用integrate(f(x), (x, a, b))求定积分:

    >>> integrate(6*x**5, x)
    x**6
    >>> integrate(exp(-x**2)*erf(x), x)
    pi**(1/2)*erf(x)**2/4
    >>> integrate(sin(x), (x, 0, pi/2))
    1
    >>> integrate(exp(-x), (x, 0, oo))
    1
    >>> integrate(log(x), (x, 0, 1))
    -1
    

    微分方程

    • pass

    代数方程

    • pass

    线性代数

    矩阵

    矩阵由矩阵类创建,既可以是数值矩阵,也可以是代数矩阵

    >>> from sympy import Matrix
    >>> Matrix([[1,0], [0,1]])
    [1, 0]
    [0, 1]
    >>> Matrix([[1, x], [y, 1]])
    [1, x]
    [y, 1]
    

    系数匹配

    使用 match()方法,引用Wild类,来执行表达式的匹配。该方法会返回一个字典。

    >>> x = Symbol(‘x‘)
    >>> p = Wild(‘p‘)
    >>> (5*x**2).match(p*x**2)
    {p_: 5}
    >>> q = Wild(‘q‘)
    >>> (x**2).match(p*x**q)
    {p_: 1, q_: 2}
    

    打印输出

    标准

    print()pprint()

    >>> print(1/((x+2)*(x+1)))
    1/((x + 2)*(x + 1))
    >>> pprint(1/((x+2)*(x+1)))
          1
    ───────────────
    (2 + x)*(1 + x)
    

    LaTex、MathML

    >>> from sympy import Integral, latex
    >>> pprint(latex(Integral(x**2, x)))
    \int x^{2}\, dx
    >>> print(mathml(x**2))
    '<apply><power/><ci>x</ci><cn>2</cn></apply>'
    

    相关文章

      网友评论

          本文标题:Sympy:Getting started

          本文链接:https://www.haomeiwen.com/subject/aaggbftx.html