Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

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: [mg76555] Re: [mg76432] Re: [mg76393] Weird result in Mathematica 6
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Thu, 24 May 2007 05:53:22 -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>

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:
>>>>
>>>> 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



  • Prev by Date: Re: Re: Re: Re: Re: 6.0 not seeing style
  • Next by Date: Re: Style Sheed Documentation
  • Previous by thread: Re: Re: Weird result in Mathematica 6
  • Next by thread: Re: Re: Weird result in Mathematica 6