绘制微分方程的解,但不是在MATLAB中的时间

时间:2014-07-23 00:59:00

标签: matlab differential-equations

我今天的提问与this previous question有关。我正在关注这个research paper。我正在尝试复制位于第20页的图8.我有一个屏幕截图:enter image description here

我对如何在MATLAB中绘制左图这一点很困惑,因为现在我们的处理方式不同,而不是时间变化。这是我上一个问题的内容:

function dX = CompetitionModel(~,X)       
  bs = 8e-3; 
  bl = 4e-3; 
  bh = 6.4e-3;
  N = sum(X);  
  K = 1e8;
  m1 = 2e-5; 
  m2 = 9e-9; 
  p = 5e-13; 
  I = 1e-3; 
  T = 1e-3; % Treatment
  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

要在上一个问题中绘制我的方程,我在命令窗口中输入以下内容:

>> [t,Y] = ode45(@CompetitionModel, [0 4.5e4], [1e4 0 0]);
>> plot(t,X(:,1), t,X(:,2), t,X(:,3))

在我的函数文件中,我已经定义了治疗。我猜它不应该再了。那么我能做什么才能使治疗变化而不是时间?我希望我的问题有道理。

1 个答案:

答案 0 :(得分:1)

你仍然可以解决关于时间的等式 - 但只是绘制t = 1个月时的值。 要改变治疗方法,您需要围绕ode45调用额外循环,并将当前治疗值传递给函数dX

for treatment = 10^-4:10^-5:10^-3
    [t,Y] = ode45(@CompetitionModel, [0 4.5e4], [1e4 0 0], [] , treatment);
    plot(treatment,Y(end,1), 'x')
    plot(treatment,Y(end,2), 'kx')
    plot(treatment,Y(end,3), 'rx')
    hold on
end

现在必须更改功能dX以接受治疗输入:

function dX = CompetitionModel(~,X, T)       

最后,在函数dX中评论旧的治疗分配:%T = 1e-3; %治疗