Constructor for Right Matrix Fraction Descriptions (RMFDs)
rmfd.Rd
A Right Matrix Fraction Description (RMFD) of a rational matrix, \(k(z)\) say, is pair \((c(z),d(z))\) of polynomial matrices, such that \(k(z) = d(z) c^{-1}(z)\). The polynomial matrix \(c(z)\) must be square and invertible.
Details
Suppose that \(k(z) = d(z) c^{-1}(z)\) is an \((m,n)\)-dimensional matrix
and that \(c(z)\) and \(d(z)\) have degrees \(p\) and \(q\)
respectively. The corresponding rmfd
object stores the coefficients of
the polynomials \(c(z), d(z)\) in an \((n(p+1)+m(q+1), n)\) dimensional
(real or complex valued) matrix. The rmfd
object also stores the
attribute order = c(m,n,p,q)
and a class attribute c("lmfd",
"ratm")
.
For a valid RMFD we require \(m>0\) and \(p\geq 0\).
Examples
### (1 x 1) rational matrix k(z) = (3+2z+z^2) (1+z+z^2)^(-1)
rmfd(c(1,1,1), c(3,2,1)) %>% print(format = 'c')
#> ( 1 x 1 ) right matrix fraction description d(z) c^(-1)(z) with degrees deg(c(z)) = p = 2, deg(d(z)) = q = 2
#> left factor d(z):
#> [,1]
#> [1,] 3 + 2z + z^2
#> right factor c(z):
#> [,1]
#> [1,] 1 + z + z^2
### (1 x 1) rational matrix k(z) = (3+2z+z^2)
rmfd(c = c(3,2,1)) %>% print(format = 'c')
#> ( 1 x 1 ) right matrix fraction description d(z) c^(-1)(z) with degrees deg(c(z)) = p = 2, deg(d(z)) = q = 0
#> left factor d(z):
#> [,1]
#> [1,] 1
#> right factor c(z):
#> [,1]
#> [1,] 3 + 2z + z^2
### (1 x 1) rational matrix k(z) = (1+z+z^2)^(-1)
rmfd(c(1,1,1)) %>% print(format = 'c')
#> ( 1 x 1 ) right matrix fraction description d(z) c^(-1)(z) with degrees deg(c(z)) = p = 2, deg(d(z)) = q = 0
#> left factor d(z):
#> [,1]
#> [1,] 1
#> right factor c(z):
#> [,1]
#> [1,] 1 + z + z^2
### (3 x 2) rational matrix with degrees p=1, q=1
x = rmfd(array(rnorm(2*2*2), dim = c(2,2,2)),
array(rnorm(3*2*2), dim = c(3,2,2)))
is.rmfd(x)
#> [1] TRUE
dim(x)
#> m n p q
#> 3 2 1 1
str(x)
#> ( 3 x 2 ) right matrix fraction description with degrees (deg(c(z)) = p = 1, deg(d(z)) = q = 1)
print(x, digits = 2)
#> ( 3 x 2 ) right matrix fraction description d(z) c^(-1)(z) with degrees deg(c(z)) = p = 1, deg(d(z)) = q = 1
#> left factor d(z):
#> z^0 [,1] [,2] z^1 [,1] [,2]
#> [1,] -0.80 1.90 -1.65 -0.95
#> [2,] -1.03 0.26 -1.20 -0.03
#> [3,] -0.35 0.64 0.77 0.35
#> right factor c(z):
#> z^0 [,1] [,2] z^1 [,1] [,2]
#> [1,] -1.25 -0.53 0.16 -0.60
#> [2,] 0.16 0.55 -0.68 1.64
xr = test_rmfd(dim = c(3,2), degree = c(2,2))
if (FALSE) {
### the following calls to rmfd() throw an error
rmfd() # no arguments!
rmfd(c = test_polm(dim = c(2,3), degree = 1)) # c(z) must be square
rmfd(c = test_polm(dim = c(2,2), degree = -1)) # c(z) must have degree >= 0
}