Skip to contents

The Kronecker indices \((\nu_1,\ldots,\nu_m)\) describe a (nice) basis of the row space of the Hankel matrix of the impulse response coefficients. These indices are e.g. used to construct a (unique) LMFD representation in echelon canonical form for a given impulse response.

Usage

basis2nu(basis, m)

nu2basis(nu)

pseries2nu(obj, Hsize = NULL, tol = sqrt(.Machine$double.eps))

Arguments

basis

s-dimensional (integer) vector which contains the indices of the basis rows of the Hankel matrix.

m

(integer) the number of rows of the underlying rational matrix.

nu

vector with the Kronecker indices, i.e. an m-dimensional integer vector.

obj

pseries object or 3-D array with dimension \((m,n,l+1)\). This object represents the impulse response of a rational matrix.

Hsize

integer vector c(f,p), number of block rows and block columns of the Hankel matrix of the impulse response coefficients. If NULL a default choice is made.

tol

tolerance parameter, used by qr.

Value

basis2nu

returns the Kronecker indices (nu) for given indices of the basis rows.

nu2basis

returns the indices of the basis rows for given Kronecker indices nu.

pseries2nu

determines the Kronecker indices for given impulse response coefficients. The function uses a QR decomposition (with pivoting) of the transpose of the Hankel matrix to determine the rank and the basis for its row space. See qr.

Details

The function pseries2nu first constructs a Hankel matrix of the impulse response coefficients with \(f\) and \(p\) block rows and columns respectively. Then a (nice) basis for the row space is computed via a QR decomposition (with pivoting) of the transposed Hankel matrix. See qr. If the size of the Hankel matrix is not specified (the parameter Hsize=c(f,p) is missing), then a default choice is made such that \(f+p-1 = l\), \(p\geq 1\) and \(f \geq p+1\) holds.
The function pseries2nu throws an error if the conditions \(p\geq 1\), \(f \geq 2\) and \(l \geq f+p-1\) are not satisfied. In particular, this implies that \(l \geq 2\) must hold.

References

Hannan EJ, Deistler M (2012). The Statistical Theory of Linear Systems, Classics in Applied Mathematics. SIAM, Philadelphia. Originally published: John Wiley & Sons, New York, 1988.

Examples

basis = c(1,2,3,4,6,7)     # suppose rows 1,2,3,4,6,7 of the Hankel matrix form a basis
nu = basis2nu(basis, m=3)  # compute the corresponding Kronecker index
print(nu)
#> [1] 3 1 2
all.equal(basis,nu2basis(nu))  # nu2basis(nu) returns the indices of the basis rows (basis)
#> [1] TRUE

# generate random rational matrix in statspace form
# make sure that the matrix is stable
m = 3
n = 2
s = 7
A = matrix(rnorm(s*s), nrow = s, ncol = s)
A = A / (1.1 * max(abs(eigen(A, only.values = TRUE)$values)))
x = stsp(A, B = matrix(rnorm(s*n), nrow = s, ncol = n),
            C = matrix(rnorm(s*m), nrow = m, ncol = s),
            D = diag(1, nrow = m, ncol = n))
k = pseries(x, lag.max = 20)

# compute the Kronecker indices of this  rational matrix
pseries2nu(k)
#> [1] 3 2 2

if (FALSE) {
# Suppose the rational matrix has dimension m=2. Then the rows 1,2,5
# do not form a "nice" basis for the row space of the Hankel matrix.
# Therefore "basis2nu" stops with an error message.
basis2nu(c(1,2,5), m=2)
}