2012-11-10 106 views
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一個值的「歷史」而當計算完成後返回的值(例如tTFINAL)。我對這些值不感興趣,我希望通過這種方式運行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

如果你的頌歌夠簡單。你可以提供和分析解決方案,並免除odesolve。任何狀況之下。你想要運行一個模擬,在虛擬時間內解決問題。 Simulink可能是更好的選擇。 – Jorge

+0

嗯,所以你想說的是,沒有辦法在Matlab(沒有Simulink)的虛擬時間(意思是沒有固定的時間間隔)「運行」微分方程嗎? – JiaYow

+0

我想這是可能的,但我不記得求解器的確切功能。閱讀幫助文件,我最好的辦法是迭代地使用循環中的ode45,改變tspan向量,並在每個循環中分配合適的初始條件。實質上,你必須以漸進的方式在時間步驟(不一定相等)上解決頌歌。解算器使用他們自己的內部步驟,因此您必須對第一個循環執行[t0 t1],對第二個循環執行[t1 t2],並且當然要在每個循環中使用適當的初始條件(這可能是以前的解決方案步驟 – Jorge

回答

0

如果你的頌歌是很簡單的。你可以提供和分析解決方案,並免除odesolve。任何狀況之下。你想要運行一個模擬,在虛擬時間內解決問題。 Simulink可能是更好的選擇。