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
- References:
- Weird result in Mathematica 6
- From: Sebastian Meznaric <meznaric@gmail.com>
- Re: Weird result in Mathematica 6
- From: Adam Strzebonski <adams@wolfram.com>
- Weird result in Mathematica 6