五、数值积分

  1. scipyintegrate模块提供了集中数值积分算法,其中包括对常微分方程组ODE的数值积分。

1. 积分

  1. 数值积分函数:

    1. scipy.integrate.quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08,
    2. epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None,
    3. wopts=None, maxp1=50, limlst=50)
    • func:一个Python函数对象,代表被积分的函数。如果它带有多个参数,则积分只在第一个参数上进行。其他参数,则由args提供
    • a:积分下限。用-numpy.inf代表负无穷
    • b:积分上限。用numpy.inf代表正无穷
    • args:额外传递的参数给func
    • full_output:如果非零,则通过字典返回更多的信息
    • 其他参数控制了积分的细节。参考官方手册

    返回值:

    • y:一个浮点标量值,表示积分结果
    • abserr:一个浮点数,表示绝对误差的估计值
    • infodict:一个字典,包含额外的信息

    quad

  2. 多重定积分可以通过多次调用quad()实现。为了调用方便,integrate模块提供了dblquad()计算二重定积分,提供了tplquad()计算三重定积分。

  3. 二重定积分:

    1. scipy.integrate.dblquad(func, a, b, gfun, hfun, args=(),
    2. epsabs=1.49e-08, epsrel=1.49e-08)
    • func:一个Python函数对象,代表被积分的函数。它至少有两个参数:yx。其中y为第一个参数,x为第二个参数。这两个参数为积分参数。如果有其他参数,则由args提供
    • ax的积分下限。用-numpy.inf代表负无穷
    • bx的积分上限。用numpy.inf代表正无穷
    • gfuny的下边界曲线。它是一个函数或者lambda表达式,参数为x,返回一个浮点数。
    • hfuny的上界曲线。它是一个函数或者lambda表达式,参数为x,返回一个浮点数。
    • args:额外传递的参数给func
    • epsabs:传递给quad
    • epsrel:传递给quad

    返回值:

    • y:一个浮点标量值,表示积分结果
    • abserr:一个浮点数,表示绝对误差的估计值

    dblquad

  4. 三重定积分:

    1. scipy.integrate.tplquad(func, a, b, gfun, hfun, qfun, rfun, args=(),
    2. epsabs=1.49e-08, epsrel=1.49e-08)
    • func:一个Python函数对象,代表被积分的函数。它至少有三个参数:zyx。其中z为第一个参数,y为第二个参数,x为第三个参数。这三个参数为积分参数。如果有其他参数,则由args提供
    • ax的积分下限。用-numpy.inf代表负无穷
    • bx的积分上限。用numpy.inf代表正无穷
    • gfuny的下边界曲线。它是一个函数或者lambda表达式,参数为x,返回一个浮点数。
    • hfuny的上界曲线。它是一个函数或者lambda表达式,参数为x,返回一个浮点数。
    • qfunz的下边界曲面。它是一个函数或者lambda表达式,第一个参数为x,第二个参数为y,返回一个浮点数。
    • rfunz的上边界曲面。它是一个函数或者lambda表达式,第一个参数为x,第二个参数为y,返回一个浮点数。
    • args:额外传递的参数给func
    • epsabs:传递给quad
    • epsrel:传递给quad

    返回值:

    • y:一个浮点标量值,表示积分结果
    • abserr:一个浮点数,表示绝对误差的估计值

2. 求解常微分方程组

  1. 求解常微分方程组用:

    1. scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
    2. ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0,
    3. hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0)
    • func:梯度函数。第一个参数为y,第二个参数为t0,即计算t0时刻的梯度。其他的参数由args提供
    • y0:初始的y
    • t:一个时间点序列。
    • args:额外提供给func的参数。
    • Dfunfunc的雅可比矩阵,行优先
    • col_deriv:一个布尔值。如果Dfun未给出,则算法自动推导。该参数决定了自动推导的方式
    • full_output:如果True,则通过字典返回更多的信息
    • printmessg:布尔值。如果为True,则打印收敛信息
    • 其他参数用于控制求解的细节

    返回值:

    • y:一个数组,形状为 (len(t),len(y0)。它给出了每个时刻的y
    • infodict:一个字典,包含额外的信息

    odeint odeint_lorenz