zoukankan      html  css  js  c++  java
  • SciPy 积分

    章节


    Scipy中的integrate模块提供了很多数值积分方法,例如,一重积分、二重积分、三重积分、多重积分、高斯积分等等。

    下面介绍几种常用的积分函数。

    一重积分

    SciPy积分模块中,quad函数是一个重要函数,用于求一重积分。例如,在给定的a到b范围内,对函数f(x)求一重积分。

    $$int_a^bf(x)dx$$

    quad的一般形式是scipy.integrate.quad(f, a, b),其中f是求积分的函数名称,ab分别是下限和上限。

    示例

    让我们看一个高斯函数的例子,求0到5范围内的积分。

    首先需要定义函数$→f(x)=e^{-x2}$,这可以使用lambda表达式来表示,然后使用quad方法对其求一重积分。

    import scipy.integrate
    from numpy import exp
    f = lambda x:exp(-x**2)
    i = scipy.integrate.quad(f, 0, 5)
    print(i)
    

    输出

    (0.8862269254513955, 2.3183115159980698e-14)
    

    quad函数返回两个值,第一个值是积分的值,第二个值是对积分值的绝对误差估计。

    示例

    如果积分的函数f带系数参数,即:

    $$I(a,b) = int_01(ax2+b)dx$$

    那么a和b可以通过args传入quad函数:

    from scipy.integrate import quad
    
    def f(x, a, b):
        return a * (x ** 2) + b
    
    ret = quad(f, 0, 1, args=(3, 1))
    print (ret)
    

    输出

    (2.0, 2.220446049250313e-14)
    

    重积分

    要计算二重积分、三重积分、多重积分,可使用dblquad、tplquad和nquad函数。

    二重积分

    dblquad的一般形式是scipy.integrate.dblquad(func, a, b, gfun, hfun),其中,func是待积分函数的名称,ab是x变量的上下限,gfunhfun为定义y变量上下限的函数名称。

    示例

    求二重积分:

    $$int_0{frac{1}{2}}dyint_0{sqrt[]{1-4y^2}}19xydx$$

    我们使用lambda表达式定义函数fgh。注意,在很多情况下gh可能是常数,但是即使gh是常数,也必须被定义为函数。

    import scipy.integrate
    from numpy import exp
    from math import sqrt
    f = lambda x, y : 19*x*y
    g = lambda x : 0
    h = lambda y : sqrt(1-4*y**2)
    i = scipy.integrate.dblquad(f, 0, 0.5, g, h)
    print (i)
    

    输出

    (0.59375, 2.029716563995638e-14)
    

    除了上面介绍的方法外,Scipy的integrate模块中还有许多其他积分方法,例如nquad,用于求多重积分。不过,大部分场景quad和dblquad就够用了。

  • 相关阅读:
    CF460 A. Vasya and Socks
    HDU-2159FATE(二维完全背包)
    HDU-2844 Coins(多重背包)
    POJ 1014 Dividing(多重背包)
    HDU2191(多重背包)
    数据结构课程设计:稀疏矩阵(加、减、乘、求逆矩阵)
    (转载)线段树模板(来自胡浩大牛)
    poj2386(简单dfs)
    Poj1852
    poj2109
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11811145.html
Copyright © 2011-2022 走看看