BVP4C for solving an 3rd order ODE
24 views (last 30 days)
Show older comments
I am stuck in boundary condition which can't be slove with ode45.
to solve this problem can you please help me with boundary condition and convert it BVP4C ?
my progress is -
tRange = [0 10];
function dYdt = odefun(t,Y)
% Extract Y1,Y2,Y3 the element of Y
Y1 = Y(1);
Y2 = Y(2);
Y3 = Y(3);
% Expression for dY1dt, dY2dt,dY3dt.
dY1dt = Y2;
dY2dt = Y3;
dY3dt = -(1/2)*Y1*Y3;
% Create dYdt, column vector containing dY1dt, dY2dt, and dY3dt
dYdt = [dY1dt; dY2dt; dY3dt];
end
0 Comments
Accepted Answer
Torsten
on 29 Sep 2022
tmesh = linspace(0,10,100);
solinit = bvpinit(tmesh, [0 1 0]);
sol = bvp4c(@odefun, @bcfcn, solinit);
plot(sol.x, sol.y)
function dYdt = odefun(t,Y)
% Extract Y1,Y2,Y3 the element of Y
Y1 = Y(1);
Y2 = Y(2);
Y3 = Y(3);
% Expression for dY1dt, dY2dt,dY3dt.
dY1dt = Y2;
dY2dt = Y3;
dY3dt = -(1/2)*Y1*Y3;
% Create dYdt, column vector containing dY1dt, dY2dt, and dY3dt
dYdt = [dY1dt; dY2dt; dY3dt];
end
function res = bcfcn(ya,yb)
res = [ya(1);ya(2);yb(2)-1];
end
4 Comments
Shriram
on 1 Dec 2023
Thanks for your answer!
I was curious about how to implemenet this method for a problem where the boundary conditions are as follows:
y(0) = 0, y'(2) = 0 and y'(10) = 1?
How would we formulate this in MATLAB?
Torsten
on 2 Dec 2023
Edited: Torsten
on 2 Dec 2023
You need two conditions at t = 2, not only one. Then you can solve the problem first from t=0 to t=2 with a total of 3 boundary conditions (one at t=0, two at t=2) and continue solving from t=2 to t=10, again with a total of three conditions given (two at t=2, one at t=10).
Note that the solution might have some discontinuous derivatives in t=2.
If you only prescribe a total of three conditions, there is no unique solution to the problem. BVP4C cannot be used in this case. Sometimes it's possible to get a parameter-dependent solution with "dsolve".
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!