0

对于上下文,我正在尝试在 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并在计算完成时返回这些值(例如tat 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

4

1 回答 1

0

如果你的颂歌足够简单。您可以提供分析解决方案,而无需使用 odesolve。任何状况之下。你想运行一个模拟,在虚拟时间内求解 ode。Simulink 可能是一个更好的选择。

于 2012-11-11T23:33:56.193 回答