Is there a utility in Mathematica that can convert between two representations of an expression? The simplest example I can think of is
Abs[x]
Which I'd like to convert to something like
Piecewise[{{-x,x<0},{x,x>=0}}]
Another simple example is
f[r_]:= 1/16 ((-3+6r) Abs[1 - 2 r] + (3 - 2 r) Abs[3 - 2 r]
- 3 (1 + 2 r) Abs[1 + 2 r] + (3 + 2 r) Abs[3 + 2 r])
Assuming[r > 1/2, Simplify[f[r]]]
Assuming[-1/2 < r < 1/2, Simplify[f[r]]]
Assuming[r < -1/2, Simplify[f[r]]]
Assuming[-2 < r < 2, Simplify[f[r]]]
Assuming[-1/2 < r < 3/2, Simplify[f[r]]]
Assuming[0 < r < 2, Simplify[f[r]]]
which produces the output (sorry for formatting; I'm just using "copy as LaTeX" from Mathematica):
Out[2]=
$$\begin{cases} \frac{1}{8} (3-2 r)^2 & 2 r\leq 3 \\ 0 & \text{True} \\ \end{cases} $$
Out[3]=
$$\frac{3}{4}-r^2$$
Out[4]=
$$\begin{cases} \frac{1}{8} (2 r+3)^2 & r\geq -\frac{3}{2} \\ 0 & \text{True} \\ \end{cases}$$
Out[5]=1/16 ((-3 + 6 r) Abs[1 - 2 r] + (3 - 2 r) Abs[3 - 2 r]
- 3 (1 + 2 r) Abs[1 + 2 r] + (3 + 2 r) Abs[3 + 2 r])
Out[6]=
$$\begin{cases} \frac{3}{4}-r^2 & 2 r\leq 1 \\ \frac{1}{8} (3-2 r)^2 & \text{True} \\ \end{cases} $$
Out[7]=1/16 (6 - 8 r^2 + (-3 + 6 r) Abs[1 - 2 r] + (3 - 2 r) Abs[3 -2 r])
So it's able to recognize what the function is over each domain, and if there are only two pieces, it can produce a piecewise expression, but if there are more than two pieces it fails. Is there another way to get piecewise expressions that would be better than Assuming[xmin<x<xmax,Simplify[f[x]]?
For testing purposes, the following function can be used to generate piecewise functions (not explicitly piecewise, but using Abs[] as above). g[n] will produce an n-segment piecewise expression on the interval [-n/2,n/2] with segments of length 1.
g[n_Integer] := Assuming[-n <= r <= n,
Integrate[1/(2 π) (Sin[k/2]/(k/2))^n
(Cos[k r] - I Sin[k r]),
{k, -∞, ∞}]]
version info:
$Version
"11.0.0 for Linux x86 (64-bit) (July 28, 2016)"
