For a monic univariate polynomial f of degree d, this method returns the companion matrix C(f), which is a d×d matrix whose characteristic polynomial is f. Explicitly, C(f) has entries 1 on the first subdiagonal (the diagonal below the main diagonal), negative coefficients of f in the last column (other than the leading coefficient of 1), and 0 elsewhere.
If f is not monic, then this method returns the companion matrix of the normalized monic polynomial (1/an)f, where an is the leading coefficient of f.
i1 : R = CC[x] o1 = R o1 : PolynomialRing |
i2 : eigenvalues companionMatrix(9*x^2 - 1)
o2 = {.333333 }
{-.333333}
o2 : VerticalList
|
i3 : f = x^10 + sum(10, i -> random(i, R))
-- warning: experimental computation over inexact field begun
-- results not reliable (one warning given per session)
10 9 8 7 6
o3 = x + (.741046 + .108386*ii)x + (.127435 + .254482*ii)x + (.362835 + .706096*ii)x + (.0741835 + .808694*ii)x + (.909047
----------------------------------------------------------------------------------------------------------------------------
5 4 3 2
+ .314897*ii)x + (.461944 + .775187*ii)x + (.89189 + .231053*ii)x + (.0258884 + .714827*ii)x + (.29398 + .632944*ii)x +
----------------------------------------------------------------------------------------------------------------------------
.892712 + .673395*ii
o3 : R
|
i4 : C = companionMatrix f
o4 = | 0 0 0 0 0 0 0 0 0 -.892712-.673395ii |
| 1 0 0 0 0 0 0 0 0 -.29398-.632944ii |
| 0 1 0 0 0 0 0 0 0 -.0258884-.714827ii |
| 0 0 1 0 0 0 0 0 0 -.89189-.231053ii |
| 0 0 0 1 0 0 0 0 0 -.461944-.775187ii |
| 0 0 0 0 1 0 0 0 0 -.909047-.314897ii |
| 0 0 0 0 0 1 0 0 0 -.0741835-.808694ii |
| 0 0 0 0 0 0 1 0 0 -.362835-.706096ii |
| 0 0 0 0 0 0 0 1 0 -.127435-.254482ii |
| 0 0 0 0 0 0 0 0 1 -.741046-.108386ii |
10 10
o4 : Matrix CC <--- CC
53 53
|
i5 : clean(1e-10, f - det(x*id_(R^10) - C)) o5 = 0 o5 : R |
i6 : all(eigenvalues C, z -> clean(1e-10, sub(f, R_0 => z)) == 0) o6 = true |