连续求解微分方程

时间:2012-11-10 16:35:33

标签: matlab neural-network differential-equations

对于上下文,我正在尝试在Matlab中建模和模拟时空神经网络。我已经确定了一个微分方程,它将代表我神经元的动力学。

现在,我希望这个微分方程“连续”解决,这意味着我的模拟应该运行,做一些事情,同时我的神经元应该根据微分方程更新。

目前,我有两种方法:

首先,我可以这样做:

ode45(@diffEquation, [0, inf], nn.U); % where nn.U is the initial (usually randomized) neuron state

function dUdt = diffEquation(t,U)
   nn.U = U;
   dUdt = % the equation
end

所以我的想法是在后台启动并行任务,无限次地运行ode45并直接更新我的神经元状态nn.U。但是,正如我所知,ode45通常会为每个t存储值的“历史记录”,并在计算完成时返回这些值(例如t位于TFINAL)。我对这些值并不感兴趣,我希望通过这种方式运行ode45,我很快就会耗尽内存。

另一个想法是无限地(也在异步后台任务中)一遍又一遍地调用ode45:

while 1 % i.e. simulation not over yet
    [~,y] = ode45(@diffEquation, [0, 0.001], nn.U);
    nn.U = y(end,:); 
end

这和第一种方法一样,对我来说似乎非常笨拙和尴尬。 我觉得必须有一个更优雅的解决方案来解决我的问题。

也许ode45不是这里的正确选择?

编辑:只是为了澄清,差异。方程是一个普通的方程随着时间的推移,没有任何花哨和可解决的ode45(即dUdt = -U + some-stuff * networkoutput

1 个答案:

答案 0 :(得分:0)

如果你的颂歌足够简单。你可以提供和分析解决方案,并免除odesolve。在任何情况下。你想运行模拟,在虚拟时间解决颂歌。 Simulink可能是更好的选择。

相关问题