Group Abstract Group Abstract

Message Boards Message Boards

Simplification of expression with complex variables

GROUPS:
Hello!  I'm  using  Mathematica  9.0.0.0  and I stuck with very simple
examples. Thera are well known rules for complex conjugation 
x  x*= |x|^2 and x + x*=2 Re(x)

Problem 1.

It is fine to try
In[1]:= FullSimplify[x Conjugate[x]]

Out[1]= Abs[x]^2

However it doesn't work with

In[2]:= FullSimplify[x y Conjugate[x y]]

Out[2]= x y Conjugate[x] Conjugate[y] 
I'd like it should be 
Abs[x]^2 Abs[y]^2

Problem 2.

It is fine to try
In[8]:= FullSimplify[x + Conjugate[x]]

Out[8]= 2 Re[x]
or
In[9]:= FullSimplify[x y + Conjugate[x y]]

Out[9]= 2 Re[x y]

However it doesn't work with
In[10]:= FullSimplify[x y + Conjugate[x] Conjugate[y]]

Out[10]= x y + Conjugate[x]Conjugate[y]
I want it should be 
2 Re[x y]

Please, help me.
POSTED BY: rodion.stepanov
Answer
11 months ago
Updated 9/1/13 to answer follow up.

Added additional rules, so that no need to use FullSimplify (sometimes using FullSimplify will reverse the effect of your own rule). Here are 5 rules that covers the cases you have and the new one you added.  (if more cases are not covered, new rules can be added)

You can also also apply all the rules at once, so that you do not have to determine beforehand which one to use for different expression. Mathematia internal pattern matching will pick the rule needed to apply.

 ClearAll[x, y, z, g, foo];
 p1 = Times[Conjugate[x_] Conjugate[y_]] :> Conjugate[x y];
 p2 = Times[x_ Conjugate[x_]] :> Abs[x]^2;
 p3 = Abs[x_ y_]^n_. :> Abs[x]^n Abs[y]^n;
 p4 = Plus[x_ Conjugate[y_] , y_ Conjugate[x_] ] :> 2 (Re[x] Re[y] +  Im[x] Im[y]);
 p5 = Plus[x_ , Conjugate[x_] ] :> 2 Re[x];
 allRules = {p1, p2, p3, p4, p5};
 
 expr = {
   {foo = x Conjugate[y] + y Conjugate[x]; foo, foo //. allRules},
   {foo = x Conjugate[y] + y Conjugate[x] + z Conjugate[g] + g Conjugate[z]; foo, foo //. allRules},
   {foo = x Conjugate[x]; foo, foo //. allRules},
   {foo = x y Conjugate[x y]; foo, foo //. allRules},
   {foo = x y z Conjugate[x y z]; foo, foo //. allRules},
   {foo = x + Conjugate[x]; foo, foo //. allRules},
   {foo = x y + Conjugate[x y], foo; foo //. allRules},
   {foo = x y z + Conjugate[x y z]; foo, foo //. allRules},
   {foo = x y + Conjugate[x] Conjugate[y]; foo, foo //. allRules},
   {foo = x y z g + Conjugate[x] Conjugate[y]  Conjugate[z]  Conjugate[g]; foo, foo //. allRules}
   };
Grid[expr, Frame -> All, Spacings -> {.5, 1}, Alignment -> Left]
This gives
POSTED BY: Nasser
Answer
11 months ago
Thank you, Nasser. It is rather good solution but it doesn't work with
x Conjugate[y] + Conjugate[x] y
I didn't manage to solve in the same manner. Another idea? 
POSTED BY: rodion.stepanov
Answer
11 months ago
Nesser, it works excellent now! Thanks a lot! Ideed FullSimplify should be not used.
POSTED BY: rodion.stepanov
Answer
11 months ago