Re: Complex Oddity

*To*: mathgroup at smc.vnet.net*Subject*: [mg57471] Re: [mg57455] Complex Oddity*From*: Bob Hanlon <hanlonr at cox.net>*Date*: Sun, 29 May 2005 01:03:29 -0400 (EDT)*Reply-to*: hanlonr at cox.net*Sender*: owner-wri-mathgroup at wolfram.com

Whenever a replacement does not seem to work, look at the FullForm and you will usually see why it works the way that it does. (a+b*I)//FullForm Plus[a,Times[Complex[0,1],b]] To define a variable as real, use TagSet to define upvalues x /: Re[x]=x; x /: Im[x]=0; y /: Re[y]=y; y /: Im[y]=0; z=x+y*I; {Re[z],Im[z]} {x,y} or use Simplify with assumptions z=a+b*I; Simplify[{Re[z],Im[z]}, Element[{a,b}, Reals]] {a,b} Bob Hanlon > > From: "John Reed" <nospamjreed at alum.mit.edu> To: mathgroup at smc.vnet.net > Date: 2005/05/28 Sat AM 05:39:32 EDT > Subject: [mg57471] [mg57455] Complex Oddity > > I was trying to separate the real and imaginary parts of a complicated > expression, and ended up with something strange. Here is a short version of > what happened. > > Let z = x + I y, then realPart = z /. {Complex[a_,b_]->a} gives realPart = > x. Great! > > Now, try imagPart = z /. {Complex[a_,b_]->b} returns with imagPart = x + y. > Oops > > In my original expression, it was harder to see, but the same error was > occuring. What I tried first was using Re[z] and Im[z], but then I have to > work with Im[y] and Im[x]. It seems to me two things need to be done here. > First, be able to assign variables so that they always stay real or else > indicate an error is occuring if they turn out to be complex, and second do > something to avoid errors like the above. I have to say that I don't trust > Mathematica's answers as much as I did before this came up. Now I feel like > I better have a good idea of what the answer is before I trust Mathematica. > > John Reed > >