       Re: NDSolve and Piecewise

• To: mathgroup at smc.vnet.net
• Subject: [mg92126] Re: NDSolve and Piecewise
• From: Szabolcs Horvát <szhorvat at gmail.com>
• Date: Sat, 20 Sep 2008 05:02:34 -0400 (EDT)
• Organization: University of Bergen
• References: <gavt1g\$g61\$1@smc.vnet.net>

```M.G. Bartlett wrote:
> Folks,
>
> I am having some trouble with getting Piecewise and NDSolve to play
> nicely together.  My problem is to find a solution to the heat flow
> equation with an arbitrary time-varying upper boundary condition and a
> looks like this:
>
> NDSolve[{D[u[t, x], t] == D[u[t, x], x, x],
>   u[t, 0] == Piecewise[{{t/10, 0 <= t < 5}, {(10 - t)/10, 5 <= t <
> 10}}],
>   u[0, x] == x/5, (D[u[t, x], x] /. x -> 5) == 1/5}, u, {t, 0, 10},
> {x, 0, 5}]
>
> This returns and NDSolve::ndum error on my system, which past
> experience tells me is usually me leaving some symbolic value hanging
> around somewhere it ought not to be.  I can't see any such problem
> this time.  I'm pretty sure that I have written similar code in the
> past (using Piecewise and NDSolve, though it was some time ago and I
> can't locate the file now) and had it work, and it works if you
> replace Piecewise with another functional form (like Sin[t]).  Am I
> missing something?
>

I think that NDSolve attempts to take the derivative of that Piecewise
expression symbolically, which results in a function whose value is
indeterminate at some points (notably 0 and 5):

In:= D[
Piecewise[{{t/10, 0 <= t < 5}, {(10 - t)/10, 5 <= t < 10}}], t]

Out= Piecewise[{{0, t < 0}, {1/10, 0 < t < 5}, {-(1/10),
5 < t < 10},
{0, t > 10}}, Indeterminate]

The error will go away if you wrap the expression into a function that
only evaluates for numerical arguments:

bval[t_?NumericQ] :=
D[Piecewise[{{t/10, 0 <= t < 5}, {(10 - t)/10, 5 <= t < 10}}], t]

(Use bval[t] as the boundary condition.)

```

• Prev by Date: Re: NDSolve and Piecewise
• Next by Date: Re: shooting method
• Previous by thread: Re: NDSolve and Piecewise
• Next by thread: Re: NDSolve and Piecewise