在仿真过程中保存中间变量的最简单方法是什么odeint
在 Numpy 中?
例如:
def dy(y,t)
x = np.rand(3,1)
return y + x.sum()
sim = odeint(dy,0,np.arange(0,1,0.1))
保存存储在中的数据的最简单方法是什么x
模拟期间?理想情况下在指定的点t
参数传递给odeint
.
破解 odeint 的一种便捷方法(有一些注意事项)是将您对 odeint 的调用包装在类中的方法中,使用dy
作为另一种方法,并通过self
作为你的论点dy
功能。例如,
class WrapODE(object):
def __init__(self):
self.y_0 = 0.
self.L_x = []
self.timestep = 0
self.times = np.arange(0., 1., 0.1)
def run(self):
self.L_y = odeint(
self.dy,
self.y_0, self.times,
args=(self,))
@staticmethod
def dy(y, t, self):
""""
Discretized application of dudt
Watch out! Because this is a staticmethod, as required by odeint, self
is the third argument
"""
x = np.random.rand(3,1)
if t >= self.times[self.timestep]:
self.timestep += 1
self.L_x.append(x)
else:
self.L_x[-1] = x
return y + x.sum()
需要明确的是,这是一个很容易陷入陷阱的黑客行为。例如,除非 odeint 执行欧拉步进,否则 dy 被调用的次数将超过您指定的时间步数。为了确保你得到一个x
对于每个y
,猴子生意if t >= self.times[self.timestep]:
块在数组中选择一个位置来存储每个时间值的数据times
向量。您的特定应用程序可能会导致其他疯狂的问题。请务必针对您的应用彻底验证此方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)