package Jampack; /** Norm computes norms of matrices.
Comments: At this point only the Frobenius norm is calculated. Later the
1, 2, and infinity norms will be added.
@version Pre-alpha
@author G. W. Stewart
*/
public class Norm{
/**
Computes the Frobenius norm of a the submatrix (ii1:ii2, jj1,jj2)
of a Zmat.
@param A The zmat
@param ii1 The lower row index
@param ii2 The upper row index
@param jj1 The lower column index
@param jj2 The upper column index
@return The Frobenius norm of A(ii1:ii2, jj1:jj2)
*/
public static double fro(Zmat A, int ii1, int ii2, int jj1, int jj2)
{
int i, i1, i2, j, j1, j2;
double fac, nrm, scale;
i1 = ii1 - A.basex;
i2 = ii2 - A.basex;
j1 = jj1 - A.basex;
j2 = jj2 - A.basex;
scale = 0.0;
for (i=i1; i<=i2; i++){
for (j=j1; j<=j2; j++){
scale = Math.max(scale,
Math.abs(A.re[i][j])+Math.abs(A.im[i][j]));
}
}
if (scale == 0){
return 0.0;
}
if (scale < 1){
scale = scale*1.0e20;
}
scale = 1/scale;
nrm = 0;
for (i=i1; i<=i2; i++){
for (j=j1; j<=j2; j++){
fac = scale*A.re[i][j];
nrm = nrm + fac*fac;
fac = scale*A.im[i][j];
nrm = nrm + fac*fac;
}
}
return Math.sqrt(nrm)/scale;
}
/**
Computes the Frobenius norm of a Zmat.
@param A The Zmat
@return The Frobenius norm of A
*/
public static double fro(Zmat A)
{
A.getProperties();
return Norm.fro(A, A.bx, A.rx, A.bx, A.cx);
}
/**
Computes the Frobenius norm of a Z1.
@param u The Z1
@return The Frobenius norm of u
*/
public static double fro(Z1 u)
{
int i;
double fac, nrm, scale;
int n = u.n;
scale = 0.0;
for (i=0; i