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

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

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

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)

Categories

Find more on Programming in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!