如何在MATLAB中绘制非线性微分方程组的解?

时间:2014-07-18 01:59:12

标签: matlab differential-equations

我正在尝试遵循此research paper。我正在尝试复制第20页的图7中的解决方案图。我有一个图7的屏幕截图:enter image description here

我首先要重新创建左图。我所拥有的系统是dX。这是我在m文件中的内容:

function dX = CompetitionModel(t,X)       
  bs = 8*10^(-3); 
  bl = 4*10^(-3); 
  bh = 6.4*10^(-3);
  N = bs + bl + bh;
  K = 10^8;
  m1 = 2*10^(-5); 
  m2 = 9*10^(-9); 
  p = 5*10^(-13); 
  I = 10^(-3); 
  T = 0; 
  a = 0; 
  dX = [X(1) * (bs * (1 - N/K) - I - T - m1) - p * X(1) * (X(2) + X(3));
       X(2) * (bl * (1 - N/K) - I - a*T - m2) + m1 * X(1) + p * X(2) * (X(1) - X(3));
       X(3) * (bh * (1 - N/K) - I - a*T) + m2 * X(2) + p * X(3) * (X(1) + X(2))];
end

ode45的语法为:[T,Y] = solver(odefun,tspan,y0)。我从我发布的图片中得到了tspan。我的初始条件是:S0 = 10^4; Rl0 = 0; Rh0 = 0,所以这就是y0。我在命令窗口中键入以下内容:

>>[t,X1] = ode45('CompetitionModel', [0,45000], [10^4, 0, 0]);
>>[t,X2] = ode45('CompetitionModel', [0,45000], [10^4, 0, 0]);
>>[t,X3] = ode45('CompetitionModel', [0,45000], [10^4, 0, 0]);

过去30分钟,MATLAB一直很忙,我的笔记本电脑开始变热了。因此,在完成之前我无法进行绘图,而且我不知道代码中是否存在任何错误。我想知道是否有更好的方法可以获得系统的解决方案dX

1 个答案:

答案 0 :(得分:3)

我检查了ODE对纸张,发现一个错误。根据文件第9页的最后一段N = S + Rl + Rh。更正后的代码:

function dX = CompetitionModel(~,X)       
  bs = 8e-3; 
  bl = 4e-3; 
  bh = 6.4e-3;
  N = sum(X);  % this line was incorrect
  K = 1e8;
  m1 = 2e-5; 
  m2 = 9e-9; 
  p = 5e-13; 
  I = 1e-3; 
  T = 0;
  a = 0; 
  dX = [X(1) * (bs * (1 - N/K) - I - T - m1) - p * X(1) * (X(2) + X(3));
       X(2) * (bl * (1 - N/K) - I - a*T - m2) + m1 * X(1) + p * X(2) * (X(1) - X(3));
       X(3) * (bh * (1 - N/K) - I - a*T) + m2 * X(2) + p * X(3) * (X(1) + X(2))];

注意一些语法上的变化。首先,由于您实际上并未在ODE中使用时间值,因此可以使用~代替函数定义中的t作为未使用输入的替代。其次,您可以使用符号8e-3代替8*10^(-3)。他们评价同样的事情,但前者看起来更清洁。

不治疗的情节,即T = 0,如下所示。

No Treatment Population

我首先尝试用MATLAB中的一些刚性ODE求解器求解你的方程,从而找出了ODE中的问题。有关详细信息,请参阅MATLAB ODE solver documentation。基本上我用ode15sode23s解决了它,发现解决方案不稳定(人口变为无穷大)。如果您的解决方案悬而未决,这些其他求解器是很好的工具。有时其中一个会工作,它会给你你想要的东西,或者表明你在其他地方有另一个问题。

注意:我相当确定您没有使用"相位画像"在这里正确。您只是在给定一组初始条件下寻找ODE与时间的解决方案。 A phase portrait着眼于系统的状态(这里有三个不同的群体)如何根据不同的初始条件进化。它没有向您展示这些解决方案的时间依赖性,以及它们相对于彼此的演变方式。