I have equations depending on one or more parameters and I want to find and plot regions in the parameter space in which there is a specific number of solutions.

For definiteness let's consider a simple case

-3 + 3 mu2 - 6 q mu2 - 8 q^3 mu4 + 4 q^4 mu4 + q^2 (3 mu2+ 4 mu4) == 0

where I want to find and/or plot regions in the space (mu2,mu4) in which the equation has 0, 1,...,4 solutions with 0 < q < 1.

Note that I want to use the same method also for non-polynomial equations (and possibly systems of equations).

  • $\begingroup$ For the polynomial case, you might find Kharitonov's theorem useful: en.wikipedia.org/wiki/Kharitonov%27s_theorem $\endgroup$
    – bill s
    Commented May 7, 2013 at 10:06
  • 2
    $\begingroup$ You've seen CountRoots[]? $\endgroup$ Commented May 7, 2013 at 11:49
  • $\begingroup$ @bills Thanks, very interesting $\endgroup$
    – psmith
    Commented May 7, 2013 at 12:41
  • $\begingroup$ @Fabrizio You can of course define cr[mu2_, mu4_] := CountRoots[-3 + 3 mu2 - 6 q mu2 - 8 q^3 mu4 + 4 q^4 mu4 + q^2 (3 mu2 + 4 mu4), {q, 0, 1}], i.e. it counts the number of roots for q in the range [0, 1]. $\endgroup$
    – Artes
    Commented May 8, 2013 at 8:25
  • $\begingroup$ @Fabrizio If your equation is not an adequate example could you provide another one you want to deal with? Otherwise your question cannnot be answered in a more reliable way. $\endgroup$
    – Artes
    Commented Nov 9, 2013 at 19:45

2 Answers 2


CountRoots is an appropriate function. It may work also with more general functions than polynomials. Two or more-variable polynomials may have infinitely many roots in a compact region, e.g. this one: $\;p(x,y,z)=x^2+y^2+z^2-1 \quad$ has infinitely many roots (continuum) on the unit sphere. In such cases CountRoots cannot give an adequate answer since it may count only a finite number of roots (of univariate polynomials, but we can always restrict many-variable functions to one variable) in an adequate domain (it may be a rectangle in the complex plane).

For the problem at hand let's define:

cr[mu2_, mu4_] := CountRoots[-3 + 3 mu2 - 6 q mu2 - 8 q^3 mu4 + 4 q^4 mu4 + 
                              q^2 (3 mu2 + 4 mu4), q]

To get an idea where you should look for interesting regions Manipulate can serve reasonably :

Manipulate[ cr[mu2, mu4], {mu2, -100, 100}, {mu4, -100, 100}]

To visualize spatial dependence of the cr function we can make use of ListPlot3D having an array of its values :

ar = Array[{#1, #2, cr[#1, #2]} &, {200, 200}, {{-30, 30}, {-30, 30}}];
ListPlot3D[ Flatten[ar, 1], Mesh -> None,
            ColorFunction -> Function[{x, y, z}, Darker @ Hue[1/4 z]]]

enter image description here

Where we can see the jumps on the plot we might expect 1 and 3 roots of the polynomial.

For more complete discussion of the issue this question needs better examples and more precise formulation. One can proceed further with Reduce and Solve etc. Solving equation with Solve it might be more handy when there are finite number of solutions (because of the output in terms of replacement rules). On the other hand there might be many subtleties and one can proceed on the case by case basis (see e.g. How do I work with Root objects? where one can simply count roots e.g. with Length). For a bit more interesting example of a polynomial equation see this question : 3D Plot: Number of Roots in x of a polynomial in x, a, b and c.

  • $\begingroup$ The boundary of those regions is where the discriminant wrt q vanishes 9which gives another approach to finding regions for different real-root counts. $\endgroup$ Commented May 7, 2013 at 20:20

Following the comment of J.M., it's possible to use CountRoots[], for the case in the question one possible solution is

myF[Q_, mu2_, mu4_] := -3 + 3 mu2 q^2 + 4 mu4 q^4 - 6 mu2 q Q - 8 mu4 q^3 Q + 3 mu2 Q^2 + 4 mu4 q^2 Q^2

myCR[Q_, mu2_, mu4_] := CountRoots[myF[Q, mu2, mu4], {q, 0, Q}]

ContourPlot[myCR[myQ, mu2, mu4], {mu4, 0, 15}, {mu2, 0, 2}, 
ImageSize -> 300, PlotPoints -> 100, MaxRecursion -> 3, 
ContourLabels -> Automatic, ContourStyle -> None, 
Contours -> {0, 1, 2, 3, 4}, ColorFunction -> "Rainbow"]


enter image description here

Although the question is still open for the case of non-polynomial equations.

  • $\begingroup$ If you provided certain non-polynomial equations, then it would be possible to answer in a constructive way or justify why that wouldn't be accessible. I mean that basically one can discuss the issue with a problem at hand not in general. $\endgroup$
    – Artes
    Commented May 10, 2013 at 23:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.