# zcl man page

zcl — clean matrix

## Synopsis

**zcl** [Options] *<Subsp> <Mat> <CleanedMat> <Ops>*

## Description

This program "cleans" *Mat* with *Subsp*, i.e., it adds suitable linear combinations of rows of *Subsp* to each row of *Mat* such that all pivot columns in the result are zero. It writes two matrices to *CleanedMat* and *Ops* such that *Mat* = *Ops*·*Subsp* + *CleanedMat*. If *Subsp* is not in echelon form, it is first reduced to echelon form, and the previous equation holds for the reduced Matrix. *Subsp* and *Mat* must be over the same field and have the same number of columns.

One use of this program is to calculate the action of a generator on an invariant subspace: Take the subspace in echelon form (as it is on output from zsp(1)), and multiply it by a generator. Cleaning the result with the original basis yields a zero matrix, and *RowOps* is the action of the generator on the invariant subspace. For example, if *subsp* is the subspace and *gen* is the generator,

# zmu subsp gen image

# zcl subsp image null gen_s

calculates the action on the subspace in *gen_s*.

The action on the quotient of a given subspace can be calculated with the *zqt* program.

## Options

**-Q**- Quiet, no messages.
**-V**- Verbose, more messages.
**-T***<MaxTime>*- Set CPU time limit

## Implementation Details

The subspace is loaded into memory and, if necessary, reduced to echelon form. The second matrix, is then processed a row at a time. Row operations are performed to clear out the pivot points of the input row using the rows of the first input matrix. A row describing what was done is written out to *Ops*, and the remnant (clean) row is output to *CleanedMat*.

## Input Files

*Subsp*- The subspace to clean with.
*Mat*- The matrix to be cleaned.

## Output Files

*CleanedMat*- The cleaned matrix.
*Ops*- Row operations that were performed.