Re: How to convert a HeavisideTheta to a PieceWise function
- To: mathgroup at smc.vnet.net
- Subject: [mg93797] Re: How to convert a HeavisideTheta to a PieceWise function
- From: Nikolaus Rath <Nikolaus at rath.org>
- Date: Wed, 26 Nov 2008 05:12:23 -0500 (EST)
- References: <gggqf5$317$1@smc.vnet.net>
"wxziwyz at 126.com" <wangxz1983 at gmail.com> writes:
> For example:
> we have f(x) = (x + (-2 + x) HeavisideTheta[-2 + x] - 2 (-1 + x)
> HeavisideTheta[-1 + x]) HeavisideTheta[x]
>
> apparently, this is a piecewise function.
>
> My problem is, How to transfer it into a Piecewise expression, i.e.
>
> f(x) = Piecewise[{{0, x < 0}, {x, 0 < x <= 1}, {2- x, 1 < x <= 2}=
, {0,
> x > 2}}]
>
> Is there any function in Mathematica can do this?
I don't know any such function. But it should be possible to do it
manually. The following seems to work at least for simple cases:
f[x_] := HeavisideTheta[x - 2] x^2 + HeavisideTheta[x + 2] x;
thetas = Extract[f[x], Position[f[x], HeavisideTheta[_]]];
cases = Solve[# == 0, x] & /@ thetas[[All, 1]];
boundaries = (x /. #) & /@ Flatten[cases];
boundaries = {-\[Infinity],
Sequence @@ Sort[boundaries], \[Infinity]};
cases2 = Table[
boundaries[[i]] < x < boundaries[[i + 1]],
{i, Length[boundaries] - 1}]
Piecewise [
{Simplify[f[x], Assumptions -> {#}], # } & /@ cases2]
It first extracts the arguments of all HeavisideTheta functions. Then
it solves them for x to determine the positions at which the Heaviside
function changes from 0 to 1. It appends -/+ Infinity to this list of
boundaries and constructs a list of cases. Finally, Simplify is used
to get rid of the Heaviside's inside each region.
HTH,
-Nikolaus
--
=C2=BBIt is not worth an intelligent man's time to be in the majority.
By definition, there are already enough people to do that.=C2=AB
-J.H. Hardy
PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C