Heaviside step函数输出作为另一个函数matlab的参数

时间:2014-08-26 04:03:30

标签: matlab ode numerical-integration

我正在尝试实现此参考文献中描述的数学模型:

  乍得刘,李传元,范媛。数学建模   凤凰上升路径。 Plos One,Computational Biology.v.10,2014。

我希望输出变量dPLAdt以数字方式计算服从Heaviside函数,该函数计算变量C3和C7。从下面的代码中可以看出,Heaviside函数将在时间1440之后被激活。程序正在运行,但没有产生与纸张附加图片匹配的结果![http://i.stack.imgur.com/37Vjo.jpg][1]。我想匹配论文的结果。

这是我的代码:

1)功能

function dPLAdt = PLAprod(t,PLA)


dPLAdt = zeros(2,1);

k1 = 2.8*10^(-5);
k3 = 3.24*10^(-6);

kminus5 = 0.09/60;
k5 = 0.06/60;
k2short = 144/60;
k2 = 11;
k4short = 26/60;
k4 = 12;
k7 = 0.06;
p = [k1*heaviside(t-1440); k3*heaviside(t-1440)]; % CASP 3 e CASP7
C3 = p(1); 
C7 = p(2);



dPLAdt(1) = kminus5 - k5*(PLA(1)) - (k2short*(PLA(1))*(C3))/(k2 + PLA(1)) - (k4short*(PLA(1))*(C7))/(k4 + PLA(1));


dPLAdt(2) = (k2short*(PLA(1))*(C3))/(k2 + (PLA(1))) + (k4short*(PLA(1))*(C7))/(k4 + PLA(1)) - k7*(PLA(2));

end

2)调用求解器的脚本

[T,Y] = ode45(@PLAprod,[0,2880],[1500 500]);
plot(T,Y(:,1),'-r', T,Y(:,2),'-b')
legend('iPLA','aPLA')

1 个答案:

答案 0 :(得分:1)

Heaviside function有效地使stiff system成为ode45无法处理的ode15s。您可以尝试调整积分公差或使用my answer to this question或其他刚性求解器,但您真正看到的是一个分段的系统。如果分解时间(ode45)并创建两个稍微不同的集成函数,则可以使用常规自适应求解器(如tspan)准确有效地集成它。只需用恒定的低值或高值替换Heaviside函数。然后使用第一个的结束状态作为初始条件,模拟从01440的第一个和从14402880的第二个。有关此示例,请参阅{{3}}。

您可以将Heaviside函数视为if语句,并且在集成函数中放置if或任何其他形式的分支几乎总是一个坏主意。 ODE求解器假设它们所积分的函数具有一定程度的平滑性。