gpt4 book ai didi

python - scipy odeint 中的当前迭代

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:02 24 4
gpt4 key购买 nike

我正在使用 Scipy 的 odeint (scipy.integrate.odeint) 来解决一些 ODE,一切都运行良好。但是,我现在想在计算中包含另一组与时间相关的数据,即对于 t = [0, 1, 2, 3] 我得到了数据 z = [0.1, 0.2, 0.25, 0.22] 包含在计算中。我可以将向量作为参数传递,但这会给我每个时间步长的整个向量。有没有一种有效的方法来获取计算的当前步骤(迭代器)?这样我就可以获得第 i 个时间步的 z[i] 。请注意,z 的长度为 t,并且两者都可以包含数千个元素。

谢谢

一个非常简单的例子:

import numpy as np
from scipy.integrate import odeint

def func(y, t, z):
# I'd like to get the i-th element
# of z, corresponding to t[i]
return y+z[i]

result = odeint(func, [0], t, (z,))

最佳答案

此问题的解决方案是使用更通用的 scipy.integrate.ode功能。该函数内置了多种集成方案,您可以更好地控制每次迭代期间发生的情况。请参阅下面的示例:

import numpy as np
from scipy.integrate import ode

def func(t, y, z):
return y+z

t = np.linspace(0, 1.0, 100)
dt = t[1]-t[0]
z = np.random.rand(100)
output = np.empty_like(t)
r = ode(func).set_integrator("dop853")
r.set_initial_value(0, 0).set_f_params(z[0])

for i in xrange(len(t)):
r.set_f_params(z[i])
r.integrate(r.t+dt)
output[i] = r.y

在每次迭代期间,求解器的 z 值都会相应更新。

关于python - scipy odeint 中的当前迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32004697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com