Singular problem for bvp4c

2 vues (au cours des 30 derniers jours)
Zhekai Deng
Zhekai Deng le 19 Juil 2017
Commenté : Zhekai Deng le 20 Juil 2017
Hi All,
I encounter some singular problems regarding bvp4c, please see my code for my equations and implementation. I know that when x = -1 and 1, my derivative goes to infinity. And it seems like that MATLAB complaints about this. I wonder is there any workaround for this problem? I tried on ode113, and instead of evaluating my initial point at x = -1, I just do it at x = -1 + 1e-7 to avoid this singular points. And it is solvable. I would like to use bvp4c because I have other equations and boundary condition to coupled together. I wonder is there similar strategy for bvp4c? Here are my code
solinit = bvpinit(linspace(-1,1,50),0);
sol = bvp4c(@height_ode,@height_bc,solinit);
y = deval(sol,linspace(-1,1,50));
plot(linspace(-1,1,50),y(1,:))
and defintion for height_ode and height_bc are following:
function dhdx = height_ode(x,h)
w = 0.7;
q = 1/2*w*(1-x^2);
dqdx = -w*x;
kappa = 1.469;
dhdx = (560*h(1)^0.5*q - 64*h(1).^4 + 6*w.^(7/8)*(72*kappa - 77)*h(1)*q*dqdx)/(3*w.^(7/8)*(96*kappa - 77)*q.^2);
end
function res = height_bc(yleft, yright)
res = [yleft];
  3 commentaires
Zhekai Deng
Zhekai Deng le 20 Juil 2017
Thank you for your reply. I tried this approach, and it seems this strategy does not work, the height_ode are the same. To me, the only difference is that in ode113, the bcs is treated as an initial condition. In bvp4c, it is treated as a boundary condition on the left. See following code:
%%ode113 works
eps = 1e-6;
options = odeset('RelTol',1e-10);
xspan = [-1+eps 1-eps];
y0 =eps;
[x, h_head] = ode113(@height_ode,xspan,y0,options);
figure
plot(x,h_head,'-o')
%%bvp4c does not work
solinit = bvpinit(linspace(-1+eps,1-eps,3),eps);
sol = bvp4c(@height_ode,@height_bc,solinit);
y = deval(sol,linspace(-1+eps,1-eps,50));
plot(linspace(-1+eps,1-eps,50),y(1,:))
Zhekai Deng
Zhekai Deng le 20 Juil 2017
Also, I noticed the initial condition I set for ode113 is not 0, but eps. However, even if I change height_bc as following, it still shows a singular problem. Any help would be greatly appreciated! Thank you
function res = height_bc(yleft, yright)
eps = 1e-5;
res = [yleft(1) + eps]; % res = [yleft(1) - eps]; also does not work
end

Connectez-vous pour commenter.

Réponses (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by