Numerical Solution of Difficult ODE Boundary Value Problems
Description
Examples
This page describes some strategies and suggestions for the use of the dsolve/numeric bvp solver for difficult problems. It suggests possible solutions to be used in the case that default settings fail.
Initial Solution Problems
Related errors include:
initial Newton iteration is not converging
initial approximate solution not converging, may need a better approximation or more mesh points
In the case that an initial solution profile was not provided, the first error message indicates that dsolve/numeric cannot find a suitable initial solution profile. The second message indicates that because the provided solution profile is too different from the true solution, the Newton iteration is not converging.
There are three possible strategies for this type of problem.
1. Specify an initial approximation to the problem by using approxsoln (for the first case).
2. Determine a "nearby" problem, and use continuation and mincont to obtain an accurate initial profile.
3. Attempt an initial solution with a greater number of points than the default by using initmesh.
Continuation Problems
This includes the errors:
unable to refine continuation solution for parameter value ...
continuation failed for parameter value ...
The error messages suggest the use of a different continuation or a finer mesh, but a greater number of initial points (by using the initmesh argument) or a greater value for maxmesh may help.
Other Solution Errors
Unable to Achieve Requested Accuracy
The unable to achieve requested accuracy error indicates that either the abserr bound is set too tightly, or that maxmesh needs to be increased.
The unable to achieve continuous solution with requested accuracy error indicates that a discrete solution with the desired error could be found, but the error estimate of the interpolant used to construct a continuous solution could not be decreased below the requested error bound. This can be fixed in the same manner as the prior error. Alternatively, it can be fixed by requesting that the interpolation error step be skipped (by specifying interpolant=false or output=mesh).
Insufficient Precision
The unable to achieve requested accuracy due to round-off error and precision is insufficient for required absolute error messages indicate that the resulting discretized problem is probably somewhat ill-conditioned, or that the requested tolerance is set too low. The abserr bound or Digits environmental variable must be increased. Note: The minimum number of Digits with which the solver computes is double precision (use evalhf⁡Digits to determine this number).
Newton iteration is not converging
This is a difficult problem. Often this error arises when a problem has narrow boundary layers or sharp corner layers. The best strategy for solving this problem is to try to obtain a low accuracy solution or a solution to a nearby problem. This may increase your understanding of the problem. Then use a change of variables to transform the boundary value problem into a more tractable problem that can be numerically solved more easily.
Other Errors
Other errors can occur, such as singularity encountered, and newton iteration has not sufficiently converged after max iteration count. The first of these errors is straightforward, the solution likely has a singularity in its domain, while the second suggests that a Richardson method be used instead of a deferred correction method.
Singular or Stiff Problems
The implemented methods for BVP solution are intended for non-stiff or mildly stiff BVP problems, with solutions having continuous higher order derivatives. If there are discontinuities in the higher order derivatives of the solution, the methods may be able to find a solution, but will not do so efficiently.
For an itemized description of the options mentioned here, consult the dsolve[numeric,bvp] help page.
Example of a precision error:
dsys≔diff⁡y⁡x,x,x−2⁢y⁡x=0,y⁡0=1.2,y⁡1=0.9
dsys≔ⅆ2ⅆx2y⁡x−2⁢y⁡x=0,y⁡0=1.2,y⁡1=0.9
dsolve⁡dsys,numeric,abserr=1.×10−16
Error, (in `dsolve/numeric/bvp`) precision is insufficient for required absolute error, suggest increasing Digits to approximately 18 for this problem
Solution:
Digits≔20
dsol1≔dsolve⁡dsys,numeric,abserr=1.×10−16
dsol1 ≔ procx_bvp...end proc
dsol1⁡0
x=0.,y⁡x=1.2000000000000000000,ⅆⅆxy⁡x=−1.2525189510786390887
dsol1⁡0.2
x=0.2,y⁡x=0.99446362812308262645,ⅆⅆxy⁡x=−0.81652895731295644453
dsol1⁡0.5
x=0.5,y⁡x=0.83294209083370625916,ⅆⅆxy⁡x=−0.27638519529089584694
dsol1⁡1
x=1.,y⁡x=0.90000000000000000000,ⅆⅆxy⁡x=0.55570110924051096309
Digits≔10:
Use of Continuation:
Attempt to solve the following problem.
ode≔1100⁢diff⁡y⁡x,x,x+exp⁡y⁡x⁢diff⁡y⁡x,x−12⁢π⁢sin⁡12⁢π⁢x⁢exp⁡2⁢y⁡x=0
ode≔ⅆ2ⅆx2y⁡x100+ⅇy⁡x⁢ⅆⅆxy⁡x−π⁢sin⁡π⁢x2⁢ⅇ2⁢y⁡x2=0
bcs≔y⁡0=0,y⁡1=0
An error arises indicating that the initial Newton iteration does not converge.
dsolve⁡bcs,ode,numeric
Error, (in `dsolve/numeric/bvp`) initial Newton iteration is not converging
To solve this problem, choose a continuation that increases the coefficient of the second order derivative of the equation for lambda=0, and gives the solution for lambda=1.
newode≔110⁢1−λ+1100⁢diff⁡y⁡x,x,x+exp⁡y⁡x⁢diff⁡y⁡x,x−12⁢π⁢sin⁡12⁢π⁢x⁢exp⁡2⁢y⁡x=0
newode≔11100−λ10⁢ⅆ2ⅆx2y⁡x+ⅇy⁡x⁢ⅆⅆxy⁡x−π⁢sin⁡π⁢x2⁢ⅇ2⁢y⁡x2=0
The 1/10 is present to make the initial solution close to the desired solution. Now apply dsolve with continuation.
ds≔dsolve⁡bcs,newode,numeric,continuation=λ
ds ≔ procx_bvp...end proc
The desired solution is obtained.
Use plots[odeplot](ds) to view the solution. It shows a boundary layer at x=0.
For the following problem
ode≔diff⁡f⁡t,t,t,t+0.5⁢f⁡t⁢diff⁡f⁡t,t,t=0
ode≔ⅆ3ⅆt3f⁡t+0.5⁢f⁡t⁢ⅆ2ⅆt2f⁡t=0
bcs≔f⁡0=0,D⁡f⁡0=0,D⁡f⁡100=1
you cannot obtain the solution directly:
Error, (in `dsolve/numeric/bvp`) Newton iteration is not converging
There is an easy solution of f⁡x=0 if the right boundary condition was D⁡f⁡100=0, so use this as the continuation, and obtain a solution:
newbcs≔f⁡0=0,D⁡f⁡0=0,D⁡f⁡100=λ
dsn≔dsolve⁡newbcs,ode,numeric,continuation=λ
dsn ≔ procx_bvp...end proc
and with the following plot, there is a boundary layer in the second derivative of the solution at t=0
plotsodeplot⁡dsn,t,diff⁡f⁡t,t,t
See Also
Digits
dsolve
dsolve[numeric,bvp]
dsolve[numeric]
Download Help Document