6
$\begingroup$

I am trying to solve a system of one-dimensional two-point boundary-value problems with NDSolve. I would like use a fixed mesh (specified by me) in the calculation. Is there a way to do this? The mesh can be uniformly spaced. Thanks!

$\endgroup$
  • 1
    $\begingroup$ Providing an example of what you want may improve this question. $\endgroup$ – Sjoerd C. de Vries Jun 25 '13 at 22:17
4
$\begingroup$

First the mesh where you want NDSolve to solve the ODE-BVP.

(*Specifyling grid*)
{start, end, dist} = {0, 1, 1/10};
SuppliedMesh = N@Range[start, end, dist]

{0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.}

Now lets solve an example system below on the specified grid

(* Solving and saving the grid NDSolve uses *)
{sol, {grid}} = 
Reap[y /. Flatten@
 NDSolve[{y''[t] + y[t]/4 == 8, y[start] == 0, y[end] == 0}, 
  y, {t, start, end}, StartingStepSize ->dist, 
  EvaluationMonitor :> Sow[t],Method -> {"FixedStep", Method -> "ExplicitEuler"}]
];
(* Value of the interpolating function on its underlying mesh*)
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"];
InterpolatingFunctionValuesOnGrid[sol]

{0., -0.366755, -0.653511, -0.85935, -0.983554, -1.02561, -0.985208, -0.862242, -0.656812, -0.369227, 1.66533*10^-16}

Checking if the mesh matches really the supplied one.

SuppliedMesh === grid === Flatten@InterpolatingFunctionGrid[sol]

True

PS:

Now in place of supplying the mesh to NDSolve better one should try to make NDSolve make/use it in run-time while solving the equation by tuning its stepping algorithm. You will find such trick in NDSolvePlugIns.

BR

$\endgroup$
  • $\begingroup$ nice answer. You can also use InterpolatingFunctionGrid[sol] to extract the grid points. $\endgroup$ – user21 Jun 26 '13 at 6:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.