scipy.integrate.ode

class scipy.integrate.ode(f, jac=None)[源代码]

数字积分器的通用接口类。

解方程组 \(y'(t) = f(t,y)\) 带有(可选) jac = df/dy

Note :的前两个论点 f(t, y, ...) 使用的系统定义函数中的参数顺序相反 scipy.integrate.odeint

参数
f :可调用 f(t, y, *f_args)可调用

微分方程的右边。T是标量, y.shape == (n,)f_args 通过调用 set_f_params(*args)f 应返回标量、数组或列表(不是元组)。

jac :可调用 jac(t, y, *jac_args) ,可选可调用

右手边的雅可比, jac[i,j] = d f[i] / d y[j]jac_args 通过调用 set_jac_params(*args)

参见

odeint

一个基于ODEPACK的lsoda的接口更简单的积分器

quad

用于查找曲线下的面积

注意事项

下面列出了可用的积分器。可以使用 set_integrator 方法。

“沃德”

实值变系数常微分方程解算器,具有固定导引系数的实现。它提供了隐式Adams方法(对于非刚性问题)和基于后向微分公式(BDF)的方法(对于刚性问题)。

消息来源:http://www.netlib.org/ode/vode.f

警告

此集成器不能再进入。你不能有两个 ode 实例同时使用“Vode”集成器。

此积分器接受以下参数 set_integrator 的方法。 ode 班级:

  • ATOL:解决方案的浮点或序列绝对公差

  • rtol:解决方案的浮点或顺序相对公差

  • lband:无或整型

  • 子带:无或整数雅可比带宽,Jac [i,j] !=0表示i-lband<=j<=i+子带。设置这些参数需要JAC例程以打包格式JAC_PACKED返回雅可比 [i-j+uband, j] =JAC [i,j] 。矩阵的维度必须是(lband+uband+1,len(Y))。

  • 方法:要使用的求解器为‘ADAMS’或‘BDF’,ADAMS(非刚性)或BDF(刚性)

  • with_Jacobian:Bool仅当用户未提供Jacobian函数且未指示(通过设置任何波段)Jacobian为带状时,才会考虑此选项。在这种情况下, with_jacobian 指定ODE解算器校正步骤的迭代方法是使用内部生成的完整Jacobian的弦迭代,还是不使用Jacobian的函数迭代。

  • nstep:int在一次解算器调用期间允许的(内部定义的)最大步数。

  • FIRST_STEP:浮点

  • MIN_STEP:浮点

  • MAX_STEP:积分器使用的步长的浮动限制。

  • 订单:整合商使用的最大订单,ADAMS的订单<=12,BDF的订单<=5。

“zvode”

复值变系数常微分方程解算器,具有固定导引系数的实现。它提供了隐式Adams方法(对于非刚性问题)和基于后向微分公式(BDF)的方法(对于刚性问题)。

消息来源:http://www.netlib.org/ode/zvode.f

警告

此集成器不能再进入。你不能有两个 ode 实例同时使用“zvode”集成器。

此积分器在中接受相同的参数 set_integrator 作为“沃德”解算器。

注解

当对刚性系统使用ZVODE时,它只能用于函数f是解析函数的情况,即每个f(I)都是每个y(J)的解析函数。解析性意味着偏导数df(I)/dy(J)是唯一的复数,这一事实对于ZVODE解决在刚性情况下出现的稠密或带状线性系统的方式至关重要。对于f不是解析的复刚性常微分方程系统,ZVODE很可能会有收敛失败,对于这个问题,人们应该在等价的实系统(在y的实部和虚部)上使用DVODE。

“汽水”

实值变系数常微分方程解算器,具有固定导引系数的实现。它提供了隐式亚当斯方法(对于非刚性问题)和基于后向微分公式(BDF)的方法(对于刚性问题)之间的自动切换。

消息来源:http://www.netlib.org/odepack

警告

此集成器不能再进入。你不能有两个 ode 实例同时使用“lsoda”集成器。

此积分器接受以下参数 set_integrator 的方法。 ode 班级:

  • ATOL:解决方案的浮点或序列绝对公差

  • rtol:解决方案的浮点或顺序相对公差

  • lband:无或整型

  • 子带:无或整数雅可比带宽,Jac [i,j] !=0表示i-lband<=j<=i+子带。设置这些参数需要JAC例程以打包格式JAC_PACKED返回雅可比 [i-j+uband, j] =JAC [i,j] 。

  • 使用_Jacobian:布尔值 没有用过。

  • nstep:int在一次解算器调用期间允许的(内部定义的)最大步数。

  • FIRST_STEP:浮点

  • MIN_STEP:浮点

  • MAX_STEP:积分器使用的步长的浮动限制。

  • max_order_ns:int在非刚性情况下使用的最大顺序(默认值为12)。

  • max_order_s:int硬性情况下使用的最大顺序(默认值为5)。

  • max_hnil:int报告步长太小的最大消息数(t+h=t)(默认值0)

  • ixpr:int是否在方法切换处生成额外打印(默认值为false)。

“兴奋剂5”

这是一个显式的(4)5阶Runge-Kutta方法,这是由于Dormand&Prince方法(具有步长控制和密集输出)。

作者:

首页--期刊主要分类--期刊细介绍--期刊题录与文摘--期刊详细文摘内容电子邮件:ernst.hairer@math.unige.chgerhard.wanner@math.unige.ch

有关此代码的说明,请参阅 [HNW93].

此集成器接受ODE类的set_Integrator()方法中的以下参数:

  • ATOL:解决方案的浮点或序列绝对公差

  • rtol:解决方案的浮点或顺序相对公差

  • nstep:int在一次解算器调用期间允许的(内部定义的)最大步数。

  • FIRST_STEP:浮点

  • MAX_STEP:浮点

  • 安全性:新台阶选择时的浮动安全系数(默认值0.9)

  • ifactor:浮点

  • dfactor:浮动最大因子,一步增加/减少步长

  • Beta:用于稳定步长控制的浮动Beta参数。

  • 详细程度:用于打印消息的int开关(<0表示无消息)。

“多用853”

这是一个8(5,3)阶的显式Runge-Kutta方法,这是由于Dormand&Prince方法(具有步长控制和稠密输出)。

选项和引用与“dori5”相同。

参考文献

HNW93

E.海尔,S.P.Norsett和G.Wanner,解常微分方程,即非刚性问题。第二版。计算数学中的Springer级数,Springer-Verlag(1993)

示例

需要积分的问题和相应的雅可比矩阵:

>>> from scipy.integrate import ode
>>>
>>> y0, t0 = [1.0j, 2.0], 0
>>>
>>> def f(t, y, arg1):
...     return [1j*arg1*y[0] + y[1], -arg1*y[1]**2]
>>> def jac(t, y, arg1):
...     return [[1j*arg1, 1], [0, -arg1*2*y[1]]]

集成:

>>> r = ode(f, jac).set_integrator('zvode', method='bdf')
>>> r.set_initial_value(y0, t0).set_f_params(2.0).set_jac_params(2.0)
>>> t1 = 10
>>> dt = 1
>>> while r.successful() and r.t < t1:
...     print(r.t+dt, r.integrate(r.t+dt))
1 [-0.71038232+0.23749653j  0.40000271+0.j        ]
2.0 [0.19098503-0.52359246j 0.22222356+0.j        ]
3.0 [0.47153208+0.52701229j 0.15384681+0.j        ]
4.0 [-0.61905937+0.30726255j  0.11764744+0.j        ]
5.0 [0.02340997-0.61418799j 0.09523835+0.j        ]
6.0 [0.58643071+0.339819j 0.08000018+0.j      ]
7.0 [-0.52070105+0.44525141j  0.06896565+0.j        ]
8.0 [-0.15986733-0.61234476j  0.06060616+0.j        ]
9.0 [0.64850462+0.15048982j 0.05405414+0.j        ]
10.0 [-0.38404699+0.56382299j  0.04878055+0.j        ]
属性
t浮动

当前时间。

yndarray

当前变量值。

方法:

get_return_code \()

提取集成的返回代码,以便在集成失败时实现更好的控制。

integrate \(t[, step, relax] )

找到y=y(T),将y设置为初始条件,然后返回y。

set_f_params \(*参数)

为用户提供的函数f设置额外参数。

set_initial_value \(y[, t] )

设置初始条件y(T)=y。

set_integrator \(名称,** 集成器_参数)

按名称设置Integrator。

set_jac_params \(*参数)

为用户提供的函数JAC设置额外参数。

set_solout \(单点输出)

将Callable设置为在每个成功的集成步骤中调用。

successful \()

检查集成是否成功。