QR 分解
[Q,R]=qr(X [,"e"]) [Q,R,E]=qr(X [,"e"]) [Q,R,rk,E]=qr(X [,tol])
実数または複素数の行列
非負の実数
正方直交またはユニタリ行列
X
と同じ次元の行列
置換行列
整数 (X
のQRランク)
X= Q*R
となるような
X
と同じ次元の
上三角行列R
および直交(複素数の場合はユニタリ)行列
Q
を出力します.
[Q,R] = qr(X,"e")
は次にように
"エコノミーサイズ"で出力します:
X
が m行n列 (m > n)の場合,
Q
の最初のn列のみが
R
の最初のn行と同時に計算されます.
Q*R = X
から,
行列 X
のk番目の列は,
(係数 R(1,k), ..., R(k,k)
を用いて)
Q
の最初のk列の線形結合で表されます.
Q
の最初のk列は,X
の最初のk列
に広がる部分空間の直交基底を作成します.
X
の列k
(すなわち, X(:,k)
)
がX
の最初のp
列の線形結合の場合,
エントリR(p+1,k), ..., R(k,k)
は 0 となります.
この場合,R
は上台形となります.
X
がランクrk
を有する場合,
行 R(rk+1,:), R(rk+2,:), ...
は 0 となります.
X*E = Q*R
となるような
(列)置換行列E
,
降順の対角要素を有する上三角行列 R
,
直交(またはユニタリ)Q
を出力します.
rk
がX
のランクの場合,
R
の主対角項に沿った
最初のrk
個のエントリ,
すなわち,R(1,1), R(2,2), ..., R(rk,rk)
は
全て0以外となります.
[Q,R,E] = qr(X,"e")
は
"エコノミーサイズ"で出力します:
X
が m行n列 (m > n)の場合,
Q
の最初のn列のみが
R
の最初のn行と同時に計算されます.
rk
= X
のランクの推定値
を返します.
すなわち, rk
は,
指定した閾値tol
より大きな
R
の対角要素の数となります.
rk
= X
のランクの推定値
を返します.
すなわち,rk
は
tol=R(1,1)*%eps*max(size(R))
より大きな
R
の対角要素の数となります.
R
の条件数を用いる
ランク計算型のQR分解については,rankqr
を
参照してください.
// QR factorization, generic case // X is tall (full rank) X=rand(5,2);[Q,R]=qr(X); [Q'*X R] //X is fat (full rank) X=rand(2,3);[Q,R]=qr(X); [Q'*X R] //Column 4 of X is a linear combination of columns 1 and 2: X=rand(8,5);X(:,4)=X(:,1)+X(:,2); [Q,R]=qr(X); R, R(:,4) //X has rank 2, rows 3 to $ of R are zero: X=rand(8,2)*rand(2,5);[Q,R]=qr(X); R //Evaluating the rank rk: column pivoting ==> rk first //diagonal entries of R are non zero : A=rand(5,2)*rand(2,5); [Q,R,rk,E] = qr(A,1.d-10); norm(Q'*A-R) svd([A,Q(:,1:rk)]) //span(A) =span(Q(:,1:rk)) | ![]() | ![]() |
qr 分解はLapack ルーチン DGEQRF, DGEQPF, DORGQR (実数行列)および ZGEQRF, ZGEQPF, ZORGQR (複素数の場合) に基づいています.