【发布时间】:2013-01-05 15:44:55
【问题描述】:
已编辑:感谢您的支持,现在我终于添加了图片。添加了完整的 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 并且布尔表达式最终变为 false...但是为什么不作为 xp(3) 更改符号?!
谢谢
【问题讨论】:
-
等等,我没有看到任何指向您的图片的链接.. 我们如何理解这个问题?
-
此代码是您的模型方程的一部分吗?如果是这样,那真是个坏主意。通常的求解器不会期望右手边出现不连续的变化。您将需要离散化,但由于间隔取决于您的参数,这将需要更多的东西,如约束和可能的时间转换。不知道你在这里尝试什么。
-
我想附上图片,但软件没有让我没有足够的积分。
-
我在求解器方面没有遇到任何问题。ode45 对我来说效果很好。
-
如果您不能发布图片,您至少可以发布更多代码
标签: matlab boolean derivative