How can I solve this BVP problem which is second-order ODE with variable coefficient?

17 views (last 30 days)
Hi there,
I have some problems regarding solving this problem on MATLAB:
y'' + [(1-10x^2)/x]*y' = 0
BC: y(0) = 1, y(1) = 0
Thanks in advance.
  2 Comments
Sohrab Askarli
Sohrab Askarli on 30 Nov 2020
Edited: Sohrab Askarli on 30 Nov 2020
close all;
fun = @(x,y)[y(2); -x.*0.1e1*y(2) + x.*1.0e1*y(2)];
bc = @(ya, yb) [ya(1) - 1; yb(1)];
xmesh = linspace(0, 1, 100);
solinit = bvpinit(xmesh, [1 0]);
sol = bvp4c(fun, bc, solinit);
figure;
plot(sol.x, sol.y);
This is what I have made so far, however I'm not satisfied with the result, but I dunno what to change. Theoretically, it seems ok to me, hence, I cannot find where I make mistake.

Sign in to comment.

Accepted Answer

Stephan
Stephan on 30 Nov 2020
Edited: Stephan on 30 Nov 2020
Your function handle appears to be incorrect:
syms y(x)
eq = diff(y,x,2) + ((1-10*x^2)/x)*diff(y,x,1) == 0;
[V,S] = odeToVectorField(eq);
fun = matlabFunction(V,'Vars',{'x','Y'})
gives:
fun =
function_handle with value:
@(x,Y)[Y(2);((x.^2.*1.0e+1-1.0).*Y(2))./x]
additionally your function gets singular at x=0, to avoid this:
fun = @(x,Y)[Y(2);((x.^2.*1.0e+1-1.0).*Y(2))./x];
bc = @(ya, yb) [ya(1) - 1; yb(1)];
xmesh = linspace(1e-4, 1, 100);
solinit = bvpinit(xmesh, [1 0]);
sol = bvp4c(fun, bc, solinit);
figure;
yyaxis left
plot(sol.x, sol.y(1,:),'LineWidth',2)
yyaxis right
semilogy(sol.x, sol.y(2,:),'LineWidth',2)
Note that the right axis is log scaled:

More Answers (0)

Community Treasure Hunt

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

Start Hunting!