# rankqr

QR分解に基づく階数

## 呼び出し手順

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

## パラメータ

A

  実数または複素数の行列

RCOND

  `A`の実効階数(ランク)を定義するために使用される実数です. この階数は, `A`のピボット選択付きのQR分解の中の 最大の先頭の部分三角行列`R11`の次数として定義されます. その推定された条件数は < `1/RCOND` となります.

JPVT

  エントリの整数ベクトル, `JPVT(i)` が 0でない場合, `A`の`i`列目は `AP`の先頭と交換され, それ以外の場合,`i`は自由な列となります. 処理終了時に`JPVT(i) = k`の場合, `A*P`の`i`列目は, `A`の`k`列目となっています.

RANK

  `A`の実効ランク,すなわち, 部分行列`R11`の次数. これは,`A`の完全な直交分解における 部分行列`T1`の次数と同じです.

SVAL

  3つの要素を有する実数ベクトル;三角分解`R`の 特異値の推定値.

  `SVAL(1)` は, `R(1:RANK,1:RANK)`の最大特異値です;

  `SVAL(2)` は, `R(1:RANK,1:RANK)`の最小特異値です;

  `SVAL(3)` は, `RANK` < `MIN(M,N)`の場合, `R(1:RANK+1,1:RANK+1)`, そうでない場合, `R(1:RANK,1:RANK)`の最小特異値です.

## 説明

実数または複素数のM行N列一般行列`A`の(オプションで) ランク出力を伴なうQR分解を計算します. ランクが不完全になる可能性があり,実効ランクを条件数のインクリメンタル推定により 推定します.

このルーチンは列ピボット選択付きのQR分解を使用します:

    A * P = Q * R,  where  R = [ R11 R12 ],
                               [  0  R22 ]

`R11`は,条件数の推定値が`1/RCOND`未満となる 最大の部分行列として定義されます. `R11`, `RANK`の次数は, `A`の実効階数です.

三角分解が階数出力を伴なう場合 (これは先頭の列が健全(well-conditioned)な場合です), `SVAL(1)`は`A`の最大特異値の 推定値となり,`SVAL(2)` および `SVAL(3)`は,それぞれ `A`の `RANK`番目および`(RANK+1)`番目の 特異値の推定値となります.

これらの値を評価することにより,選択した`RCOND`の 値により階数が良好に定義されることを確認することができます. 比 `SVAL(1)/SVAL(2)` は, `R(1:RANK,1:RANK)`の条件数の推定値です.

## 例

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

## 参照

- qr
- rank

## 使用される関数

Slicot library routines MB03OD, ZB03OD.