# XDistributedPolynomialFunctions(VAR, F)¶

Using the Hankel matrix of a noncommutative polynomial one can determine the rank (Matrices de Hankel by Fliess). The extended Ho-Algorithmus (Fornasini+Marchesini) is used to create a minimal linear representation. Another approach is implemented in NonCommutativeRationalFunctions.

display: Record(rows: List FreeMonoid VAR, cols: List FreeMonoid VAR, H: Matrix F) -> OutputForm

`display(sys)` prints the Hankel matrix in an extended form with row-indices as column 0 and column-indices as row 0.

findNonZeroEntry: (Matrix F, NonNegativeInteger, NonNegativeInteger) -> List NonNegativeInteger

`findNonZeroEntry(A,i,j)` returns the indices [`k`,`l`] with i<=k<=m and j<=l<=n such that A(`k`,`l`) is non-zero and [0,0] otherwise. A is of size `m` `x` `n`.

hankelIndices: XDistributedPolynomial(VAR, F) -> List FreeMonoid VAR

`hankelIndices(p)` returns a list of all left and right factors of the monomials of a given multivariate noncommutative polynomial. Factorization: `w` = u*v

hankelMatrix: (XDistributedPolynomial(VAR, F), VAR) -> Matrix F

`hankelMatrix(p,x)` returns a matrix with the entries of the coefficients of `p` at (`u`,`v`) where the monomials factorizes through `w` = u*x*v. This matrix is indexed by all words of the Hankel matrix.

hankelMatrix: XDistributedPolynomial(VAR, F) -> Matrix F

`hankelMatrix(p)` returns the Hankel matrix `H`(`p`) of given polynomial `p`, i.e. the entries at (`u`,`v`) are the coefficients of the monomials `w` = u*v. Rows and columns are indexed by words.

hankelSystem: XDistributedPolynomial(VAR, F) -> Record(rows: List FreeMonoid VAR, cols: List FreeMonoid VAR, H: Matrix F)

`hankelSystem(p)` creates a Hankel-matrix for the polynomial `p` with respect to the basis of all factors in `p`. Row- and column-indices can be different.

minimalMatrix: (Matrix F, NonNegativeInteger) -> Matrix F

`minimalMatrix(A,r)` returns the minimal (upper-left) submatrix of A such that the rank corresponds to the given.

minimalRepresentation: XDistributedPolynomial(VAR, F) -> Record(alpha: Matrix F, mu: List Matrix F, var: List VAR, beta: Matrix F)

`minimalRepresentation(p)` returns a minimal representation using the generalized Ho algorithm [Fornasini, 1978] `p` = sum_w alpha*mu(`w`)*beta*w [Theorem 3.3, Salomaa–Soittola 1978]

transformationMatrices: Matrix F -> List Matrix F

`transformationMatrices(A)` returns a list of two matrices `P` and `Q` such that P*A*Q = `J` where the upper diagonal block of `J` is I_k for `k` = rank(A).