2013-08-24 22 views
1

我正在嘗試複製紙張的結果(Immune Response)。簡而言之,它考察病原體,抗體和漿細胞的濃度以及免疫反應對器官的影響。取決於器官的狀態,影響漿細胞濃度的變量將會改變。更新Matlab中的ODE變量

我在Matlab中對此進行了建模。我的問題是,等離子體濃度影響變量的條件語句被忽略。通過評論部分代碼並查看圖表,無論第二個條件如何,輸出僅響應初始條件。

如何更新值以便它們被ode45(或ode23)解釋,並且是否有更好的方法來處理此問題?

我的代碼如下。

function dx = iir_2(t, x) 
dx = [0; 0; 0; 0]; 
a11 = 1; 
a31 = 1; 
a41 = 1; 
a12 = 1; 
a22 = 3; 
a32 = 1.5; 
a42 = 1; 
a23 = 1; 
a33 = 0.5; 

b1 = -1; 
b2 = 1; 
b3 = 1; 
b4 = -1; 

u1 = 0; 
u2 = 0; 
u3 = 0; 
u4 = 0; 

tau = 0.1; 

if x(4) >= 0.5 
    a21x4 = 0; 
else 
    a21x4 = cos(pi * x(4)); 
end 

if x(4) > 1 
    x(4) = 1; 
end 

dx(1) = (a11 - a12 * x(3)) * x(1) + b1 * u1; 
dx(2) = a21x4 * a22 * x(1) * (t - tau) * x(3) * (t - tau) - a23 * (x(2) - 2) + b2 * u2; 
dx(3) = a31 * x(2) - (a32 + a33 * x(1)) * x(3) + b3 * u3; 
dx(4) = a41 * x(1) - a42 * x(4) + b4 * u4; 

這調用上面的函數是第二個腳本..

Case = ['Subclinical' 'Clinical' 'Chronic' 'Lethal']; 
x1_0 = [1.5 2 2.57 3]; 
x2_0 = 2; 
x3_0 = (1*x2_0)/1.5; 
x4_0 = 0; 

for i = 1:4 
    if i == 1 
     state = 'Subclinical'; 
    elseif i == 2 
     state = 'Clinical'; 
    elseif i == 3 
     state = 'Chronic'; 
    else 
     state = 'Lethal'; 
    end 

    options = odeset('RelTol', 1e-3, 'NonNegative', [1 2 3 4]); 
    [t,x] = ode45(@iir_2, [0 10], [x1_0(i) x2_0 x3_0 x4_0], options); % use ode23??? 
    figure 
    plot(t,x); 
    str = sprintf('Case Number = %d\nx(0) = %d\n%s', i, x1_0(i), state); 
    title(str); 
    axis([0,10,0,10]) 
    legend('Pathogen', 'Plasma Cell', 'Antibody', 'Organ'); 
end 

條件語句在函數。

if x(4) >= 0.5 
     a21x4 = 0; 
    else 
     a21x4 = cos(pi * x(4)); 
    end 

    if x(4) > 1 
     x(4) = 1; 
    end 

回答

2

有兩種方法可以做到這一點。

無論哪種方式,你需要明白,你不能只是將x(4)設置爲1,並希望一切都爲最好的。 Matlab不會關心前面的x(4)的值,因爲它們都存儲在內存中。此外,x(4)的即將到來的值由dx(4)和先前保留的x(4)(不能設置)的值確定。

你有你的問題,有兩種可能的解決方案:)

一套DX(4)= 0時,你的條件滿足

if x(4) > 1 
    dx(4) = 0; 
else 
    dx(4) = a41 * x(1) - a42 * x(4) + b4 * u4; 
end 

然而,這不會導致在一個完美的X(4) = 1,而會有一個小錯誤。 B)調用一個事件函數,它可以被學習到關於herehere,在這種情況下,你可以中斷一個新的函數調用。

+0

謝謝@Rasman。我還沒有達到相同的結果(來自論文),但你的迴應使我走上了正確的軌道。 – cer