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 に近づくまで true にする必要がありますが、xp(3) のブール式 (赤の線の導関数) は xp(2) が変化するまで false にする必要があります。サイン。

赤い線 = x3 は問題ありません.xp(2) の符号が変わると、ブール式の式が真になり、赤い線が方向を変えますが、緑の線はそうしません... つまり、x(2)>=X2 の両方(これで問題ありません) および xp(3)>=0 (これはわかりません)

つまり、赤い線が下がっていますが、なぜ xp(3)>=0 になるのでしょうか?

2番目の写真では、xp(1)>0を追加し、ブール式が最終的にfalseになります...しかし、xp(3)が符号を変更したのはなぜですか?!

ありがとう

ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1

0

私の理解が正しければ、主にサポートが必要なのは、ステートメントxp(3)>=0が true と評価される理由の説明です。

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 と評価されます。

于 2013-01-08T08:07:43.603 に答える