Re: ComplexExpand
- To: mathgroup@smc.vnet.net
- Subject: [mg12297] Re: [mg12275] ComplexExpand
- From: Daniel Lichtblau <danl@wolfram.com>
- Date: Thu, 7 May 1998 18:51:33 -0400
- References: <199805050730.DAA17212@smc.vnet.net.>
Jack Goldberg wrote:
>
> Hi Group;
>
> I have found ComplexExpand useful and sometimes necessary. (Try DSolve[
> u''[t]+u'[t]+u[t]==0,u[t],t] to see why something like ComplexExpand
> is necessary.)
I should note that in version 3 DSolve handles this more nicely so one
need not post-process with ComplexExpand.
> The reason for this post is that I would like to share
> with those interested in these things, some uses that I have found for
> ComplexExpand that do not seem to be explicit in the literature that I
> have seen. Here are a group of functions that assume all variable are
> real unless explicitly stated to the contrary in the manner of
> ComplexExpand.
>
> (1) RealPart[z_] := ComplexExpand[ Re[z] ]
>
> (2) ImaginaryPart[z_] := ComplexExpand[ Im[z] ]
>
> (3) From these two functions it is easy to define, AbsoluteValue,
> CartesianForm and ComplexConjugate to supplement the limitations of the
> built-in functions Abs and Conjugate. For example,
>
> CartesianForm[z_] := RealPart[z]+I*ImaginaryPart[z]
There is an in-house suggestion that we implement CartesianForm and
PolarForm functions. They would return ordered pairs of the form
{re,im} (resp. {abs,arg}).
> These functions have some amusing features. Here is one trivial
> example. When ComplexExpand is applied to (1+2I)*Exp[I*x] we get the
> mildly unsatisfactory
>
> (1+2I)*Cos[x]-(2-I)*Sin[x]
>
> (I have been unable to use any form of Collect or Expand to separate the
> real and imaginary parts.) However,
>
> CartesianForm[(1+2I)*Exp[I*x]] -> Cos[x]-2Sin[x]+I(2Cos[x]+Sin[x])
>
> does the job nicely.
Yes.
I should note that ComplexExpand doing otherwise was probably a small
bug. It works better in our development version.
In[13]:= ComplexExpand[(1+2I)*Exp[I*x]] Out[13]= (1 + I) Cos[x] - (2 -
I) Sin[x]
> I have tested these functions fairly extensively and found they work
> without untoward surprises. But in doing so I have run into a minor
> "weaknesses" of ComplexExpand that I would like to see Wolfram
> incorporate into some later version. In particulular, ComplexExpand
> does not simplify Abs[x+I*y] nor does it simplify
> Cos[Arg[Cos[x]+I*Sin[x]]]. I would like to see this:
>
> ComplexExpand[Abs[x+I*y]] -> Sqrt[x^2+y^2]
>
This was a judgement call. We opted to allow Abs, etc. be used in
results except when explicitly excluded by not appearing in a
TargetFunctions list. So returning Abs[x+I*y] is okay since the job of
ComplexExpand is to separate into real and imaginary parts and Abs[...]
is indeed explicitly real.
In[9]:= ComplexExpand[Abs[x+I*y], TargetFunctions->{Re,Im}]
2 2
Out[9]= Sqrt[x + y ]
> and
>
> ComplexExpand[Cos[Arg[Cos[x]+I*Sin[x]]]] -> x
This one is more difficult.
In[7]:= ComplexExpand[Cos[Arg[Cos[x]+I*Sin[x]]],
TargetFunctions->{Re,Im}]
Out[7]= Cos[ArcTan[Cos[x], Sin[x]]]
Possibly Simplify or FullSimplify should be made to convert this to x.
> as well as similar identities using Sin or Tan in place of the first Cos
> in the latter formula.
>
> I have incorporated these and similar rules into my use of RealPart
> etc. and founda substantial simplification is possible. Consider,
>
> ComplexExpand[(Cos[x]+I*Sin[x])^(1/3)]
>
> with and without these simmplification rules!
>
> Oh yes. After using DSolve as above, try out
>
> RealPart[u[t]/."output of DSolve"]
>
> I hope this is useful to someone. If anyone out there has done some
> thinking about these issues and would like to share them with me and
> the group, I would be delighted. I am most interested in corrections
> and improvements!
>
> Jack Goldberg
Daniel Lichtblau
Wolfram Research
- Follow-Ups:
- Re: Re: ComplexExpand
- From: Daniel Lichtblau <danl@wolfram.com>
- Re: Re: ComplexExpand
- References:
- ComplexExpand
- From: Jack Goldberg <jackgold@math.lsa.umich.edu>
- ComplexExpand