Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I am trying to prove that a quintic polynomial, $p(x) = A5 x^5 + A4 x^4 + A3 x^3 + A2 x^2 + A1 x + A0$, which admits at most three real roots. Unfortunately Descartes' rule of signs does not help, since I have 5 sign changes.

The polynomial's coefficients (the $An$ in the above expression) depend on a number of parameters, and after assigning numerical values to the parameters, Mathematica factors the polynomial into the product of either

  • three monic linear polynomials and a quadratic polynomial with negative discriminant

  • one monic linear polynomial and two quadratic polynomials with negative discriminant

which confirms what I think.

Since Mathematica can factor the quintic when the coefficients are numerical, I wonder if that implies it can also factor the quintic when expressed symbolically. If this is the case, how can I ask Mathematica to do it?

share|improve this question
Maybe you'd like to have a look here: library.wolfram.com/examples/quintic –  Oleksandr R. Jun 19 '13 at 22:28
You mention Descartes' rule of signs, but not its big brother the Sturm sequence, also known as the Sturm chain or Sturm's theorem. I used this to find the region in parameter space admitting real solutions for a particular quadratic. I imagine a quintic with coefficients depending on parameters might be impractical... –  KennyColnago Jun 19 '13 at 22:29
Hi @KennyColnago, thanks for the advice. I understand that the Sturm's theorem is what is behind the Mathematica command CountRoots. I can run this for numerical versions of my polynomial, and the result is either one or three roots. However, I would like to be able to analyse the general (symbolic) version of my polynomial. I have tried to write down a code for this but with little success. Do you know whether such a program exists? –  Giovanni Jun 20 '13 at 5:37
@Oleksandr R. thanks for the link. –  Giovanni Jun 20 '13 at 5:39
@Giovanni Sorry, I know of no such code, until you write it. For the quadratic I worked on, it was messy but barely feasible to translate the sign changes required for real roots in the symbolic Sturm sequence to conditions on the symbolic coefficients. –  KennyColnago Jun 24 '13 at 2:32
add comment

1 Answer

The quintic

Once upon a time I tried to understand Galois work in order to understand what specific equations of a given degree admit an algebraic solution...

(Its ending was, that I started to think that the ingrain wallpaper of my study room was actually braille :) ... my desperate attempt of humour aside)

I can't solve your specific problem, but what I do know is, that it is often useful to have a grip on the location of the roots. For instance, we can check for what values the roots are complexx or real.

Since we need to explore polynomials of degree greater than four it is time for NSolve.

First of all, the polynomial:

mypoly[x_, lambda_] := 5 x^5 + 4 x^4 + 3 x^3 + 2 x^2 + x + lambda;

Than the solver:

PolySolve[poly_] := x /. NSolve[poly == 0, x]

So, let's do this for x and lambda = 3:

PolySolve[mypoly[x, 3]] ==>  {-1.,-0.392513-0.877308 I,-0.392513+0.877308 I,0.492513 -0.63794 I,0.492513 +0.63794 I}

Intimidating...Let's produce a plot:

ComplexPlot[x_List, range_List, size_] :=
    r = {Re[#], Im[#]} & /@ x;
    ListPlot[r, PlotStyle -> PointSize[size],
    AspectRatio -> 1, PlotRange -> {range, range},
    PlotRegion -> {{0.05, 0.95}, {0.05, 0.95}}]]

With this we can have a look at the root locus. Here I want to reuse a trick by William T. Shaw. Normally root locus plots are given by joining up the dots to give a smoot curve. This discards the velocity information. His trick to avoid this problem is that he is flattening the two-dimensional list into a one-dimensional of many complex numbers.

    PolySolve[mypoly[x, lambda]], {lambda, 0, 4, 0.2}]], {-2, 2}, 0.015]

enter image description here

Well. This is the point where I referential refer you, as @OleksandR already did, to Mr. Trott and Mr. Adamchik excellent work...(it is actually quite interesting that if one mathematics taught me, is humility...hardcore)

Please let me know if this helped somehow.



share|improve this answer
Hi @Stefan, thanks! I have to read your message more carefully, and understand how to use it for my problem. At first blush, my understanding is that your suggestion is to first work out where the roots of the quintic can fall. Now, since my initial post, I have made some progress, and I now have a sufficient condition for the existence of multiple roots, as well an idea of their position on $\mathbb{R}_{++}$ (that is, I can formally define the intervals where the quintic has a root. However, I still cannot tell whether there can be at most 3 roots). Is this equivalent to what you suggested? –  Giovanni Jun 24 '13 at 16:06
@Giovanni exactly. your progress is really interesting. please let me know about your further progress, if you want to. i was thinking about to extend the post for newton-raphson iteration, as another weapon to find the roots...but i've to confess that i'm not an expert on that field and the methods i'm using, despite that they are working, are not fool proof (meaning, not proofed by myself) and more an engineer's approach towards a mathematical analysis...hope this is not disappointing... –  Stefan Jun 24 '13 at 16:15
Hi Stefan: I read your suggestion more carefully now and it's a very interesting technique to study this type of problems. Thanks again for this. There is one thing that I am not sure I understand: once I have an idea of the root locus, is there a way to use it to factorize the original quintic? –  Giovanni Jun 24 '13 at 20:08
Hi Giovanni. Nice to hear (read) from you. The root locus approach is actually more common in system theories, but it is extremely useful to sweep any parameter for which the exact value is uncertain to determine its behavior. Once we can determine the behavior at the root points, we can use that determination to peek with more elaborate techniques to yield the root points. –  Stefan Jun 24 '13 at 20:32
OK. Let me be more specific: suppose I know the expression for one root for a specific parameter value $k = k_0$, say $\hat{x}(k_0)$. Is there a way I can use that knowledge to infer the expression for that root at different values of the parameter, that is obtain $\hat{x}(k_1)$ for all $k_1\neq k_0$? –  Giovanni Jun 24 '13 at 20:49
show 1 more comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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