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

 채택된 답변

Ameer Hamza
Ameer Hamza 2020년 5월 10일
편집: Ameer Hamza 2020년 5월 10일

0 개 추천

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');

추가 답변 (1개)

Rasoul Rahimzadeh Bafti
Rasoul Rahimzadeh Bafti 2020년 5월 10일

0 개 추천

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