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

**References**:**Weird result in Mathematica 6***From:*Sebastian Meznaric <meznaric@gmail.com>

**Re: Weird result in Mathematica 6***From:*Adam Strzebonski <adams@wolfram.com>

**Re: I Need to Have These Equations Solved!**

**Style sheet primer**

**Re: Re: Weird result in Mathematica 6**

**Re: Re: Weird result in Mathematica 6**