MATLAB Answers


Help solving 2 ODEs

Asked by Kurt
on 24 Oct 2018
Latest activity Commented on by Star Strider
on 24 Oct 2018
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


Sign in to comment.

1 Answer

Answer by Star Strider
on 24 Oct 2018
 Accepted Answer

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]);
plot(W, PX)
Here ‘P’ is ‘PX(1)’, ‘X’ is ‘PX(2)’. The system encounters a singularity at 2.67, and the integration stops.


on 24 Oct 2018
I mean to keep them in their original forms
on 24 Oct 2018
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);
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.)

Sign in to comment.