SYNOPSIS

#include "matrix.h" BAND *bd_transp(BAND *A, BAND *OUT) MAT *m_transp(MAT *A, MAT *OUT) MAT *mmtr_mlt(MAT *A, MAT *B, MAT *OUT) MAT *mtrm_mlt(MAT *A, MAT *B, MAT *OUT)

#include "zmatrix.h" ZMAT *zm_adjoint(ZMAT *A, ZMAT *OUT) ZMAT *zmma_mlt(ZMAT *A, ZMAT *B, ZMAT *OUT) ZMAT *zmam_mlt(ZMAT *A, ZMAT *B, ZMAT *OUT)

DESCRIPTION

The routine `bd_transp()` computes the transpose of the banded matrix
`A` and puts the result in `OUT`.
Both are `BAND` structures.
The routine `m_transp()` transposes the matrix `A` and stores the
result in `OUT`.
The routine `m_adjoint()` takes the complex conjugate transpose (or
complex adjoint) of `A` and stores the result in `OUT`.
These routines may be *in situ\/* (i.e.\ `A == OUT`) only if
`A` is square.
(Note that `BAND` matrices are always square.)
The complex adjoint of $A$ is denoted $A^*$.
The routine `mmtr_mlt()` forms the product $AB^T$, which is stored in
`OUT`.
The routine `mma_mlt()` forms the product $AB^*$, which is stored in
`OUT`.
The routine `mtrm_mlt()` forms the product $A^TB$, which is stored in
`OUT`.
The routine `mam_mlt()` forms the product $A^*B$, which is stored in
`OUT`.
Neither of these routines can form the product *in situ*.
This means that they must be used with `A != OUT` and `B != OUT`.
However, you can still use `A == B`.
For all the above routines, if `OUT` is NULL or too small to contain
the result, then it is resized to the correct size, and is then
returned.

EXAMPLE

MAT *A, *B, *C; ...... C = m_transp(A,MNULL); /* C = A^T */ mmtr_mlt(A,B,C); /* C = A.B^T */ mtrm_mlt(A,B,C); /* C = A^T.B */

SOURCE FILE: `matop.c, zmatop.c`