# What are Root objects with multiple polynomials?

In Mathematica 9 a new flavor of Root object with multiple polynomials was introduced. For example,

Root[{327680000000000000 - 1280000000 #1^8 + #1^16 &, #1 + 25 #2 + 25 #2^5 &}, {7, 3}]


I've read the documentation several times, but still do not have a clear understanding of what these expressions mean, or what advantage they have over the older syntax with a single polynomial. Any advice or explanation are welcome.

-

Let's read what the docs say:

Root[{$f_1, f_2 ,\ldots$}, {$k_1, k_2 ,\ldots$}] represents the last coordinate of the exact vector {$a_1, a_2, \ldots$} such that $a_i$ is the $k_i$th root of the polynomial equation $f_i(a_1, \ldots, a_{i-1}, x)=0$.

This, though a bit confusing, is a pretty accurate and straightforward description. Let's assume two functions ($f_1$ and $f_2$), and substitute $i=1$ into the description. Then we can read

... such that $a_1$ is the $k_1$th root of the polynomial equation $f_1(x)=0$.

With your example, this means that

f1 = 327680000000000000 - 1280000000 #1^8 + #1^16 &
f2 = #1 + 25 #2 + 25 #2^5 &

k1 = 7;
k2 = 3;


and

a1 = Root[f1, k1] // N
(* ==> -8.28089 - 8.28089 I *)


Now put in $i=2$, and read the description again:

Root[{$f_1, f_2$}, {$k_1, k_2$}] represents $a_2$ such that $a_2$ is the $k_2$th root of the polynomial equation $f_2(a_1, x) = 0$.

So let's do

a2 = Root[f2[a1, #] &, k2]

(* ==> 0.353233 + 0.353233 I *)


This is indeed the numerical value of your Root object:

N@Root[{f1, f2}, {7, 3}]

(* ==> 0.353233 + 0.353233 I *)


I hope this clarifies the definition of the multi-polynomial Root objects.

Now why would they introduce this? I don't know. I always assumed that Root is not meant for end users to construct directly. It's simply a representation of algebraic numbers that Mathematica's algorithms can work efficiently with. I assume that some algorithms in version 9 can work better with this type of Root object than with the single-polynomial ones.

You can always convert these to a single-polynomial Root object using RootReduce:

RootReduce@Root[{f1, f2}, {7, 3}]

(* ==>

Root[268435456 - 160000000000 #1^8 - 1280000000000 #1^12 +
14593486328125 #1^16 + 296215781250000 #1^20 +
2277618359375000 #1^24 + 10672192343750000 #1^28 +
34709265117187500 #1^32 + 83311708281250000 #1^36 +
152740318515625000 #1^40 + 218200683593750000 #1^44 +
245475769042968750 #1^48 + 218200683593750000 #1^52 +
152740478515625000 #1^56 + 83312988281250000 #1^60 +
34713745117187500 #1^64 + 10681152343750000 #1^68 +
2288818359375000 #1^72 + 305175781250000 #1^76 +
19073486328125 #1^80 &, 46]

*)


Or just use N on them to get a numerical approximation.

-

First consider :

Root[327680000000000000 - 1280000000 #1^8 + #1^16 &, 7] // ToRadicals // FullSimplify

(-2 - 2 I) 5^(3/4) (10 - 2 Sqrt[5])^(1/8)


now substitute #1 with this number in #1 + 25 #2 + 25 #2^5 & switching #2 to #1 and compare with your original Root object :

Root[(-2 - 2 I) 5^(3/4) (10 - 2 Sqrt[5])^(1/8) + 25 #1 + 25 #1^5 &, 3] ==
Root[{327680000000000000 - 1280000000 #1^8 + #1^16 &, #1 + 25 #2 + 25 #2^5 &}, {7, 3}]

True


Now it appears quite obvious what the updated Root object is supposed to represent and the documentation makes no more confusion. For the sake of simplicity let's repeat the above procedure for another simpler example of a Root object taking it from documentation:

Root[#1^2 - 3 &, 1]

-Sqrt[3]

 Root[#1^2 + Sqrt[3] - 5 &, 2]

Sqrt[5 - Sqrt[3]]


i.e. it is the same as

Root[{#1^2 - 3 &, #2^2 - #1 - 5 &}, {1, 2}]

Sqrt[5 - Sqrt[3]]


i.e. we have

Root[#1^2 - Root[#1^2 - 3 &, 1] - 5 &, 2] == Root[{#1^2 - 3 &, #2^2 - #1 - 5 &}, {1, 2}]

 True


To conclude: this new capability of Root allows for much simpler representation (we needn't nest many Root objects) of algebraic numbers (roots of univariate polynomials of rational coefficients) and provides quite terse notation of even complicated algebraic objects.

-