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)改變了符號?!
感謝
等等,雖然我沒有看到圖片的任何鏈接..我們如何理解這個問題? – Acorbe
此代碼是模型方程的一部分嗎?如果是這樣,那是一個非常糟糕的主意。通常的解算器不會期望右手邊的不連續變化。你需要離散化,但由於時間間隔取決於你的參數,這需要進一步的東西,如約束和可能的時間轉換。不知道你在這裏嘗試什麼。 –
我想附加圖像,但軟件沒有讓我不足夠點。 –