这是我在这里提出的第一个问题,所以请放轻松。我想知道是否有一种方法可以仅在找到指定变量的局部最大值之前集成 ODE 系统。以下是更多细节:
我们称我们的 ODE 系统为dX/dt = F(X) where X(t) = [x1(t), x2(t), ... , xn(t)]
。假设该系统的解在任何地方都被稳定的极限环 C 所吸引,但在一个不稳定的固定点 p 处。选择一些初始条件 X0 而不是 p,并且不在 C 中。我们希望遵循解的轨迹:
dX/dt = F(X), X(0) = X0 (*)
直到 x1(t) 达到其第一个局部最大值。
进步:
使用 scipy.integrate.odeint 我能够找到极限环 C 及其周期 T 的解,但是从任意点开始,我能够解决此问题的唯一方法是求解 (*) '长时间”(可能是 4*T),并且假设这是一个足够长的时间,则在事后确定 x1 的第一个局部最大值。我的较大项目需要多次执行此操作,因此我正在尽力减少计算时间。似乎必须有一种更快的方法来做到这一点,而无需编写我自己的常量求解器。
我有可能(并且很可能)让这件事变得太复杂了吗?如果您想出不同的方法来做到这一点,我将不胜感激任何建议。
我还没有对此进行测试,但以下代码应该可以工作或至少有帮助:
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]
r = ode(f).set_integrator('zvode', method='bdf')
r.set_initial_value(y0, t0).set_f_params(2.0)
t1 = 10
dt = 1
older = 0
previous = 0
current = 0
while r.successful() and not (older < previous and prevous > current):
older = previous
previous = current
current = r.integrate(r.t+dt)
print("Maximum occurs at {}".format(r.t - dt))
我也想进一步研究一下蟒蛇颂歌 http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.integrate.ode.html
EDIT:
更好的是使用solout
可以找到here http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.integrate.ode.set_solout.html#scipy.integrate.ode.set_solout
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)