我如何在MATLAB中使用dde23

时间:2015-07-06 07:18:12

标签: matlab dde

最近我正致力于遗传电路建模,其中包括延迟微分方程:

∂A/∂t=CA*[1−(d/d0)^4]*P(α,τ)− γa*A/(1+f*(A+ I))
∂I/∂t=CI*[1−(d/d0)4]*P(α,τ)− γi*I/1+f*(A+ I)
∂Hi/∂t=bI/(1+kI)−γh*A*Hi/(1+g*A)+D(He−Hi)
∂He/∂t=(−d/1−d)*D*(He−Hi)−µ*He
P(α,τ)= (δ+α*H(t)^2)/(1+k1*H(t)^2)
H(t)=Hi(t−τ)

Hi的polt应该会振荡,但是我写的MATLAB代码似乎没有那样工作。任何人都可以看看我的代码有什么问题吗?

history=[0;0;0;0];
tau=10;

sol=dde23(@ddex2de,[tau], zeros(4,1),[0,200]);
figure
plot(sol.x,sol.y(3,:),'--r',sol.x,sol.y(2,:),'-b')


function dydt=ddex2de(t,y,Z)
ylag1=Z(:,1);

H=ylag1(3);

x1=y(1);%A
x2=y(2);%I
x3=y(3);%Hi
x4=y(4);%He
dx1dt=CA*(1-(d/d0)^4)*(delta+alpha*(H.^n1))/(1+k1*(H.^n1)) - gammaA*x1/(1+f*(x1+x2));
dx2dt=CI*(1-(d/d0)^4)*(delta+alpha*power(H, n1))/(1+k1*power(H, n1)) - gammaI*x2/(1+f*(x1+x2));
dx3dt=(b*x2/(1+k*x2))-(gammaH*x1*x3/(1+g*x1))+D*(x4-x3);
dx4dt=(-d/(1-d))*D*(x4-x3)-mu*x4;

dydt=[dx1dt,dx2dt,dx3dt,dx4dt]';
end

1 个答案:

答案 0 :(得分:0)

在您的示例代码中,大多数变量都是未定义的,std::next_permutation的值是什么?可能是其中一些参数的值不正确。

或者尝试更改时间间隔d d0 CA CI delta alpha ...,因为您的输入值为tspan更长,例如[0,200]或更多,因为您的振荡可能需要比200个单位更长的时间周期。