EDITED: Спасибо за голосование, теперь я наконец-то добавил изображения. Добавлен полный m.file, хотя я не думаю, что это было необходимо. Ключ кода.
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) не изменится подписать.
Красная линия = x3 работает нормально.. поскольку знак для xp(2) изменяется, логическое выражение теперь истинно, и красная линия меняет направление, но зеленая линия этого не делает... другими словами, оба x(2)>=X2 (что нормально) и xp(3)>=0 (чего я не понимаю)
другими словами: красная линия падает, как получилось, что xp(3)>=0 ?
На 2-м рисунке я добавил xp(1)>0, и логическое выражение, наконец, стало ложным... но почему бы и нет, поскольку xp(3) изменил знак?!
Спасибо
boolean expression in xp(2) should be true until it approaches X2=25
, аthe condition in xp(2) is true when X2 > 25
. Слово «подходы» лично меня раздражает, потому что оно ничего не значит вне контекста. Это не абстрактная математика, это числовые вычисления, вы должны все определить. - person Rasman   schedule 08.01.2013