# 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  *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