rankqr - rank revealing QR factorization
: integer vector on entry, if JPVT(i) is not 0, the i-th column of A is permuted to the front of AP, otherwise column i is a free column. On exit, if JPVT(i) = k, then the i-th column of A*P was the k-th column of A.
SVAL(1) is the largest singular value of R(1:RANK,1:RANK);
SVAL(2) is the smallest singular value of R(1:RANK,1:RANK);
SVAL(3) is the smallest singular value of R(1:RANK+1,1:RANK+1), if RANK < MIN(M,N), or of R(1:RANK,1:RANK), otherwise.
To compute (optionally) a rank-revealing QR factorization of a real general M-by-N real or complex matrix A, which may be rank-deficient, and estimate its effective rank using incremental condition estimation.
The routine uses a QR factorization with column pivoting:
A * P = Q * R, where R = [ R11 R12 ], [ 0 R22 ]
with R11 defined as the largest leading submatrix whose estimated condition number is less than 1/RCOND. The order of R11, RANK, is the effective rank of A.
If the triangular factorization is a rank-revealing one (which will be the case if the leading columns were well- conditioned), then SVAL(1) will also be an estimate for the largest singular value of A, and SVAL(2) and SVAL(3) will be estimates for the RANK-th and (RANK+1)-st singular values of A, respectively.
By examining these values, one can confirm that the rank is well defined with respect to the chosen value of RCOND. The ratio SVAL(1)/SVAL(2) is an estimate of the condition number of R(1:RANK,1:RANK).
A=rand(5,3)*rand(3,7); [Q,R,JPVT,RANK,SVAL]=rankqr(A,%eps)
Slicot library routines MB03OD, ZB03OD.