2

已编辑:感谢您的支持,现在我终于添加了图片。添加了完整的 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) 更改符号?!

谢谢

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

0

如果我对您的理解正确,您需要帮助的主要是解释为什么该语句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将始终计算为真。

于 2013-01-08T08:07:43.603 回答