For a monic univariate polynomial $f$ of degree $d$, this method returns the companion matrix $C(f)$, which is a $d\times 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/a_n)f$, where $a_n$ 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 |
The object companionMatrix is a method function.