Re: Symbolic Derivative of Piecewise Contin Fcn
- To: mathgroup at smc.vnet.net
- Subject: [mg15532] Re: [mg15490] Symbolic Derivative of Piecewise Contin Fcn
- From: BobHanlon at aol.com
- Date: Tue, 26 Jan 1999 13:44:23 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 1/18/99 9:14:16 AM, sullivan at indra.com writes:
>How can I get a symbolic derivative on a region of a piecewise
>continuous function using Mathematica? Two simple examples, extracted
>from long Modules are below.
>
>Alternatively, is there some magic functional M that, given a piecewise
>contin function, would return a piece of it? For example, let: f[x_]
>:= If[ x < 0, x^2, x^5] Is there a M such that: M[ f, {x < 0}] would
>return: x^2
>
>Many thanks for any help ...
>Steve
>
>
>The following examples of the failure of D[] are extracted from much
>more complicated functions. They were run using Mathematica 3.0.
>
>htest[ uval_ ] := Module [
> {res},
> If[ uval < 0, res = uval^2, res = uval^5];
> res
>]
>
>D[ htest[ uval], uval]
>==> returns: 0
>
>tstb[ pow_Integer, uval_ ] := Module [
> {res}, (* local vars *)
> If[ pow == 0,
> If[ uval < 0, res = 0, res = uval^2],
> res = uval^5 * tstb[ pow-1, uval]
> ];
> res (* return *)
>]
>
>D[ tstb[ 0, uval], uval]
>==> returns: 0
>
>D[ tstb[ 1, uval], uval]
>==> returns: 5 res$4 uval^4 (?? what is res$4 ?)
Change the definition of htest as follows:
htest[uval_] := If[uval < 0, uval^2, uval^5];
You can then take its derivative.
D[htest[uval], uval]
If[uval < 0, 2*uval, 5*uval^4]
or in a function definition
gtest[uval_] := Evaluate[D[htest[uval], uval]];
gtest[uval]
If[uval < 0, 2*uval, 5*uval^4]
For your recursive function
tstb[0, uval_] := If[uval < 0, 0, uval^2];
tstb[pow_Integer, uval_] :=
uval^5 * tstb[pow-1, uval];
Table[tstb[k, uval], {k, 0, 3}]//ColumnForm
If[uval < 0, 0, uval^2]
uval^5*If[uval < 0, 0, uval^2]
uval^10*If[uval < 0, 0, uval^2]
uval^15*If[uval < 0, 0, uval^2]
Table[D[tstb[k, uval], uval], {k, 0, 3}] //
ColumnForm
If[uval < 0, 0, 2*uval]
uval^5*If[uval < 0, 0, 2*uval] +
5*uval^4*If[uval < 0, 0, uval^2]
uval^10*If[uval < 0, 0, 2*uval] +
10*uval^9*If[uval < 0, 0, uval^2]
uval^15*If[uval < 0, 0, 2*uval] +
15*uval^14*If[uval < 0, 0, uval^2]
If you cannot restructure a function definition in this fashion, define
the derivative separately along the lines
Unprotect[Derivative];
Derivative[1][f][x_] :=
If[x<0, Evaluate[D[x^2, x]], Evaluate[D[x^5, x]]];
Protect[Derivative];
D[f[x], x]
If[x < 0, 2*x, 5*x^4]
Bob Hanlon