2013-01-05 30 views
2

EDITED:感謝upvotes,現在我終於添加了圖像。增加了完整的m.file,儘管我不認爲這是必要的。代碼的關鍵是。MATLAB - 布爾型的棘手的Ode系統

xp(2)=...-((x(2)>=X2)&(xp(3)>=0)...; 
xp(3)=...-((x(3)>=X3)&(xp(2)>=0))...; 

全碼:

function xp=uzdevums1(t,x) 
%parametr values 
r1 = 0.1; r2 = 1; r3 = 0.2; 
K1=100;K2 = 100; K3 = 100; 
X2=25;X3=10; 
speedx2 = 0.02; speedx3=0.02; 
%ode system 
xp=zeros(3,1); 
xp(1)=r1*(1-x(1)/(x(2)+x(3)))*x(1); 
xp(2)=r2*(1-x(2)/K2)*x(2)-((x(2)>=X2)&(xp(3)>=0)&xp(1)>0)*x(2)*x(1)*speedx2; 
xp(3)=r3*(1-x(3)/K3)*x(3)-((x(3)>=X3)&(xp(2)>=0))*x(3)*x(1)*speedx3; 

從殼: [T,X] = ODE45( 'uzdevums1',[0 60],[10 80 20]); 這個想法是,xp(2)(綠線的導數)中的布爾表達式應該爲真,直到它接近X2 = 25,但 xp(3)(紅線的導數)的布爾表達式應該爲假,直到xp(2 )改變標誌。

Red line = x3 does fine .. as xp(2)的符號發生變化,布爾epxression現在爲true,紅線改變方向,但綠線沒有這樣做...換句話說,兩個x(2 )> = X2(這很好)和XP(3)> = 0(我不明白)

換句話說:紅線正在下降,怎麼來xp(3)> = 0?

在第二張圖中,我添加了xp(1)> 0並且布爾表達式最終變成了false ...但是爲什麼不在xp(3)改變了符號?!

感謝

enter image description here enter image description here

+0

等等,雖然我沒有看到圖片的任何鏈接..我們如何理解這個問題? – Acorbe

+0

此代碼是模型方程的一部分嗎?如果是這樣,那是一個非常糟糕的主意。通常的解算器不會期望右手邊的不連續變化。你需要離散化,但由於時間間隔取決於你的參數,這需要進一步的東西,如約束和可能的時間轉換。不知道你在這裏嘗試什麼。 –

+0

我想附加圖像,但軟件沒有讓我不足夠點。 –

回答

0

如果我理解正確的話,你想獲得幫助的主要的是爲什麼聲明xp(3)>=0計算爲true的解釋。

分步研究你的xp的計算。

xp=zeros(3,1); 
xp(1)=r1*(1-x(1)/(x(2)+x(3)))*x(1); 
xp(2)=r2*(1-x(2)/K2)*x(2)-((x(2)>=X2)&(xp(3)>=0)&xp(1)>0)*x(2)*x(1)*speedx2; 
xp(3)=r3*(1-x(3)/K3)*x(3)-((x(3)>=X3)&(xp(2)>=0))*x(3)*x(1)*speedx3; 

您嘗試,當你計算xp(2)(反之亦然)使用的xp(3)值。但在計算xp(2)時,xp(3)仍然爲零,因此表達式xp(3)>=0將始終計算爲true。