As an aside, before we continue this calculation, we should look at the definition of `resultant' and `discriminant', at least by example. For more details, see [, pages 215--218,].
Consider
and
. The
Sylvester matrix of these two polynomials is formed by
multiplying p by 1, x,
, and
(up to but not including
the
degree of q) and multiplying q by 1, x, and
.
We write these polynomials in a list and extract the powers of x
to make a matrix-vector multiplication:

If there is an
for which
and
simultaneously, then
where
is a nonzero vector; hence we must have
. The determinant of this Sylvester matrix is called
the resultant of p and q. Obviously if
then p and q have no common factors.
There are more efficient ways to calculate the resultant than by forming this matrix and taking the determinant, but we do not go into this here.
A special resultant is the resultant of p and its derivative
.
This is zero precisely when p has multiple roots. If the leading
coefficient of p is
, then we call
the
discriminant of p. Thus the discriminant of p is zero
precisely when p has multiple roots. See [3] for an
alternate definition of the discriminant, and see
[,21] for more details on resultant and
subresultant algorithms.
> resultant(r,diff(r,x),x);
6 5 4
- (54 - 5 a) (- 35189209313280 a + 33652683893404224 a + 1886180124890160 a
3 2
- 209011504196972565 a - 471232312731311670 a + 4546655486829256680 a
- 4631307643210963968)
As predicted, the resultant is
times the discriminant (the
leading coefficient of r is 99). This predicts that r will have
multiple roots for those values of a which make the above
polynomial zero.
> subs(a=54/5,d);
0
> subs(a=54/5,r);
5 3 2
99 x - 953/5 x - 540 x
Obviously x=0 is a multiple root if
, then.
> s := op(3,d);
6 5 4 3
s := 3590369280 a - 3433596969024 a - 192447722160 a + 21325528435565 a
2
+ 48080023745670 a - 463897100992680 a + 472534194797568
> alias(alpha=RootOf(",a));
I, alpha
> subs(a=alpha,r);
5 3 2 3
54 - 5 alpha + 99 x - 61 x - 50 x alpha - 12 x alpha
> factor(");
1/
434335011757987604874272329184376961978030947623564519416229828656613135864308\
752956350213721760394754865468750000
(16447668644949730454482015628495063022000 x
< ******************* several lines omitted *******************>
4
+ 164755474086118437520018618672953288000 x alpha
5
- 172059736910372892228371562063360000 x alpha ) (
- 106025442444446337510923924887466141694
+ 78175831306266605050612247334033152250 x
+ 35413619863062503093930210102968692635 alpha
5
+ 1373848354156543678262348056719360 alpha
4
- 1311525643882214281519944235336051008 alpha
3
- 2298604048311754686423673732876311984 alpha
2
+ 1159110224678338909624328707418387601 alpha )^2
And we see that if a is any root of the polynomial s,
then r has a multiple root (given explicitly by setting
the last factor to zero).
A simpler way to see that:
> ralpha := subs(a=alpha,r);
5 3 2 3
ralpha := 54 - 5 alpha + 99 x - 61 x - 50 x alpha - 12 x alpha
Unfortunately, a simple call to gcd won't work ---
we have to use evala, which is the special evaluation routine
for algebraic numbers.
> evala(Gcd(ralpha,diff(ralpha,x)));
17670907074074389585153987481244356949
- -------------------------------------- + x
13029305217711100841768707889005525375
7082723972612500618786042020593738527
+ -------------------------------------- alpha
15635166261253321010122449466806630450
45794945138551455942078268557312 5
+ ------------------------------------- alpha
2605861043542220168353741577801105075
218587607313702380253324039222675168 4
- -------------------------------------- alpha
13029305217711100841768707889005525375
383100674718625781070612288812718664 3
- -------------------------------------- alpha
13029305217711100841768707889005525375
386370074892779636541442902472795867 2
+ -------------------------------------- alpha
26058610435422201683537415778011050750
The greatest common divisor of r and
when
is
the polynomial whose roots are the multiple roots of
the original polynomial.