MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Weird result in Mathematica 6

  • To: mathgroup at smc.vnet.net
  • Subject: [mg76557] Re: [mg76432] Re: [mg76393] Weird result in Mathematica 6
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Thu, 24 May 2007 05:54:23 -0400 (EDT)
  • References: <200705211001.GAA10071@smc.vnet.net> <EB6D3224-597F-4DD6-B05D-08B9F6A05D2D@mimuw.edu.pl> <200705220648.CAA19836@smc.vnet.net> <63B2BBD7-455D-42F6-AFB2-63F7D37D62D3@mimuw.edu.pl> <465461D4.5000109@wolfram.com> <1FA17BCB-CFF6-4C96-BC81-F5C84629F61C@mimuw.edu.pl>

On 24 May 2007, at 05:18, Andrzej Kozlowski wrote:

>
> On 24 May 2007, at 00:46, Adam Strzebonski wrote:
>
>> Andrzej Kozlowski wrote:
>>> On 22 May 2007, at 15:48, Adam Strzebonski wrote:
>>>> Andrzej Kozlowski wrote:
>>>>> *This message was transferred with a trial version of  
>>>>> CommuniGate(tm) Pro*
>>>>>
>>>>> On 21 May 2007, at 19:01, Sebastian Meznaric wrote:
>>>>>
>>>>>> I was playing around with Mathematica 6 a bit and ran this  
>>>>>> command to
>>>>>> solve for the inverse of the Moebius transformation
>>>>>>
>>>>>> FullSimplify[
>>>>>>  Reduce[(z - a)/(1 - a\[Conjugate] z) == w && a a\[Conjugate]  
>>>>>> < 1 &&
>>>>>>    w w\[Conjugate] < 1, z]]
>>>>>>
>>>>>> This is what I got as a result:
>>>>>> -1 < w < 1 && -1 < a < 1 && z == (a + w)/(1 + w Conjugate[a])
>>>>>>
>>>>>> Why is Mathematica assuming a and w are real? The Moebius
>>>>>> transformation is invertible in the unit disc regardless of  
>>>>>> whether a
>>>>>> and w are real or not. Any thoughts?
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> Reduce and FullSimplify will usually deduce form the presence of
>>>>> inequalities in an expression like the above that the variables
>>>>> involved in the inequalites are real. In your case it "sees"
>>>>> a*Conjugate[a]<1 and "deduces" that you wanted a to be real.  
>>>>> This was
>>>>> of coruse not your intention but you can get the correct  
>>>>> behaviour by
>>>>> using:
>>>>>
>>>>>  FullSimplify[
>>>>>  Reduce[(z - a)/(1 - Conjugate[a]*z) == w && Abs[a]^2 < 1 && Abs 
>>>>> [w] ^2 <
>>>>> 1, z]]
>>>>>
>>>>>
>>>>>  -1 < Re[w] < 1 && -Sqrt[1 - Re[w]^2] < Im[w] < Sqrt[1 - Re[w] 
>>>>> ^2] &&  -1 <
>>>>>   Re[a] < 1 &&
>>>>>    -Sqrt[1 - Re[a]^2] < Im[a] < Sqrt[1 - Re[a]^2] &&
>>>>>  z == (a + w)/(w*Conjugate[a] + 1)
>>>>>
>>>>> Mathematica knows that the fact that an inequality involves Abs 
>>>>> [a]  does
>>>>> not imply that a is real but it does not "know" the same thing   
>>>>> about
>>>>> a*Conjugate[a]. This is clearly dictated by considerations of
>>>>> performance than a straight forward bug.
>>>>> Andrzej Kozlowski
>>>>>
>>>>
>>>> By default, Reduce assumes that all algebraic level variables  
>>>> appearing
>>>> in inequalities are real. You can specify domain Complexes, to make
>>>> Reduce assume that all variables are complex and inequalities
>>>>
>>>> expr1 < expr2
>>>>
>>>> should be interpretted as
>>>>
>>>> Im[expr1]==0 && Im[expr2]==0 && Re[expr1]<Re[expr2]
>>>>
>>>> For more info look at
>>>>
>>>> http://reference.wolfram.com/mathematica/ref/Reduce.html
>>>> http://reference.wolfram.com/mathematica/tutorial/RealReduce.html
>>>> http://reference.wolfram.com/mathematica/tutorial/ 
>>>> ComplexPolynomialSystems.html
>>>>
>>>> In your example we get
>>>>
>>>> In[2]:= Reduce[(z - a)/(1 - a\[Conjugate] z) == w && a a\ 
>>>> [Conjugate] < 1 &&
>>>>     w w\[Conjugate] < 1, z, Complexes]
>>>>
>>>>                                            
>>>> 2                          2
>>>> Out[2]= -1 < Re[w] < 1 && -Sqrt[1 - Re[w] ] < Im[w] < Sqrt[1 - Re 
>>>> [w] ] &&
>>>>
>>>>                                        2                          2
>>>>>    -1 < Re[a] < 1 && -Sqrt[1 - Re[a] ] < Im[a] < Sqrt[1 - Re 
>>>>> [a] ] &&
>>>>
>>>>                  a + w
>>>>>    z == ------------------
>>>>            1 + w Conjugate[a]
>>>>
>>>>
>>>> Evaluate
>>>>
>>>> Reduce[x^2+y^2<=1, {x, y}, Complexes]
>>>>
>>>> to see why I think that assuming that variables appearing
>>>> in inequalities are real is a reasonable default behaviour.
>>>>
>>>> Best Regards,
>>>>
>>>> Adam Strzebonski
>>>> Wolfram Research
>>>>
>>> Still, it seems to me that there is a certain problem with this,  
>>> not very important but still, a "logical difficulty". It concerns  
>>> not Reduce, where you can specify the domain to be Reals or  
>>> Complexes etc, but Simplify, where you can't. So for example:
>>> Simplify[Re[x], x*Conjugate[x] > 1]
>>> x
>>> folowing the principle also used by reduce, Simplify assumed that  
>>> x is real. On the other hand:
>>> Simplify[Re[x], Abs[x] > 1]
>>>  Re(x)
>>> which also agrees with the principle, sicne Abs in non-algebraic.  
>>> But, unlike in the case of Reduce, there seems to be no way to  
>>> make Simplify treat the first assumption as taking place over the  
>>> Complexes as in the Reduce example:
>>>  Simplify[Re[x], x*Conjugate[x] > 1 && Elment[x, Complexes]]
>>> x
>>
>> Adding Element[x, Complexes] doesn't change anything, since
>>
>> Element[x, Reals] && Element[x, Complexes] <=> Element[x, Reals]
>>
>> The way to specify that variables used in an inequality are complex
>> is to use Im[expr]==0 && Re[expr]>0 instead of expr>0.
>>
>> In[1]:= Simplify[Re[x], Im[x*Conjugate[x]]==0 && Re[x*Conjugate[x]] 
>> >1]
>> Out[1]= Re[x]
>>
>> Best Regards,
>>
>> Adam Strzebonski
>> Wolfram Research
>>
>
>
> Yes, you are right, this works, although it is a little un- 
> intuitive, since, of course,
>
>  FullSimplify[Im[x*Conjugate[x]]]
>  0
>
> without any assumptions on x.
>
> Aslo, instead of
>
>> Simplify[Re[x] && ! Element[x, Reals], x*Conjugate[x] > 1]
>> False
>
>
> which is of course completely right, what  I really should have  
> pointed out was :
>
> Simplify[Re[x], x*Conjugate[x] > 1 && Not[Element[x, Reals]]]
>  x
>
> Andrzej
>

More along the same lines:

Simplify[Re[x], x*Conjugate[x] > 1 && Im[x] != 0]

Simplify::cas:Warning: Contradictory assumption(s) x*Conjugate[x] > 1  
&& Im[x] != 0 encountered.

x

The assumptions are, of course, not contradictory in "ordinary  
mathematics" so somone who did not know what is going here might find  
this a bit of a shock. Of course, all this can be justified on  
grounds of performance but it takes getting used to (as witnessed by  
the fact that in spite of many years of "knowing" about this, I am  
still getting confused by it).

In practice, it is clearly much simpler, to express conditions of  
this kind using Abs[x] insead of x*Conjugate[x].

With best regards

Andrzej


  • Prev by Date: Re: I Need to Have These Equations Solved!
  • Next by Date: Style sheet primer
  • Previous by thread: Re: Re: Weird result in Mathematica 6
  • Next by thread: Re: Re: Weird result in Mathematica 6