对于上下文,我正在尝试在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
)
答案 0 :(得分:0)
如果你的颂歌足够简单。你可以提供和分析解决方案,并免除odesolve。在任何情况下。你想运行模拟,在虚拟时间解决颂歌。 Simulink可能是更好的选择。