ComplexExpand, Piecewise, and simplification
- To: mathgroup at smc.vnet.net
- Subject: [mg66659] ComplexExpand, Piecewise, and simplification
- From: Andrew Moylan <andrew.moylan at anu.edu.au>
- Date: Fri, 26 May 2006 04:17:19 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Thanks for your help regarding "Simplification and Arg[]", Andrzej and
others. I have written a function that determines which independent
variables in an expression are not known to be real (according to
$Assumptions), and thus must be passed as the second argument to
ComplexExpand. This makes ComplexExpand safe to call on any expression.
I have since noticed that FullSimplify is also comparitively poor at
handling Piecewise functions. There are two aspects to this that I have
found:
(1) In an expression like a+Piecewise[{{b,condition1},{c,condition2}}],
it is frequently useful to try calling PiecewiseExpand; it will bring
the "a+" inside the Piecewise function and allow for
simplification/cancellation of it with the pieces. This is a very cheap
operation, but FullSimplify does not appear to take advantage of it.
(2) In an expression like
Piecewise[{{b,condition1},{c,condition2}},defaultvalue], it is
frequently useful to append condition1 to $Assumptions and then call
FullSimplify on piece b, followed by instead appending condition2 to
$Assumptions and calling FullSimplify on piece c, then finally appending
Not[Or[condition1,condition2]] to $Assumptions and then calling
FullSimplify on the defaultvalue.
As Andrezj suggested, I have written extended versions of Simplify and
FullSimplify. They expose an indentical interface to the built-in
functions, except they expose additional options specifying whether to
try various ComplexExpand transformation functions (with various values
for the TargetFunctions option and automatically-determined list of
complex variables); and whether to use the simple Piecewise
simplification methods described above.
-Andrew
Andrzej Kozlowski wrote:
> On 22 May 2006, at 11:30, Andrew Moylan wrote:
>
>
>>Should Mathematica be able to simplify the following expression?
>>(It is
>>easily seen to be zero under the given condition, x > 0.)
>>
>>FullSimplify[
>> Arg[1 + I * x] + Arg[1 - I * x],
>> {x > 0}
>>]
>>
>>In particular, I would have expected the following to yield ArcTan[b /
>>a], from which the above expression is easily reduced to zero:
>>
>>FullSimplify[
>> Arg[a + I b],
>> {a > 0, b > 0}
>>]
>>
>>Any ideas?
>>
>>Cheers,
>>
>>Andrew
>>
>>P.S. Apologies if I have sent this twice; my original message seems
>>not
>>to have worked.
>>
>
>
>
> You do not even need the condition x>0: it is enough that x is real.
>
> ComplexExpand[Arg[1 + I * x] + Arg[1 - I * x],TargetFunctions->{Re,Im}]
>
> 0
>
> Simplify and FullSimplify by default do not make use of ComplexExpand.
> Of course, if you wish you can make Simplify use ComplexExpand:
>
> Simplify[Arg[1 + I*x] + Arg[1 - I*x],
> TransformationFunctions ->
> {ComplexExpand[#1, TargetFunctions -> {Re, Im}] & ,
> Automatic}]
>
> 0
>
> Note that doing this automatically involves the assumption that x is
> real, so it would not be a good idea to permanently append
> ComplexExpand to the TransformationFunctions, except when the
> assumptions imply that the variables involved are real. However, it
> is not difficult to write a version of Simplify or FullSimplify which
> will make use ComplexExpand in a way that is compatible with the
> assumptions about the variables (real or complex). That it is not
> done by default is probably due to the facts that, on the one hand,
> ComplexExpand is a high complexity function, and on the other, it
> usually leads to more rather than less complex expressions (after all
> it "Expands").
>
> Note also that:
>
>
> ComplexExpand[Arg[a + I*b], TargetFunctions -> {Re, Im}]
>
>
> ArcTan[a, b]
>
> so the assumption about a and b being positive are again not needed.
>
>
> Andrzej Kozlowski
> Tokyo, Japan
>