zoukankan      html  css  js  c++  java
  • python(7):sympy模块

    sympy主要用于符号计算

    1,基本操作

    from sympy import*
    #from sympy import pprint
    #x=Symbol('x')#也可以这么单个定义
    #y=Symbol('y')
    x,y,i,n,t,k=symbols('x y i n t k')#注意空格,不是逗号!
    z=Symbol('z')
    print x+y+x-y
    print ((x+y)**2).expand()#展开
    print ((x+y)**2).subs(x,1)#subs(old,new)
    print ((x+y)**2).subs(x,y)
    print apart(1/((x+2)*(x+1)),x)#分离整式
    print apart((x+1)/(x-1),x)
    print together(1/x+1/y+1/z)#合并
    print together(apart((x+1)/(x-1),x),x)

    ans:

    2*x
    x**2 + 2*x*y + y**2
    (y + 1)**2
    4*y**2
    -1/(x + 2) + 1/(x + 1)
    1 + 2/(x - 1)
    (x*y + x*z + y*z)/(x*y*z)
    (x + 1)/(x - 1)

    2.极限求解

    #求极限limit(func,variable,point)

    print limit(sin(x)/x,x,0)
    print limit(x,x,oo)#oo表示无穷
    print limit(1/x,x,oo)
    print limit(x**x,x,0)

    remark:oo表示无穷, 这里sin,cos,tan 可以直接这么用

    ans:1 ,oo,  0,   1

    3.微分

    diff(func,variable)

    高阶微分:diff(sin(2*x),x,2),2表示阶数

    print diff(sin(x),x)
    #print y
    print diff(sin(2*x),x)
    print diff(tan(x),x)
    print limit((tan(x+y)-tan(x))/y,y,0)#验证上述微分
    ##高阶微分
    print diff(sin(2*x),x,2)
    
    ans:
    cos(x)
    2*cos(2*x)
    tan(x)**2 + 1
    tan(x)**2 + 1
    -4*sin(2*x)

    4.级数展开

    func.series(variable,a,b)从第a阶开始展开,10阶取不到!!

    print cos(x).series(x,0,10)
    print (1/cos(x)).series(x,0,10)
    ans:
    1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10)
    1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)

    补充:

    #三角函数公式的展开
    print sin(x+y).expand(trig=True)

    ans:sin(x)*cos(y) + sin(y)*cos(x)

    5.积分

    #积分
    print integrate(6*x**5,x)
    print integrate(sin(x),x)
    #定积分
    print integrate(x**3,(x,-1,1))
    print integrate(sin(x),(x,0,pi/2))
    ans: x
    **6 -cos(x) 0 1

    6.求解代数方程 solve

    print solve(x**4-1,x)
    print solve([x+5*y-2,-3*x+6*y-15],[x,y])
    
    ans:
    [-1, 1, -I, I]
    {x: -3, y: 1}

    7.微分方程

    f=Function('f')#注意要定义一下!!!
    #f(x).diff(x,x)+f(x)
    print dsolve(f(x).diff(x,x)+f(x),f(x))#什么意思??
    print dsolve(f(x).diff(x,x)+1,f(x))
    print dsolve(f(x).diff(x,x),f(x))
    print dsolve(diff(f(x),x)-1,f(x))#这个意思好理解
    #为什么与上式不同?
    print dsolve(diff(f(x),x)+f(x),f(x))#
    
    ans:
    Eq(f(x), C1*sin(x) + C2*cos(x))
    Eq(f(x), C1 + C2*x - x**2/2)
    Eq(f(x), C1 + C2*x)
    Eq(f(x), C1 + x)
    Eq(f(x), C1*exp(-x))

    8.矩阵化简

    a11,a12,a13,a22,a23,a33=symbols('a11 a12 a13 a22 a23 a33')
    m=Matrix([[x,y,z]])
    n=Matrix([[a11,a12,a13],[a12,a22,a23],[a13,a23,a33]])
    v=Matrix([[x],[y],[z]])
    f=m*n*v#二次型
    print f
    print f.subs({x:1,y:1,z:1})#其他方式做替换subs((x,y),(u,v))
    print f.subs((x,y,z),(1,1,1))#is ok
    #print f.subs([x,y,z],[1,1,1])#error!!
    
    ans:
    Matrix([[x*(a11*x + a12*y + a13*z) + y*(a12*x + a22*y + a23*z) + z*(a13*x + a23*y + a33*z)]])
    Matrix([[a11 + 2*a12 + 2*a13 + a22 + 2*a23 + a33]])
    Matrix([[x*(a11*x + a12*y + a13*z) + y*(a12*x + a22*y + a23*z) + z*(a13*x + a23*y + a33*z)]])

    9.级数求和

    summation

    print summation(2*i-1,(i,1,3))#1,3都会取到
    print summation(1/2**i,(i,0,oo))
    print summation(1/log(n)**n,(n,2,oo))#不能计算总和,将打印相应的求和公式
    print summation(exp(x),(x,0,4))
    print summation(I**t,(t,1,3))
    print summation((x*t)**n/factorial(n),(n,0,oo))
    print summation(log(n/k-1)*exp(I*t*k),(k,0,n))
    
    ans:
    9
    2
    Sum(log(n)**(-n), (n, 2, oo))
    1 + E + exp(2) + exp(3) + exp(4)
    -1
    exp(t*x)
    Sum(exp(I*k*t)*log(-1 + n/k), (k, 0, n))
    1
    ----END---- HAVE A GOOD ONE! 以上为本人课余自学工具书/blog的笔记整理, 常有更新, 非100%原创!且读且学习。
  • 相关阅读:
    Vector用法。
    error LNK2001的解决方法
    指针(详解)
    xxx cannot be resolved to a type
    springmvc写了方法无法访问
    java lombok包在maven已经配置,但是注解没用
    系统提供的相关intent
    Activity小结
    BrocastReceiver入门
    AppWidget入门
  • 原文地址:https://www.cnblogs.com/xuying-fall/p/8231858.html
Copyright © 2011-2022 走看看