我正在尝试实现此参考文献中描述的数学模型:
乍得刘,李传元,范媛。数学建模 凤凰上升路径。 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')
答案 0 :(得分:1)
Heaviside function有效地使stiff system成为ode45
无法处理的ode15s
。您可以尝试调整积分公差或使用my answer to this question或其他刚性求解器,但您真正看到的是一个分段的系统。如果分解时间(ode45
)并创建两个稍微不同的集成函数,则可以使用常规自适应求解器(如tspan
)准确有效地集成它。只需用恒定的低值或高值替换Heaviside函数。然后使用第一个的结束状态作为初始条件,模拟从0
到1440
的第一个和从1440
到2880
的第二个。有关此示例,请参阅{{3}}。
您可以将Heaviside函数视为if
语句,并且在集成函数中放置if
或任何其他形式的分支几乎总是一个坏主意。 ODE求解器假设它们所积分的函数具有一定程度的平滑性。