2nd order ode by ode45 or other numerical method

Hi every one,
I am trying to solve below differential equation with matlab:
y''+(2/x)*y'=0.1248y
B.C 1 : y'(0)=0
B.C 2: y(1)=1
x interval: [0 1]
solution interval (or y): [0 1]
I used bvp4c and ode45 but every time I faced with error like "solve the collocation equations -- a singular Jacobian encountered"
this is my code:
function SolveBVP()
solinit = bvpinit([0,1],[0 0]);
sol = bvp4c(@deriv,@bcs,solinit);
x=linspace(0,1,100);
y=deval(sol,x);
plot(x,y(1,:),'b-x');
function dYdx = deriv(x,Y)
dYdx(1) = Y(2);
dYdx(2) = 0.1248*Y(1)-(2/x)*Y(2);
function res = bcs(ya,yb)
res = [ ya(2)
yb(1)-1];
It would be appricated if any one of you can help me.
best regards

 Réponse acceptée

Ameer Hamza
Ameer Hamza le 10 Mai 2020
Modifié(e) : Ameer Hamza le 10 Mai 2020
You ODE have term 2/x, which becomes infinite at x=0. To avoid this, start the limit a bit above 0 (say 1e-20). Also, it is better to pass the initial guess at several points. Try this
x=linspace(1e-20,1,100);
solinit = bvpinit(x,[1 0]);
sol = bvp4c(@deriv,@bcs,solinit);
y=deval(sol,x);
plot(x,y(1,:),'b-x');

Plus de réponses (1)

Rasoul Rahimzadeh Bafti
Rasoul Rahimzadeh Bafti le 10 Mai 2020

0 votes

Dear Ameer,
Thanks for your kind response and consideration. That was very helpful!!!
Sincerely,
Rasoul

Community Treasure Hunt

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

Start Hunting!

Translated by