### 28.2 Finding Roots

Octave can find the roots of a given polynomial. This is done by computing the companion matrix of the polynomial (see the `compan` function for a definition), and then finding its eigenvalues.

— Function File: roots (v)

> For a vector v with N components, return the roots of the polynomial

>               v(1) * z^(N-1) + ... + v(N-1) * z + v(N)

> As an example, the following code finds the roots of the quadratic polynomial

>               p(x) = x^2 - 5.

>               c = [1, 0, -5];
>               roots (c)
>               ⇒  2.2361
>               ⇒ -2.2361

> Note that the true result is +/- sqrt(5) which is roughly +/- 2.2361.

> See also: poly, compan, fzero.

— Function File: compan (c)

> Compute the companion matrix corresponding to polynomial coefficient vector c.

> The companion matrix is

>                    _                                                        _
>                   |  -c(2)/c(1)   -c(3)/c(1)  ...  -c(N)/c(1)  -c(N+1)/c(1)  |
>                   |       1            0      ...       0             0      |
>                   |       0            1      ...       0             0      |
>               A = |       .            .      .         .             .      |
>                   |       .            .       .        .             .      |
>                   |       .            .        .       .             .      |
>                   |_      0            0      ...       1             0     _|

> The eigenvalues of the companion matrix are equal to the roots of the polynomial.

> See also: roots, poly, eig.

— Function File: [multp, idxp] = mpoles (p)
— Function File: [multp, idxp] = mpoles (p, tol)
— Function File: [multp, idxp] = mpoles (p, tol, reorder)

> Identify unique poles in p and their associated multiplicity. The output is ordered from largest pole to smallest pole.

> If the relative difference of two poles is less than tol then they are considered to be multiples. The default value for tol is 0.001.

> If the optional parameter reorder is zero, poles are not sorted.

> The output multp is a vector specifying the multiplicity of the poles. multp`(n)` refers to the multiplicity of the Nth pole p`(`idxp`(n))`.

> For example:

>               p = [2 3 1 1 2];
>               [m, n] = mpoles(p);
>                 ⇒ m = [1; 1; 2; 1; 2]
>                 ⇒ n = [2; 5; 1; 4; 3]
>                 ⇒ p(n) = [3, 2, 2, 1, 1]

> See also: residue, poly, roots, conv, deconv.