编程语言
首页 > 编程语言> > python – NumPy odeint输出额外的变量

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