MathGroup Archive 2002

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

Search the Archive

Re: InequalitySolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37929] Re: [mg37767] InequalitySolve
  • From: Adam Strzebonski <adams at wolfram.com>
  • Date: Tue, 19 Nov 2002 20:59:24 -0500 (EST)
  • References: <31F1A06E-F629-11D6-A38C-00039311C1CC@tuins.ac.jp>
  • Sender: owner-wri-mathgroup at wolfram.com

For univariate systems InequalitySolve uses Solve rather
than CylindricalAlgebraicDecomposition. The problem in
this example is that Solve gives a real solution in a form
in which it is not recognized as real by inequalities.

In[1]:= e = (-1)^(2/3)(1/2-Sqrt[5]/2)^(1/3);

In[2]:= Im[e]

Out[2]= 0

In[3]:= e > 0

                                            2/3  1   Sqrt[5] 1/3
Greater::nord: Invalid comparison with (-1)    (- - -------)    attempted.
                                                 2      2

             2/3  1   Sqrt[5] 1/3
Out[3]= (-1)    (- - -------)    > 0
                  2      2

One can fix this problem by loading a file InequalitySolveFix.m
containing the following code. (It redefines Solve when called
from inside InequalitySolve code.)

(* ------- Begin InequalitySolveFix.m ------- *)

Unprotect[Algebra`InequalitySolve`InequalitySolve];
Clear[Algebra`InequalitySolve`InequalitySolve];

InequalitySolve`BugFlag=False;

Algebra`InequalitySolve`InequalitySolve[ineqs_, vars_] /;
    Not[InequalitySolve`BugFlag] :=
    Block[{InequalitySolve`BugFlag=True},
       Algebra`InequalitySolve`InequalitySolve[ineqs, vars]]

Unprotect[{Solve}];

Solve[a__]/;InequalitySolve`BugFlag :=
    Block[{InequalitySolve`BugFlag=False},
       RootReduce[Solve[a]]]

Protect[{Solve}];

<<Algebra`InequalitySolve`;

(* ------- End InequalitySolveFix.m ------- *)

In[1]:= <<InequalitySolveFix.m

In[2]:= N[InequalitySolve[x^6 - x^3 - 1 == 0 && 0 < x < 2, x] ]

Out[2]= x == 1.17398


Best Regards,

Adam Strzebonski
Wolfram Research


Andrzej Kozlowski wrote:
> This seems to be a bug in InequalitySolve. However, there is no bug in 
> CylindricalAlgebraicDecomposition  (which is what InequalitySolve is 
> using):
> 
> In[1]:=
> << "Experimental`"
> 
> In[2]:=
> CylindricalAlgebraicDecomposition[x^6 - x^3 - 1 == 0 &&
>    0 < x < 2, x]
> 
> Out[2]=
> x == Root[-1 - #1^3 + #1^6 & , 2]
> 
> In[3]:=
> N[%]
> 
> Out[3]=
> x == 1.1739849967053284
> 
> Andrzej Kozlowski
> Yokohama, Japan
> http://www.mimuw.edu.pl/~akoz/
> http://platon.c.u-tokyo.ac.jp/andrzej/
> 
> 
> On Tuesday, November 12, 2002, at 05:13 PM, PSi wrote:
> 
>> In[1]:= << Algebra`InequalitySolve`
>>
>> Example 1.
>>
>> In[2]:= N[InequalitySolve[x^5 - x^3 - 1 == 0 && 0 < x < 2, x] ]
>> Out[2]:= x == 1.23651
>>
>> Example 2.
>>
>> In[3]:= NSolve[x^6 - x^3 - 1 == 0, x]
>> Out[3]:= {{x -> -0.8518}, {x -> -0.586992 - 1.0167 I},
>>              {x -> -0.586992 + 1.0167 I },  {x ->  0.4259 - 0.73768 I},
>>              {x ->   0.4259 + 0.73768 I}, {x -> 1.17398}}
>>
>> In[4]:= N[InequalitySolve[x^6 - x^3 - 1 == 0 && 0 < x < 2, x] ]
>>
>> Of course the answer should be x == 1.17398 as in the first example. 
>> Instead of
>> this, Mathematica 4.1 for Windows gives the following:
>>
>> Greater::"nord" : "Invalid comparison with 
>> (-1)^(2/3)(1/2-Sqrt[5]/2)^(1/3)
>> attempted.
>> Less::"nord" : "Invalid comparison with 
>> -2+(-1)^(2/3)(1/2-Sqrt[5]/2)^(1/3)
>> attempted.
>> Out[4]:= x>0.&&x<2.&&x==-0.8518+3.88578*10^-16 I ||  x == 1.17398
>>
>> Could anybody explain this?
>> Thanks
>> PSi
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
> 





  • Prev by Date: Re: Two starting programming questions re alternating groups and EulerPhi LCM numbers
  • Next by Date: Re: Two starting programming questions re alternating groups and EulerPhi LCM numbers
  • Previous by thread: Re: InequalitySolve
  • Next by thread: Re: Multiline Text[ ] in figures: How to change alignmenty (justification)?