rankqr

Scilab Function
Last update : April 1999

rankqr - rank revealing QR factorization

### Calling Sequence

  `[Q,R,JPVT,RANK,SVAL]=rankqr(A, [RCOND,JPVT])`

### Parameters

- `A` : real or complex matrix
- `RCOND` : real number used to determine the effective rank of `A` , which is defined as the order of the largest leading triangular submatrix `R11` in the QR factorization with pivoting of`A` , whose estimated condition number < `1/RCOND` .
- `JPVT`

  : 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` .

- `RANK` : the effective rank of `A` , i.e., the order of the submatrix `R11` . This is the same as the order of the submatrix `T1` in the complete orthogonal factorization of `A` .
- `SVAL` : real vector with 3 components; The estimates of some of the singular values of the triangular factor `R` .

  `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.

### Description

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)` .

### Examples

    A=rand(5,3)*rand(3,7);
    [Q,R,JPVT,RANK,SVAL]=rankqr(A,%eps)

### See Also

`qr` , `rank` ,

### Used Function

Slicot library routines MB03OD, ZB03OD.