Re: NDSolve solution does not fulfill boundary condition

• To: mathgroup at smc.vnet.net
• Subject: [mg121120] Re: NDSolve solution does not fulfill boundary condition
• From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
• Date: Mon, 29 Aug 2011 07:43:28 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <201108290747.DAA15678@smc.vnet.net>

```On Mon, 29 Aug 2011, Alex wrote:

> Hello everybody,
>
> I use Mathematica 7 and try to solve and plot a 2nd order ODE like this:
>
> sol = NDSolve[{0 == 4800*O2''[x] + 1500*Exp[-(100*x)^2] - 2000*O2[x],
> O2'[-0.5] == 0, O2'[0.5] == 0}, O2, {x, -1, 1}]
> Plot[O2[x] /. sol, {x, -1, 1}, PlotRange -> All]
>
> The solution looks ok, i.e. the slope of the solution is 0 at 0.5 and
> -0.5, as required by the boundary conditions. But if I slightly change
> the parameter values from 1500 to 1000 like this:
>
> sol = NDSolve[{0 == 4800*O2''[x] + 1000*Exp[-(100*x)^2] - 2000*O2[x],
> O2'[-0.5] == 0, O2'[0.5] == 0}, O2, {x, -1, 1}]
>
> I get a solution with slope=0 at -0.5, but with a positive slope at
> 0.5 !!??
>
> How can this be ?  What am I doing wrong ?
>
> Many thanks,
>
> axel
>
>

Alex, my guess is that NDSolve just misses that point at O2[1/2] since it
is not an end point. You can use

sol = NDSolve[{0 == 4800*O2''[x] + 1000*Exp[-(100*x)^2] - 2000*O2[x]
, O2'[1/2] == 0, O2'[-1/2] == 0}, O2, {x, -1, 1},
MaxStepSize -> 0.1]

Plot[O2[x] /. sol, {x, -1, 1}, PlotRange -> All]

But for this case DSolve is better:

as = O2 /.
DSolve[{0 == 4800*O2''[x] + a*Exp[-(100*x)^2] - 2000*O2[x],
O2'[0.5] == 0, O2'[-0.5] == 0}, {O2}, x];

f1[x_] := Evaluate[(as[[1]][x] /. a -> 1000)]
f2[x_] := Evaluate[O2[x] /. sol]

Plot[f1[x] - f2[x], {x, -1, 1}, PlotRange -> All]

Hope this helps,

Oliver

```

• Prev by Date: Re: NDSolve solution does not fulfill boundary condition ??
• Next by Date: Re: With Nearest
• Previous by thread: NDSolve solution does not fulfill boundary condition ??
• Next by thread: Re: NDSolve solution does not fulfill boundary condition