已编辑:感谢您的支持,现在我终于添加了图片。添加了完整的 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 怎么来的?
在第二张图片中,我添加了 xp(1)>0 并且布尔表达式最终变为假......但为什么不作为 xp(3) 更改符号?!
谢谢