python – NumPy 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中存储数据的最简单方法是什么?理想情况下,在传递给odeint的t参数中指定的点.
解决方法:
通过一些注意事项来解决odeint的一种方便方法是在类中使用dy将调用包含在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执行Euler步进,否则dy将被调用的次数多于您指定的时间步数.为了确保每个y得到一个x,if t> = self.times [self.timestep]:block中的monkey business选择一个数组中的一个点来存储来自时间向量的每个时间值的数据.您的特定应用可能会导致其他疯狂的问题.请务必为您的应用程序彻底验证此方法.
标签:python,numpy,scipy,odeint 来源: https://codeday.me/bug/20191007/1866459.html