NumPy odeint输出额外的变量

时间:2013-06-03 19:18:56

标签: python numpy scipy odeint

在Numpy中使用odeint进行模拟期间保存中间变量的最简单方法是什么?

例如:

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的{​​{1}}参数中指定的点。

1 个答案:

答案 0 :(得分:6)

通过一些警告来解决odeint的一种方便方法是将调用包含在类中的方法中,并使用dy作为另一种方法,并将self作为参数传递给{ {1}}功能。例如,

dy

要明确的是,这是一个容易陷入困境的黑客攻击。例如,除非odeint执行Euler步进,否则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() 获得一个xy块中的猴子业务会在数组中选取一个位置,用于存储来自if t >= self.times[self.timestep]:的每个时间值的数据向量。您的特定应用可能会导致其他疯狂的问题。请务必为您的应用程序彻底验证此方法。