zoukankan      html  css  js  c++  java
  • 数学工具(五)符号数学

    本节介绍专用于符号计算的SymPy 库。

    包括:

    1.基本介绍

    2.方程式

    3.积分

    4.微分


    1.基本介绍

    SymPy 引人了 新的对象类。最基本的是Symbol 类,

    import sympy as sy
    
    x = sy.Symbol('x')
    y = sy.Symbol('y')
    type(x)
    sympy.core.symbol.Symbol

    可以用符号对象定义任何函数。它们不会和Python 函数混淆:

    f = x ** 2 + 3 + 0.5 * x ** 2 + 3/2-sy.sqrt(x)
    #化简
    sy.simplify(f)
    

      -sqrt(x) + 1.5*x**2 + 4.5

    2.方程式

    对于$x^2-1=3$这样的方程,可以用slove函数求解

    sy.solve(x**2-1-3) 

    [-2,2]

    3.积分

    SymPy 的另一个长处是积分和微分。下面.我们用到用于数值和模拟积分的示例的数,现在既要求出符号解,也要求出精确的数值解我们需要积分上下限的符号:

    a, b = sy.symbols('a b')
    

      定义新符号之后,可以"漂亮地打印"符号积分:

    print(sy.pretty(sy.Integral(sy.sin(x) + 0.5*x ,(x,a,b))))
    

      

    b                    
    ⌠                    
    ⎮ (0.5⋅x + sin(x)) dx
    ⌡                    
    a                    
    使用 integrate. 我们可以得积分函数的反导数 (不定积分):
    int_func = sy.integrate(sy.sin(x) + 0.5 * x, x)
    print(sy.pretty(int_func))
          2         
    0.25⋅x  - cos(x)

    有了反导数,求积分只需要三步:
    1.要求取SymPy 表达式的值,
    2.用方法subs 将数值代人对应的符号, 在
    3.新表达式上调用方法evalf:
    Fb = int_func.subs(x , 9.5).evalf(n=7) #evalf()函数可以用求出表达式的浮点数。
    Fa = int_func.subs(x, 0.5).evalf(n=7)
    #Fb 和Fa 的差就是积分的准确值:
    Fb-Fa
    24.37475
    提供量化的积分上下限,在一步中得出准确的值:
    sy.integrate(sy.sin(x) + 0.5 * x, (x, 0.5, 9.5))
    

     24.3747547180867

     

    4.微分

    对不定积分求导通常应该得出原函数我们对前面的符号反导数应用diff函数. 检查这一点:

    int_func.diff() 
    0.5*x + sin(x)
     
  • 相关阅读:
    ASP.NET MVC 扩展相关
    新.NET开发十大必备工具
    c#调用存储过程两种方法
    TweakUI取消pc喇叭声
    baidu mp3竟然还加密,太扯了
    NTLM在使用代理服务器的情况下,第三次握手可能出错
    httpclient解析gzip网页
    eclipse不能自动编译工程的解决方法
    bat设置环境变量
    java的ZipOutputStream压缩文件的两个问题(乱码和每次zip后文件md5变化)
  • 原文地址:https://www.cnblogs.com/jin-liang/p/9399662.html
Copyright © 2011-2022 走看看