W(0)=0; W(f)=2.8; d(P)/d(W)=((-0.3743)/(2*P))*(1-(0.15*X)); P(0)=1; d(X)/d(W)=0.5*((0.08*(0.75*(1-X)))/(1-(0.15*X))); X(0)=0; Trying to solve these two ODEs

 採用された回答

Star Strider
Star Strider 2018 年 10 月 24 日

1 投票

Try this:
PX_ODE = @(W,PX) [((-0.3743)./(2*PX(1))).*(1-(0.15*PX(2))); 0.5*((0.08*(0.75*(1-PX(2))))./(1-(0.15*PX(2))))];
[W,PX] = ode15s(PX_ODE, [0, 2.8], [1; 0]);
figure
plot(W, PX)
grid
Here ‘P’ is ‘PX(1)’, ‘X’ is ‘PX(2)’. The system encounters a singularity at 2.67, and the integration stops.

5 件のコメント

Kurt
Kurt 2018 年 10 月 24 日
Is there another way to better show both equations
Star Strider
Star Strider 2018 年 10 月 24 日
Show them in what sense?
Plotting them is the only way I can think of.
Kurt
Kurt 2018 年 10 月 24 日
I mean to keep them in their original forms
Kurt
Kurt 2018 年 10 月 24 日
I was trying to do it this way, syms P(W) X(W) eqn1 = diff(P, W) == ((-0.3743)/(2*P))*(1-(0.15*X)); eqn2 = diff(X, W) == (0.5*((0.08*(0.75*(1-X)))/(1-(0.15*X))));
[odes, vars] = odeToVectorField(eqn1, eqn2); fun = matlabFunction(odes,'Vars',{'t','Y'}); X0(0) = [0, 0]; tspan = [0, 2.8]; [t, sol] = ode45(fun,tspan,x0);
P = sol(:,2); X = sol(:,1);
Star Strider
Star Strider 2018 年 10 月 24 日
That certainly works, although ‘P(0)’ cannot be zero. If ‘X(0)’ is greater than 1, the system will integrate out to 2.8.
Also, ‘fun’ is essentially the same as my code, and the result is the same. (The system is ‘stiff’, so ode15s or another stiff solver is more appropriate.)

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

製品

リリース

R2018b

質問済み:

2018 年 10 月 24 日

コメント済み:

2018 年 10 月 24 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by