0

In this marketing literature, the Wolfram Research alleges that

Mathematica automates root finding behind the higher-level functions Reduce and NSolve, removing the need for low-level operations like Maple’s Isolate.

However, in certain cases, it is sufficient to find (disjoint) isolating intervals for ALL real roots of a polynomial system. In other words, there is no need for exact solutions given by the advanced command Solve or Reduce. For a univariate polynomial with arbitrary real coefficients, the RootIntervals is of course useful, and in accordance with the above official claim, there appears to be a built-in function that performs analogous functionality on multivariate polynomial systems with finitely many real solutions, but I still cannot find out such an internal function in Mathematica as yet.
One may believe that NSolveValues should be enough here. Unfortunately, this is not always guaranteed, since the returned roots can be incomplete (even of a real polynomial system) without any warning messages. (Accordingly, the answer to this old question is simply "no", while space does not permit the citation of such examples.) Note that although a complete list of symbolic solutions may be found, the elapsed time would be much long (in contrast to solving numerically), which is more or less unacceptable. So, how do I obtain all rational isolating intervals (or boxes) for the multivariate case over the reals in Mma efficiently?

Edit. Here are some instances.
The first polynomial system is from $eq. (14)$ with $l=3$ (alternatively, with $l=2$) of Generalized Virasoro constructions for SU(3) (page 589):

eqs1 = {-Subscript[x,1]+4*l*Subscript[x,1]^2+8*Subscript[x,1]*(Subscript[x,2]+Subscript[x,3])-8*Subscript[x,2]*Subscript[x,3]+2*Subscript[x,1]*(Subscript[x,4]+Subscript[x,5]+Subscript[x,6]+Subscript[x,7])-2*Subscript[x,4]*Subscript[x,7]-2*Subscript[x,5]*Subscript[x,6],
-Subscript[x,2]+4*l*Subscript[x,2]^2+8*Subscript[x,2]*(Subscript[x,1]+Subscript[x,3])-8*Subscript[x,1]*Subscript[x,3]+2*Subscript[x,2]*(Subscript[x,4]+Subscript[x,5]+Subscript[x,6]+Subscript[x,7])-2*Subscript[x,4]*Subscript[x,6]-2*Subscript[x,5]*Subscript[x,7],
-Subscript[x,3]+4*l*Subscript[x,3]^2+8*Subscript[x,3]*(Subscript[x,1]+Subscript[x,2])-8*Subscript[x,1]*Subscript[x,2]+2*Subscript[x,3]*(Subscript[x,4]+Subscript[x,5]+Subscript[x,6]+Subscript[x,7])-2*Subscript[x,4]*Subscript[x,5]-2*Subscript[x,6]*Subscript[x,7],
-Subscript[x,4]+4*l*Subscript[x,4]^2+2*Subscript[x,1]*(Subscript[x,4]-Subscript[x,7])+2*Subscript[x,2]*(Subscript[x,4]-Subscript[x,6])+2*(Subscript[x,3]+3*Subscript[x,8])*(Subscript[x,4]-Subscript[x,5])+2*Subscript[x,4]*(4*Subscript[x,5]+Subscript[x,6]+Subscript[x,7]),
-Subscript[x,5]+4*l*Subscript[x,5]^2+2*Subscript[x,1]*(Subscript[x,5]-Subscript[x,6])+2*Subscript[x,2]*(Subscript[x,5]-Subscript[x,7])-2*(Subscript[x,3]+3*Subscript[x,8])*(Subscript[x,4]-Subscript[x,5])+2*Subscript[x,5]*(4*Subscript[x,4]+Subscript[x,6]+Subscript[x,7]),
-Subscript[x,6]+4*l*Subscript[x,6]^2-2*Subscript[x,1]*(Subscript[x,5]-Subscript[x,6])-2*Subscript[x,2]*(Subscript[x,4]-Subscript[x,6])+2*(Subscript[x,3]+3*Subscript[x,8])*(Subscript[x,6]-Subscript[x,7])+2*Subscript[x,6]*(Subscript[x,4]+Subscript[x,5]+4*Subscript[x,7]),
-Subscript[x,7]+4*l*Subscript[x,7]^2-2*Subscript[x,1]*(Subscript[x,4]-Subscript[x,7])-2*Subscript[x,2]*(Subscript[x,5]-Subscript[x,7])-2*(Subscript[x,3]+3*Subscript[x,8])*(Subscript[x,6]-Subscript[x,7])+2*Subscript[x,7]*(Subscript[x,4]+Subscript[x,5]+4*Subscript[x,6]),
-Subscript[x,8]+4*l*Subscript[x,8]^2+6*(Subscript[x,4]+Subscript[x,5]+Subscript[x,6]+Subscript[x,7])*Subscript[x,8]-6*Subscript[x,4]*Subscript[x,5]-6*Subscript[x,6]*Subscript[x,7],
(Subscript[x,3]+Subscript[x,8])*(Subscript[x,4]+Subscript[x,5]-Subscript[x,6]-Subscript[x,7])-2*Subscript[x,4]*Subscript[x,5]+2*Subscript[x,6]*Subscript[x,7]}/. l->3;

The second polynomial system is from $Example : CAPRASSE, DEMARET$ of Symbolic solution polynomial equation systems with symmetry (page 8):

eqs2=Array[3*Subscript[x,#]^3-Subscript[x,#]*(3*Subscript[x,#]*Indexed[a,1]+3*Indexed[a,1]+3*Indexed[a,2]-6)+Indexed[a,2]-Indexed[a,3]&,5]/.a:>Array[PowerSymmetricPolynomial[#,Array[Subscript[x,#]&,5]]&,3];(*$Assumptions:=Array[Subscript[x,#]&,8]\[Element]Reals*)

As for the isolation, these two instances ought to, ideally, take about sixteen seconds ….

user688486
  • 485
  • 1
  • 7
  • 1
    Please provide a concrete example of what you are trying to solve. – Bob Hanlon May 17 '23 at 19:18
  • I don't see a viable question here. If I follow correctly, the claim is there might be no function that, given a polynomial system with finitely many roots, finds all the real ones. Such a claim would be incorrect though, since Solve and SolveValues perform this task, when instructed to use Reals as the solving domain. – Daniel Lichtblau May 17 '23 at 20:11
  • @DanielLichtblau I think that you may miss some words in my question. As I have said, the elapsed time (to Solve some polynomial system) would be much long, and actually, exact solutions are unnecessary here, for what I need is just all "isolating intervals". (@BobHanlon I shall add two "difficult" examples later. ) – user688486 May 18 '23 at 04:53
  • Okay, I think I follow now. Your hope is to get a function or simple method to find isolating intervals for real-valued solutions to a multivariate system. In particular you would like this to be (notably) faster than using Solve directly. Offhand I do not know of a way to do that. One can get a univariate polynomail e.g. using GroebnerBasis, and isolate real roots from that. For that second example this takes me around 5 seconds. But back-propagating to get all real roots of the full system isolated is something I do not know how to do, at least not efficiently. – Daniel Lichtblau May 18 '23 at 16:58

1 Answers1

1

There is one problem only, I see, in the second example: Subscripts.

      qs2 = qs1 /. {Subscript[a_, b_] :> 
              ToExpression[ToString[a] <> ToString[b]]};
  vars=Union@Flatten@Cases[qs2,_Symbol,Infinity]

     {x1, x2, x3, x4, x5, x6, x7, x8}

Anotherway to get primitive symbols is Unique[x]

Now we build a Groebner basis

      Timing[bs=GroebnerBasis[qs2, vars];]
       {3.14063,Null}
 Timing[sols=Solve[  (0==#&amp;)/@bs,vars]; ]
   {3.29688,Null}

and find 2 real solutions

     relsol = Cases[strt,  
                _?(Simplify@And[(vars == Conjugate[vars]) /. #]
  qs2 /. relsol

  {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}}

   {{x1-&gt;1/24,x2-&gt;1/24,x3-&gt;-(1/24),x4-&gt;1/24,x5-&gt;1/24,x6-&gt;1/24,
      x7-&gt;1/24,x8-&gt;-(1/24)},
      {x1-&gt;-(1/120),x2-&gt;-(1/120),x3-&gt;-(1/120),x4-&gt;1/24,
         x5-&gt;1/24,x6-&gt;1/24,x7-&gt;1/24,x8-&gt;-(1/24)}}

In the case of inexact coefficients either Rationalize and generate integer coefficient polynomials. Or the more general way, that is insensitive wrt. coding sloppyness, replace all numeric equality checks by tests of smallness of the abolute differences.

Roland F
  • 3,534
  • 1
  • 2
  • 10
  • I'm not sure if I understand right. It seems that you mean there're only two real solutions to the first polynomial system (i.e., eqs1)? – user688486 May 18 '23 at 11:34
  • I did not undertake to check the rest of the 110 solutions. I only have stated, that 6 seconds are enough in Mathematica for root determination. By first glance, the polynomial has integer coefficients. You may further tally the complex conjugates in pairs or higher entities of irreducible divisons of the unit circle. – Roland F May 18 '23 at 11:44
  • But what I need is all isolating intervals instead of only a part of them. Certainly, the Solve command can find them "in a single line of input", nevertheless, this spends nearly one minute, while Maple complete this task in four or five seconds. Isn't there a faster way to do so in one go (rather than just wait for a future release)? – user688486 May 18 '23 at 12:15
  • I bet that the rest is complex. I don't know how to"isolate" roots in 8-dimensional spaces other than by random walks or by surface integrals over the 7-dimensional side cubes. – Roland F May 18 '23 at 13:21