Skip to contents

polm objects represent polynomial matrices $$a(z) = a_0 + a_1 z + \cdots + a_p z^p$$ If the matrix \(a(z)\) is an \((m,n)\) dimensional polynomial matrix (i.e. the coefficients \(a_i\) are \((m,n)\) dimensional real or complex valued matrices) then the polm object stores the coefficients in an (m,n,p+1) dimensional (numeric or complex) array together with a class attribute c("polm","ratm").
The constructor function polm(a) takes a (numeric or complex) vector, matrix or 3-dimensional array and returns a polm object.

Usage

polm(a)

Arguments

a

either a (numeric or complex) vector, matrix or 3-D array. A vector is coerced to a scalar (i.e. \((1,1)\)-dimensional) polynomial and a matrix gives a polynomial matrix of zero degree.

Value

An object of class polm.

Details

Any of the dimensions of the 3-dimensional array may also be zero. In particular, if the third dimension is zero, then the polm object is interpreted as the zero polynomial.

For important methods and functions for this class have a look at the "see also" section.

See also

  • lpolm objects allow for coefficient matrices pertaining to negative powers of \(z\).

  • test_polm generates random polynomials.

  • checks: is.polm, is.miniphase, and is.coprime. As a byproduct is.coprime(a) computes the zeroes of a square polynomial matrix \(a(z)\).

  • generic S3 methods: dim, str and print.

  • arithmetics: Ops.ratm, matrix multiplication %r%, polynomial division %/%, polynomial remainder %%, ...

  • matrix operations: t.polm, bind, [.polm, [<-.polm, ...

  • degree returns the degree, col_end_matrix computes the column end matrix and prune "simplifies" a polynomial. Note that the degree of the zero polynomial is implemented as being equal to \(-1\), see degree!

  • reflect_zeroes may be used to reflect zeroes of a polynomial matrix by multiplication with allpass rational matrices.

  • normal forms: Hermite normal form hnf, Smith normal form snf, column reduced form col_reduce and Wiener Hopf factorization whf.

  • companion_matrix, zeroes, pseries, zvalues, ...

Examples

# (1 x 1) polynomial matrix a(z) =  0 + 1z + 2z^2
polm(0:2)
#> ( 1 x 1 ) matrix polynomial with degree <= 2 
#>      z^0 [,1] z^1 [,1] z^2 [,1]
#> [1,]        0        1        2

# (2 x 3) polynomial matrix a(z) = a0 (degree is zero)
polm(diag(1, nrow = 2, ncol = 3))
#> ( 2 x 3 ) matrix polynomial with degree <= 0 
#>      z^0 [,1]  [,2]  [,3]
#> [1,]        1     0     0
#> [2,]        0     1     0

# random (2 x 3) polynomial matrix a(z) = a0 + a1 z + a2 z^2 + a3 z^3 (degree = 3)
polm(array(stats::rnorm(2*3*4), dim = c(2,3,4)))
#> ( 2 x 3 ) matrix polynomial with degree <= 3 
#>        z^0 [,1]       [,2]        [,3]   z^1 [,1]      [,2]       [,3]
#> [1,]  0.2421305 0.03389597  0.08850416 -0.7860485 0.9712592  0.9396826
#> [2,] -1.3889653 0.01198896 -1.28305612  0.2450675 1.4402402 -0.2459277
#>       z^2 [,1]       [,2]        [,3]   z^3 [,1]       [,2]       [,3]
#> [1,] 1.0869005 -1.4131850 -0.02417772  1.0536304  0.3893066 -1.7098398
#> [2,] 0.9490698 -0.1739833 -0.14800540 -0.2673505 -0.8020361  0.1034521

# random (2 x 1) polynomial matrix with complex coefficients (degree = 2)
a = polm(array(complex(real = stats::rnorm(2*1*3), 
               imaginary = stats::rnorm(2*1*3)), dim = c(2,1,3)))
is.polm(a)
#> [1] TRUE
dim(a)
#> m n p 
#> 2 1 2 
str(a)
#> ( 2 x 1 ) matrix polynomial with degree <= 2
print(a, digits = 3)
#> ( 2 x 1 ) matrix polynomial with degree <= 2 
#>           z^0 [,1]      z^1 [,1]     z^2 [,1]
#> [1,] -0.177-0.226i  0.212-0.663i 0.306+0.599i
#> [2,] -1.483-0.607i -0.884+0.236i 0.288+0.062i