繁体   English   中英

我如何在Matlab中求解耦合随机微分方程

[英]How do i solve coupled stochastic differential equation in Matlab

我有单个Hindmarsh-Rose(HR)神经元模型,如下所示

x' = y - a*x^3 + b*x^2 -z + I0 + I1*cos*w*t + D*Zyi(t);

y' = c - d*x^2 -y;

z' = r[s(x - x0) - z ];

其中a,b,I1,I0,D,c,d,r,s,x0是参数。

我想改变“ w”(以I1 * cos w t的x'表示),并包括具有D强度的白高斯噪声(Zyi(t)),并捕获[20至60]范围内的频率灵敏度。 这是随机共振的问题,其中系统取决于频率,并且在特定频率下存在可以通过SNR捕获的相干性(在这种情况下为40)。

最初,当确定性(无噪声项,即Zyi(t))时,我简单地使用ODE45对该系统进行求解,并产生了正确的结果,但是当添加的高斯噪声无法再现准确的结果时,即无法捕获不同模拟下的频率灵敏度。

然后,我用SDEToolbox在Matlab中解决了它。 我在工具箱中使用了Euler-Maruyama和Milstein内置算法,但没有用。

function [] = sd1

a=1;
b=3;
c=1;
d=5;
s=4;
r=0.006;
x0=-1.6;
I1=0.2;
I0=1.31; %for I0=1.32 and no noise term all neurons fire.


T = 0:0.01:2000; 
xi = [0.1 0.01 0.1];  %initial conditions

zyi = 0.2 * randn; %Noise term with D=0.2

f = @(T,X)[X(2) - a*X(1)^3 + b * X(1)^2 - X(3) + I0 + (I1 * cos(40 * T)) + zyi;c - d*X(1)^2 - X(2) ; r*(s*(X(1) - x0) - X(3))]; 

y = sde_euler(f,g,T,xi); % Integrate
figure;
plot(T,y(:,1));
end

这确实会产生一些结果,但是对于“ w”的不同值,它不会产生确切的结果。 也就是说,如果“ w”小于(> 20和<40),则生成的尖峰数应小于,并且w在40和50(大约)之间。 的神经元尖峰应该最大,并且对于“ w”> 50和“ w” <60,神经元尖峰应该再次减少。有人可以告诉我如何捕获它。

据我可以从https://github.com/horchler/SDETools/blob/master/SDETools/sde_euler.m得知,

函数f应该只描述SDE的确定性部分(用ODE解决),而函数g应该描述噪声/扩散部分。 似乎您正在将噪声(zyi)放入确定性f中,这自然会使所有事情搞砸了。

您在代码中的哪里设置g? 应将其设置为g = 0.2,即g = D。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM