zoukankan      html  css  js  c++  java
  • Sympy 库的使用

    参考资料:

    官方文档,天下第一:https://docs.sympy.org/latest/index.html  

    知识点:

    What is Sym?

    符号计算以符号的方式处理数学对象的计算。这意味着数学对象被精确地表示,而不是近似地表示。例如,1/3 如果数值表示,那么它就是0.3333333.... 这是不精确的,如果符号表示就是1/3 ,它是精确的。

    Why Sym?

    首先,SymPy是完全免费的。它是开源的,并且是在自由的BSD许可下授权的,所以你可以修改源代码,如果你想的话甚至可以出售它。这与流行的商业系统如Maple或Mathematica形成鲜明对比,后者的许可证费用高达数百美元。

    其次,SymPy使用Python。大多数计算机代数系统都发明了自己的语言。SymPy 则不是。SymPy完全是用Python编写的,完全是用Python执行的。这意味着,如果您已经了解Python,那么开始使用SymPy会容易得多,因为您已经知道语法(如果您不了解Python,则非常容易学习)。我们已经知道Python是一种设计良好、经过战斗考验的语言。SymPy开发人员对自己编写数学软件的能力充满信心,但编程语言设计则完全不同。通过重用现有的语言,我们能够专注于那些重要的事情:数学。 

    小试牛刀

    from sympy import *
    
    x,t = symbols('x t')
    init_printing(use_unicode=True)
    ret = diff(sin(x) * exp(x), x)  # diff() 函数是求导函数
    print(ret)  # exp(x)*sin(x) + exp(x)*cos(x)
    
    ret2 = integrate(exp(x) * sin(x) + exp(x) * cos(x), x)  # integrate() 计算积分
    print(ret2)  # sin(x)*exp(x)
    
    ret3 = integrate(sin(x ** 2), (x, -oo, oo))  # 计算从-oo 到 oo 的积分
    print(ret3)  # sqrt(2)*sqrt(pi)/2
    
    ret4 = limit((sin(x) / x), x, 0)  # 计算x 趋近于0 的极限值
    print(ret4)  # 1
    
    ret5 = solve(x ** 2 - 2, x)  # 求解方程 x**2 -2 =0 x 的值
    print(ret5) # [-sqrt(2), sqrt(2)]
    
    # Solve the differential equation y‘’−y = e^t. 求解微分方程 y(t)
    y = Function('y')
    ret6 = dsolve(Eq(y(t).diff(t,t) - y(t),exp(t)),y(t))
    print(ret6)  # Eq(y(t), C2*exp(-t) + (C1 + t/2)*exp(t))
    
    
    # 求矩阵的特征值
    ret7 = Matrix([[1,2],[2,2]]).eigenvals()
    print(ret7) # {3/2 - sqrt(17)/2: 1, 3/2 + sqrt(17)/2: 1}
    
    # 使用Latex 格式打印数学式子
    ret8 = latex(sqrt(2)*sqrt(pi)/2)
    print(ret8)  # frac{sqrt{2} sqrt{pi}}{2}
    View Code
    from sympy import *
    
    x, y, z = symbols("x y z")
    
    # 判断两个表达式是否相同
    a = (x + 1) ** 2
    b = x ** 2 + 2 * x + 1
    print(simplify(a - b) == 0)
    
    # .equals() 是通过在随机取点上的数值得到是否相等
    print(a.equals(b))
    
    # sympy 中幂用的是 ** 因为Python中^ 表示的是异或
    # sympy 中分数表达要用 Rational(),因为Python中的/ 表示的是除法
    print(x ** 2)
    print(x + Rational(1, 2))
    View Code
  • 相关阅读:
    微服务之初识微服务
    常见的认证机制及JSON WEB TOKEN
    深入理解缓存之缓存预热与淘汰策略
    深入理解缓存之缓存和数据库的一致性
    深入理解缓存之缓存存在的问题及应对措施
    深入理解缓存之常见的缓存算法
    计算机网络之HTTP、HTTPS、HTTP2
    计算机网络之TCP(三次握手、四次挥手等),UDP及DNS
    计算机网络之网络体系架构与IP
    深入理解MyBatis(四)--缓存
  • 原文地址:https://www.cnblogs.com/zach0812/p/13326342.html
Copyright © 2011-2022 走看看