2014-07-23 124 views
1

今天我的问题与this previous question有关。我正在关注这个research paper。我试图复制位于第20页的图8.我有一个屏幕截图:enter image description here绘制微分方程的解,但不是与MATLAB中的时间相关

我很困惑如何在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

您仍然可以根据时间求解方程 - 但仅在时间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; %Treatment

+0

谢谢你的时间。我仍然无法让我的代码正常运行。我不明白你在[t,Y]行有什么。你添加了“[],治疗”,为什么? –

+0

我不明白如何绘制在时间= 1个月仍然价值。我应该使用这些函数来保存为矢量吗? –

+1

这是一个很好的问题!插入[]的位置保留为“ode-options”。因为我不想改变任何我使用一个空的列表。选项后,我可以指定将交给函数 – zinjaai