package jmathlib.toolbox.jmathlib.matrix._private.Jampack;
/**
Pivot applys a sequence of pivot operations to the
rows of a matrix. The pivot sequence is contained
in an integer array pvt[], which determines a permution
as follows:
<pre>
* for (k=0; k<pvt.length; k++)
* swap k and pvt[k];
</pre>
Both k and pvt[k] represent zero-based references
to the rows of the matrix.
Pivot also has a method to apply the inverse permutation.
<p>
Comments: Column pivoting will be added later.
@version Pre-alpha
@author G. W. Stewart
*/
public class Pivot{
/**
Pivots the rows of a Zmat (altered) as specified by a pivot array.
@param A The Zmat (altered)
@param pvt The pivot array
@return The Zmat A with its rows permuted
@exception JampackException
Thrown for inconsistent dimensions.
*/
public static Zmat row(Zmat A, int pvt[])
throws JampackException{
int np = pvt.length;
if (np > A.nrow)
throw new JampackException
("Inconsistent array dimensions");
A.dirty = true;
for (int k=0; k<np; k++)
for (int j=0; j<A.ncol; j++){
double t = A.re[k][j];
A.re[k][j] = A.re[pvt[k]][j];
A.re[pvt[k]][j] = t;
t = A.im[k][j];
A.im[k][j] = A.im[pvt[k]][j];
A.im[pvt[k]][j] = t;
}
return A;
}
/**
Pivots the rows of a Zmat (altered) as in the inverse order specified
by a pivot array.
@param A The Zmat (altered)
@param pvt The pivot array
@return The Zmat A with its rows permuted
@exception JampackException
Thrown for inconsitent dimensions.
*/
public static Zmat rowi(Zmat A, int pvt[])
throws JampackException{
int np = pvt.length;
if (np > A.nrow)
throw new JampackException
("Inconsistent array dimensions");
A.dirty = true;
for (int k=np-1; k>=0; k--)
for (int j=0; j<A.nc; j++){
double t = A.re[k][j];
A.re[k][j] = A.re[pvt[k]][j];
A.re[pvt[k]][j] = t;
t = A.im[k][j];
A.im[k][j] = A.im[pvt[k]][j];
A.im[pvt[k]][j] = t;
}
return A;
}
}