2014-07-23 57 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