コンテキストについては、Matlab で時空間ニューラル ネットワークをモデル化してシミュレートしようとしています。ニューロンのダイナミクスを表す微分方程式を決定しました。
ここで、この微分方程式を「継続的に」解決する必要があります。つまり、シミュレーションを実行して何かを実行し、その間にニューロンを微分方程式に従って更新する必要があります。
現時点では、次の 2 つのアプローチがあります。
まず、次のようなことができます。
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
is at TFINAL
)。私はこれらの値には興味がありません。この方法で ode45 を実行すると、すぐにメモリ不足になると思います。
もう 1 つのアイデアは、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
)