matrix transposes, adjoints and multiplication

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