Hermitean Transpose
Ht.Rd
The Hermitean transpose of a rational matrix \(x(z)\) is defined as $$x^{*}(z)=\overline{x(\bar{z}^{-1})}'.$$ This means e.g. for a polynomial with real coefficients \(x(z)=a_0 + a_1 z +\cdots + a_p z^p\) that the coefficient matrices are transposed and that \(z\) is replaced by \(z^{-1}\): \(x^*(z)=a_0' + a_1' z^{-1} +\cdots + a_p' z^{-p}\), i.e. the result is (in general) a Laurent polynomial.
Usage
Ht(x)
# S3 method for polm
Ht(x)
# S3 method for lpolm
Ht(x)
# S3 method for stsp
Ht(x)
# S3 method for zvalues
Ht(x)
Value
A rational matrix object which represents the Hermitean transpose \(x^*(z)\).
The Hermitean transpose of a polynomial matrix (in general) is a Laurent polynomial,
therefore the output is of class lpolm
if x
is a polm
object.
In all other cases the output is of the same class as the input x
.
Details
The Hermitean transpose is only implemented for
polynomial matrices (polm
objects),
Laurent polynomials lpolm
objects),
rational matrices in statespace form (stsp
objects) and for
the frequency response of rational matrices (zvalues
objects).
The case of rational matrices in LMFD or RMFD form has not (yet) been implemented.
It is not possible to directly construct the Hermitean transpose from
given power series coefficients. Therefore Ht()
does
not support pseries
objects.
Finally note that the Hermitean transpose of a rational matrix
\(x(z)=D+zB(I-Az)^{-1}B\) in statespace form
(in general) has a pole at zero, if the state transition matrix \(A\)
is singular. Since rational matrices with a pole at \(z=0\) have no
statespace realization, the procedure Ht()
throws an error in this case.
Examples
# rational matrix in statespace form
x = test_stsp(dim = c(4,4), s = 2)
Ht(x)
#> statespace realization [4,4] with s = 2 states
#> s[1] s[2] u[1] u[2] u[3] u[4]
#> s[1] -0.24283103 -0.7059684 -0.09989289 0.13315421 0.29724454 -0.6432538
#> s[2] 0.85382717 -0.5736553 -0.85310520 -0.53490488 -0.05128600 0.4547386
#> x[1] -0.39710942 0.2611624 1.39455055 0.24865760 0.02568736 -0.2148316
#> x[2] 0.93899728 -1.6618782 -1.34451967 0.38922929 0.27890504 -0.1095495
#> x[3] 0.09675934 0.5834381 0.15887499 -0.04646097 0.78329694 0.4349713
#> x[4] 0.93023387 -1.3215050 -1.20394326 -0.59797821 0.17064849 1.0835703
all.equal(zvalues(Ht(x)), Ht(zvalues(x)))
#> [1] TRUE
# Note (x(z) x^*(z)) is Hermitean for |z| = 1
xx = zvalues(x) %r% Ht(zvalues(x))
# print(xx, digits = 2)
apply(unclass(xx), MARGIN = 3, FUN = isSymmetric)
#> [1] TRUE TRUE TRUE TRUE TRUE
# polynomial matrix
x = test_polm(dim = c(2,3), degree = 1)
Ht(x)
#> ( 3 x 2 ) Laurent polynomial matrix with degree <= 0, and minimal degree >= -1
#> z^-1 [,1] [,2] z^0 [,1] [,2]
#> [1,] 111 211 110 210
#> [2,] 121 221 120 220
#> [3,] 131 231 130 230
if (FALSE) {
Ht(test_lmfd(dim = c(2,2), degrees = c(3,3)))
Ht(test_rmfd(dim = c(2,2), degrees = c(3,3)))
Ht(pseries(test_lmfd(dim = c(2,2), degrees = c(3,3))))
}