p?poequ
p?poequ
Computes row and column scaling factors intended to equilibrate a symmetric (Hermitian) positive definite distributed matrix and reduce its condition number.
Syntax
void
pspoequ
(
MKL_INT
*n
,
float
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
float
*sr
,
float
*sc
,
float
*scond
,
float
*amax
,
MKL_INT
*info
);
void
pdpoequ
(
MKL_INT
*n
,
double
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
double
*sr
,
double
*sc
,
double
*scond
,
double
*amax
,
MKL_INT
*info
);
void
pcpoequ
(
MKL_INT
*n
,
MKL_Complex8
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
float
*sr
,
float
*sc
,
float
*scond
,
float
*amax
,
MKL_INT
*info
);
void
pzpoequ
(
MKL_INT
*n
,
MKL_Complex16
*a
,
MKL_INT
*ia
,
MKL_INT
*ja
,
MKL_INT
*desca
,
double
*sr
,
double
*sc
,
double
*scond
,
double
*amax
,
MKL_INT
*info
);
Include Files
- mkl_scalapack.h
Description
The
p?poequ
function
computes row and column scalings intended to equilibrate a real symmetric or complex Hermitian positive definite distributed matrix sub(A
) = A
(ia
:ia
+n
-1, ja
:ja
+n
-1) and reduce its condition number (with respect to the two-norm). The output arrays sr
and sc
return the row and column scale factors 
These factors are chosen so that the scaled distributed matrix =*
B
with elements b
i
j
s
(i
)*a
i
j
s
(j
) has ones on the diagonal.This choice of
sr
and sc
puts the condition number of B
within a factor n
of the smallest possible condition number over all possible diagonal scalings.The auxiliary function
p?laqsy
uses scaling factors computed by p?geequ
to scale a general rectangular matrix.Input Parameters
- n
- (global) The number of rows and columns to be operated on, that is, the order of the distributed matrix sub(A)(.n≥0)
- a
- (local)Pointer into the local memory to an array of local size.lld_a*LOCc(ja+n-1)The arrayacontains then-by-nsymmetric/Hermitian positive definite distributed matrix sub(A) whose scaling factors are to be computed. Only the diagonal elements of sub(A) are referenced.
- ia,ja
- (global) The row and column indices in the global matrixAindicating the first row and the first column of the matrix sub(A), respectively.
- desca
- (global and local) array of sizedlen_. The array descriptor for the distributed matrixA.
Output Parameters
- sr,sc
- (local)Arrays of sizesandLOCr(m_a), respectively.LOCc(n_a)If, the arrayinfo= 0contains the row scale factors for sub(sr(ia:ia+n-1)A).sris aligned with the distributed matrixA, and replicated across every process column.sris tied to the distributed matrixA.If, the arrayinfo= 0contains the column scale factors for sub(sc(ja:ja+n-1)A).scis aligned with the distributed matrixA, and replicated down every process row.scis tied to the distributed matrixA.
- scond
- (global)If,info= 0scondcontains the ratio of the smallest, withsr[i] ( orsc[j]) to the largestsr[i] ( orsc[j])ia-1≤i<ia+n-1 andja-1≤j<ja+n-1.Ifandscond≥0.1amaxis neither too large nor too small, it is not worth scaling bysr( orsc).
- amax
- (global)Absolute value of the largest matrix element. Ifamaxis very close to overflow or very close to underflow, the matrix should be scaled.
- info
- (global)If, the execution is successful.info=0:info< 0If thei-th argument is an array and thej-th entry, indexedhad an illegal value, thenj- 1,info= -(i*100+j); if thei-th argument is a scalar and had an illegal value, theninfo=-i.:info>0Ifinfo=k, thek-th diagonal entry of sub(A) is nonpositive.