五、数值积分
scipy
的integrate
模块提供了集中数值积分算法,其中包括对常微分方程组ODE
的数值积分。
1. 积分
数值积分函数:
scipy.integrate.quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08,
epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None,
wopts=None, maxp1=50, limlst=50)
func
:一个Python
函数对象,代表被积分的函数。如果它带有多个参数,则积分只在第一个参数上进行。其他参数,则由args
提供a
:积分下限。用-numpy.inf
代表负无穷b
:积分上限。用numpy.inf
代表正无穷args
:额外传递的参数给func
full_output
:如果非零,则通过字典返回更多的信息- 其他参数控制了积分的细节。参考官方手册
返回值:
y
:一个浮点标量值,表示积分结果abserr
:一个浮点数,表示绝对误差的估计值infodict
:一个字典,包含额外的信息
多重定积分可以通过多次调用
quad()
实现。为了调用方便,integrate
模块提供了dblquad()
计算二重定积分,提供了tplquad()
计算三重定积分。二重定积分:
scipy.integrate.dblquad(func, a, b, gfun, hfun, args=(),
epsabs=1.49e-08, epsrel=1.49e-08)
func
:一个Python
函数对象,代表被积分的函数。它至少有两个参数:y
和x
。其中y
为第一个参数,x
为第二个参数。这两个参数为积分参数。如果有其他参数,则由args
提供a
:x
的积分下限。用-numpy.inf
代表负无穷b
:x
的积分上限。用numpy.inf
代表正无穷gfun
:y
的下边界曲线。它是一个函数或者lambda
表达式,参数为x
,返回一个浮点数。hfun
:y
的上界曲线。它是一个函数或者lambda
表达式,参数为x
,返回一个浮点数。args
:额外传递的参数给func
epsabs
:传递给quad
epsrel
:传递给quad
返回值:
y
:一个浮点标量值,表示积分结果abserr
:一个浮点数,表示绝对误差的估计值
三重定积分:
scipy.integrate.tplquad(func, a, b, gfun, hfun, qfun, rfun, args=(),
epsabs=1.49e-08, epsrel=1.49e-08)
func
:一个Python
函数对象,代表被积分的函数。它至少有三个参数:z
、y
和x
。其中z
为第一个参数,y
为第二个参数,x
为第三个参数。这三个参数为积分参数。如果有其他参数,则由args
提供a
:x
的积分下限。用-numpy.inf
代表负无穷b
:x
的积分上限。用numpy.inf
代表正无穷gfun
:y
的下边界曲线。它是一个函数或者lambda
表达式,参数为x
,返回一个浮点数。hfun
:y
的上界曲线。它是一个函数或者lambda
表达式,参数为x
,返回一个浮点数。qfun
:z
的下边界曲面。它是一个函数或者lambda
表达式,第一个参数为x
,第二个参数为y
,返回一个浮点数。rfun
:z
的上边界曲面。它是一个函数或者lambda
表达式,第一个参数为x
,第二个参数为y
,返回一个浮点数。args
:额外传递的参数给func
epsabs
:传递给quad
epsrel
:传递给quad
返回值:
y
:一个浮点标量值,表示积分结果abserr
:一个浮点数,表示绝对误差的估计值
2. 求解常微分方程组
求解常微分方程组用:
scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0,
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
的参数。Dfun
:func
的雅可比矩阵,行优先col_deriv
:一个布尔值。如果Dfun
未给出,则算法自动推导。该参数决定了自动推导的方式full_output
:如果True
,则通过字典返回更多的信息printmessg
:布尔值。如果为True
,则打印收敛信息- 其他参数用于控制求解的细节
返回值:
y
:一个数组,形状为(len(t),len(y0)
。它给出了每个时刻的y
值infodict
:一个字典,包含额外的信息