编辑:感谢您的支持,现在我终于添加了图像。添加了完整的 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) 的布尔表达式(红线的导数)应该为 false,直到 xp(2) 改变符号。
红线 = x3 很好..随着 xp(2) 的符号发生变化,布尔表达式现在为 true 并且红线改变方向,但绿线无法这样做...换句话说 x(2)>=X2 (这很好)和 xp(3)>=0 (我不明白)
换句话说:红线正在下降,为什么 xp(3)>=0 ?
在第二张图片中,我添加了 xp(1)>0 ,布尔表达式最终变为 false...但为什么不在 xp(3) 改变符号时?!
Thanks
如果我理解正确的话,您需要帮助的主要内容是解释为什么该声明xp(3)>=0
评估为真。
研究你的计算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(3)
当你计算xp(2)
(反之亦然)。但xp(3)
当您在 xp(2) 的计算中使用它时仍然为零,因此表达式xp(3)>=0
将始终评估为 true。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)