SYNOPSIS

#include "matrix.h" MAT *px_rows(PERM *pi, MAT *A, MAT *OUT) MAT *px_cols(PERM *pi, MAT *A, MAT *OUT) VEC *px_vec (PERM *pi, VEC *x, VEC *out) VEC *pxinv_vec(PERM *pi, VEC *x, VEC *out)

#include "zmatrix.h" ZVEC *px_zvec (PERM *pi, ZVEC *x, ZVEC *out) ZVEC *pxinv_zvec(PERM *pi, ZVEC *x, ZVEC *out)

DESCRIPTION

The routines `px_rows()` and `px_cols()` are for permuting matrices,
permuting respectively the rows and columns of the matrix `A`.
In particular, for `px_rows()` the `i`-th row of `OUT` is
the `pi->pe[i]`-th row of `A`.
Thus $\hbox*OUT*=PA$ where $P$ is the permutation matrix described by
`pi`.
The routine `px_cols()` computes $\hbox*OUT*=AP$.
The result is stored in `OUT` provide it has sufficient space for the
result.
If `OUT` is NULL or too small to contain the result then it is replaced
by a matrix of the appropriate size.
In either case the result is returned.
Similarly, `px_vec()` and `px_zvec()` permute the entries of the
vector `x` into the vector `out` by the rule that the `i`-th
entry of `out` is the `pi->pe[i]`-th entry of `x`.
Conversely, `pxinv_vec()` and `pxinv_zvec()` permute `x`
into `out` by the rule that the `pi->pe[i]`-th entry of
`out` is the `i`-th entry of `x`.
This is equivalent to inverting the permutation `pi` and then applying
`px_vec()`, respectively, `px_zvec()` for real, resp., complex
vectors.
If `out` is NULL or too small to contain the result, then a new vector is
created and the result stored in it.
In either case the result is returned.

EXAMPLE

PERM *pi; VEC *x, *tmp; ZVEC *z, *ztmp; MAT *A, *B; ...... /* permute x to give tmp */ tmp = px_vec(pi,x,tmp); ztmp = px_zvec(pi,z,ZVNULL); /* restore x & z */ x = pxinv_vec(pi,tmp,x); pxinv_zvec(pi,ztmp,z); /* symmetric permutation */ B = px_rows(pi,A,MNULL); A = px_cols(pi,B,A);

SEE ALSO:
The `px_...()` operations; in particular `px_inv()`

SOURCE FILE: `pxop.c, zvecop.c`