美文网首页
SymPy:符号运算库介绍 (1)

SymPy:符号运算库介绍 (1)

作者: autumn1919 | 来源:发表于2019-05-06 17:53 被阅读0次

    1.1 欧拉恒等式

    e^{i\pi}+1=0

    In [1]: from sympy import * #导入sympy 库
    In [2]: E**(I*pi)+1
    Out[2]: 0
    

    1.2 expand():展开表达式

    从熟知的公式入手:
    e^{ix}=cosx+isinx
    应用sympy库的expand函数将e^{ix}展开:

    In [4]: x=Symbol("x",real=true)  #定义x为实数
    In [5]: expand(exp(I*x),complex=true)  #complex 设置表达式有实数与虚数部分
    Out[5]: I*sin(x) + cos(x)
    

    1.3 series():泰勒展开

    e^{ix}进行泰勒展开:

    In [6]: tmp=series(exp(I*x),x,0,10)
    In [7]: tmp
    Out[7]: 1 + I*x - x**2/2 - I*x**3/6 + x**4/24 + I*x**5/120 - x**6/720 - I*x**7/5040 + x**8/40320 + I*x**9/362880 + O(x**10)
    

    根据欧拉公式,虚数项之和应等于sin(x)的泰勒级数,而实数项之和应等于cos(x)的展开。

     # 获得e^(ix)的实部
    In [8]: re(tmp) 
    Out[8]: x**8/40320 - x**6/720 + x**4/24 - x**2/2 + re(O(x**10)) + 1
    # 对 cos(x)进行展开
    In [9]: series(cos(x),x,0,10)
    Out[9]: 1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10)
    # 获得e^(ix)的虚部
    In [10]: im(tmp)
    Out[10]: x**9/362880 - x**7/5040 + x**5/120 - x**3/6 + x + im(O(x**10))
    #对 sin(x)进行展开
    In [11]: series(sin(x),x,0,10)
    Out[11]: x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 + O(x**10)
    

    1.4 integrate:积分的运算

    \int xsin(x) d x=-xcos(x)+sin(x)

    #计算不定积分
    In [12]: integrate(x*sin(x),x)
    Out[12]: -x*cos(x) + sin(x)
    

    \int_0^{2\pi}xsin(x) d x =-2\pi

    #计算定积分
    In [13]: integrate(x*sin(x),(x,0,2*pi))
    Out[13]: -2*pi
    

    1.5 表达式操作

    • simplify:表达式变换与化简:
      (x+2)^2-(x+1)^2=2x+3
    In [14]: simplify((x+2)**2-(x+1)**2)
    Out[14]: 2*x + 3
    
    • radsimp()函数可以实现分母有理化的操作:
      \frac{1}{\sqrt{5}+2\sqrt{2}}=\frac{-\sqrt{5}+2\sqrt{2}}{3}
    In [15]: radsimp(1/(sqrt(5)+2*sqrt(2)))
    Out[15]: (-sqrt(5) + 2*sqrt(2))/3
    
    • radsimp()函数对符号表达式的处理:
      \frac{1}{y\sqrt{x}+x\sqrt{y}}
    In [3]: x,y=symbols("x,y")
    In [4]: radsimp(1/(y*sqrt(x)+x*sqrt(y)))
    Out[4]: (-sqrt(x)*y + x*sqrt(y))/(x*y*(x - y))
    
    • cancel()函数对分子分母进行约分操作:
    In [5]: cancel((x**2-1)/(1+x))
    Out[5]: x - 1
    
    • apart()函数对表达式进行部分因式分解,将有理函数变为数个分子及分母次数较小的有理函数。下面是对传递函数的分解:
      \frac{1}{s^3+s^2+s+1}=-\frac{s-1}{2s^2+2}+\frac{1}{2s+2}
    In [7]: s=symbols("s")
    In [8]: trans_fun=1/(s**3+s**2+s+1)
    In [9]: apart(trans_fun)
    Out[9]: -(s - 1)/(2*(s**2 + 1)) + 1/(2*(s + 1))
    

    相关文章

      网友评论

          本文标题:SymPy:符号运算库介绍 (1)

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