I've added a number of matrix routines to the library/matrix.wp34s file. This along with Marcus's matrix editor is about half a flash region. We'd like to provide a full region of matrix functions if possible.

My question is then "What extra functions should go in?"

Suggestions are welcome, suggestions with code are better :-) These aren't going to be held to the same standard as the internal user code commands -- wreck the stack, use the lettered registers and flags and generally have fun.

I am aware of these functions but thought I'd see what people wanted before diving in and doing the ones I find interesting (and probably completely useless).

The existing functions in user code are:

**M.1**- Create an identity matrix from a descriptor in X. No stack damage, L changed.

**M.0**- Create an zero matrix from a descriptor in X. No stack damage, L changed.

**ATR**- Return the sum of the absolute values of the matrix diagonal.

**TR**- Return the trace of the matrix.

**M-**- Matrix subtraction.

**M+**- Matrix addition.

**M.y**- Multiply matrix by scalar.

**FNM**- Frobenius norm.

**RNM**- Row norm.

**CNM**- Column norm.

**MFD**- Find element in matrix.

**M^**- Find the maximum element in matrix.

**Mv**- Find the minimum element in a matrix.

Yes, these need better documentation.

These are implemented internally and documented reasonably in doc/matrix.txt:

**M.TRN**- Matrix transpose in-situ.

**M.times**- Matrix multiply.

**M.+times**- Matrix addition & scalar multiplication.

**M.R<->**- Matrix row swap.

**M.Rtimes**- Multiply row by scalar.

**M.R+times**- Multiply a row by a scalar and add to another row.

**M.IJ**- Convert a register index to row/column indices.

**M.REG**- Convert row/column indices to a register index.

**M.ALL**- Return a loop index to iterate over the entire matrix.

**M.DIAG**- Return a loop index to iterate over the diagonal of the matrix.

**M.ROW**- Return a loop index to iterate over a row of the matrix.

**M.COL**- Return a loop index to iterate over a column of the matrix.

**M.ROW?**- Extract the row count from a matrix descriptor.

**M.COL?**- Extract the column count from a matrix descriptor.

**M.SQR?**- Check if a matrix descriptor is for a square matrix & execute the next step if__not__.

**M.COPY**- Copy a matrix to another location.

**M.DET**- Calculate the determinant of a matrix.

**M.LIN**- Solve a system of linear equations.

**M.INV**- Invert a matrix in-situ.

This seems like a fairly good selection of operations. Their names might change, but the functions are very unlikely to.

- Pauli