# How to get exact roots of this polynomial?

The equation $$64x^7 -112x^5 -8x^4 +56x^3 +8x^2 -7x - 1 = 0$$ has seven solutions $x = 1$, $x = -\dfrac{1}{2}$ and $x = \cos \dfrac{2n\pi}{11}$, where $n$ runs from $1$ to $5$. With NSolve, I tried

NSolve[64 x^7 - 112 x^5 - 8 x^4 + 56 x^3 + 8 x^2 - 7 x - 1 == 0, x, Reals]


and I get

{{x -> -0.959493}, {x -> -0.654861}, {x -> -0.5}, {x -> -0.142315}, \
{x -> 0.415415}, {x -> 0.841254}, {x -> 1.}}


With Solve, I tried

{{x -> -(1/2)}, {x -> 1},
{x -> Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 1]},
{x -> Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 2]},
{x -> Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 3]},
{x -> Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 4]},
{x -> Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 5]}}


How to get exact solutions of the given equation?

• A first step forward is Solve[Factor[64 x^7 - 112 x^5 - 8 x^4 + 56 x^3 + 8 x^2 - 7 x - 1] == 0, x]. Jan 4 '13 at 16:36
• @b.gates And the next two steps are to let $x\to z/2$ to clear out powers of $2$ and then to take the big factor, $p(z)=1+3 z-3 z^2-4 z^3+z^4+z^5$ and symmetrize it via $p(z+1/z)z^5$: the primitive eleventh roots of unity pop right out. Jan 4 '13 at 18:25
• @minthao: Those roots are exact. What you seem to mean, then, is that you wish to identify some of the roots with some of the roots of another (unspecified) polynomial (which is how those cosines are defined). Jan 4 '13 at 18:32
• @whuber Brilliant ! Jan 4 '13 at 18:58
• @whuber Why don't you switch your comment to another answer ? Jan 6 '13 at 17:54

Since we ask if the numbers $\;x_n = \cos(\frac{2n\pi}{11})\;$ are the actual roots of the polynomial :

p[x_] := 64 x^7 - 112 x^5 - 8 x^4 + 56 x^3 + 8 x^2 - 7 x - 1


any numerical approach cannot be sufficient and in order to prove the statement we should proceed with a symbolic approach. Nevertheless NSolve may guarantee that all the roots could be represented in terms of values of trigonometrical functions like Sin or Cos for real arguments since we have :

And @@ ( -1 <= x <= 1 /. NSolve[ p[x] == 0, x] )

True


The five of the roots are represented in terms of the Root objects, and only two of them have been rewritten by built-in rewrite rules as rational numbers :

r = List @@ Roots[64 x^7 - 112 x^5 - 8 x^4 + 56 x^3 + 8 x^2 - 7 x - 1 == 0, x][[All, 2]];
r[[5 ;;]]

{ Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 5], -(1/2), 1}


Now we can experss r[[;;5]] in terms of Cos (it is possible as we have shown above), we can do it this way :

ArcCos @ r[[;; 5]] // FullSimplify

{ 10π/11, 8π/11, 6 π/11, 4π/11, 2π/11}


We might also use ArcSin as well. Lets verify if they are equal :

Table[ Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, k] - Cos[2(6 - k)π/11],
{k, 5}] // RootReduce

{0, 0, 0, 0, 0}


Well, indeed these are the roots of the polynomial $p(x)$. One observes that FullSimplify cannot reduce the above Table with the standard built-in rewrite rules unless one uses e.g. Table[ Root[...] - Cos[...], {k,5}]// FullSimplify[#, TransformationFunctions -> RootReduce]&.

Another way which might be helpful in more involved cases would be e.g. mapping PossibleZeroQ, however we have to remember that PossibleZeroQ provides a quick but not always accurate test.

## Edit

Since all the roots can be represented as Sin or Cos for real arguments, it would be a good idea to explain what is so specific behind the polynomial p[x]. We can reach a general view working with a transformation pointed out by whuber in the comments.

g[z_] := (p[x] /. x -> (z + 1/z)/2) 2 z^Exponent[p[x], x]
g[z] // Factor

(-1 + z)^2 (1 + z + z^2) (1 + z + z^2 + z^3 + z^4 + z^5 + z^6 + z^7 + z^8 + z^9 + z^10)


All the roots of g[z] are roots of unity :

And @@ RootOfUnityQ[ List @@ Roots[ g[z] == 0, z][[All, 2]] ]

True


moreover all the polynomial factors of g[z] are cyclotomic polynomials, respectively $C^{2}_{1}(z)$, $C_{3}(z)$ and $C_{11}(z)$ (see Cyclotomic), so we have :

Times @@ (Cyclotomic[#, z] & /@ {1, 1, 3, 11}) == g[z] // Factor

True


Following in reverse direction we would generate more polynomials with the roots expressible in terms of $\sin$ or $\cos$ functions on rational multiples of $\pi$.

• +1 Example of another way: the output of MinimalPolynomial[ Root[1 + 6 #1 - 12 #1^2 - 32 #1^3 + 16 #1^4 + 32 #1^5 &, 1] - Cos[10 \[Pi]/11]] is #1 &. Jan 7 '13 at 1:01
Element[Cos[Pi/11], Algebraics]
(*True*)

ExpToTrig /@ Factor[-1 - 7 x + 8 x^2 + 56 x^3 - 8 x^4 - 112 x^5 + 64 x^7, Extension -> Cos[Pi/11]]
(*Or ComplexExpand*)

(*(-1+x) (1+2 x) (-2 x-2 Cos[π/11]) (2 x-2 Cos[(2 π)/11]) (2 x-2 Sin[(3 π)/22]) (-2 x-2 Sin[(5 π)/22]) (1+2 x-2 Cos[π/11]+2 Cos[(2 π)/11]+2 Sin[(3 π)/22]-2 Sin[(5 π)/22])*)

x /. Solve[% == 0, x]

(*{-(1/2), 1, -Cos[π/11], Cos[(2 π)/11], Sin[(3 π)/22], -Sin[(5 π)/22],
1/2 (-1 + 2 Cos[π/11] - 2 Cos[(2 π)/11] - 2 Sin[(3 π)/22] + 2 Sin[(5 π)/22])}*)


Okay, sometimes you get so involved in an idea that you don't realize how foolish it is. I was fooled or seduced by the simplicity of the Chebyshev expansion. Basically, my original answer was a complicated way to do this:

cosEq = 64 x^7 - 112 x^5 - 8 x^4 + 56 x^3 + 8 x^2 - 7 x - 1 /. x -> Cos[Pi t] //TrigToExp;
t /. Solve[cosEq == 0 && 0 <= t <= 1, t]
(*  {0, 0, 2/11, 4/11, 6/11, 2/3, 8/11, 10/11}  *)


The fundamental, simple idea is that if you think the solutions can be expressed in terms of cosine, then replacing the variable by cosine is a natural thing to try. If the angles are rational multiples of Pi, then x -> Cos[Pi t] will probably be a convenient substitution for determining which multiples.

Note that some cosines are automatically converted to sines by Mathematica.

Cos[Pi %]
(*  {1, 1, Cos[(2 π)/11], Sin[(3 π)/22], -Sin[π/22], -(1/2), -Sin[(5 π)/22], -Cos[π/11]}  *)


The simple root x == 1 (or t == 0) appears twice because Cos[Pi t] == 1 has a double root.

If one would like to have unique solutions in terms of cosines for output-formatting purposes, then one could do something like

HoldForm[Cos[t Pi]] /. DeleteDuplicates@ Solve[TrigToExp[cosEq] == 0 && 0 <= t <= 1];
% /. HoldForm[x_?NumberQ] :> HoldForm[Evaluate@ x] Basically I converted the OP's polynomial to

-ChebyshevT[4, x] + ChebyshevT[7, x]


which can be replaced by

-Cos[4 Pi t] + Cos[7 Pi t]


whose roots are easy to find by hand. To use Mathematica to get the solutions, I had to use TrigToExp, as I did above. See edit history for full discussion.

This is too big for a comment, so I am writing it here. I am not sure if there is a trick to make Solve return the exact solution $x =\cos\dfrac{2 n\pi} {11}$. But for sure, whether Solve or NSolve, these functions tend to give pretty accurate solutions for such straightforward polynomials.

Proof of practical exactness

Solve the equation and through the two rational roots $\{1,-0.5\}$

res = Select[(Solve[64 x^7 - 112 x^5 - 8 x^4 + 56 x^3 + 8 x^2 - 7 x - 1 == 0, x,
WorkingPrecision -> 200] // N)[[All, 1,2]],
(# != -0.5 && # != 1.) &] // Sort;


The expected real roots

pred = N[Cos[2 # Pi/11], 200] & /@ Range // Sort;


Now difference between expected and obtained results

res - pred


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

algebraic demonstration of the forward problem:

Simplify[Collect[
ExpandAll[64 (x + 1/2) Product[ x - Cos[2 n π/11], {n, 0, 5} ]] , {x}  ,
(  TrigReduce[#] /.
Sin[(5π)/22] ->
1/2 - (Cos[π/11] - Cos[(2π)/11] +
Sin[π/22] - Sin[(3π)/22]) ) &]]
`

$-1 - 7 x + 8 x^2 + 56 x^3 - 8 x^4 - 112 x^5 + 64 x^7$

Not quite a proof as I haven't proved that identity I manualy applied.