QR decomposição
[Q,R]=qr(X [,"e"]) [Q,R,E]=qr(X [,"e"]) [Q,R,rk,E]=qr(X [,tol])
matriz de reais ou complexos
número real não-negativo
matriz quadrada ortogonal ou unitária
matriz com as mesmas dimensões de X
matriz de permutação
inteiro (posto QR de X
)
pproduz uma matriz triangular superior R
de
mesma dimensão que X
e uma matriz ortogonal
(unitária no caso de matriz de complexos) Q
tais
que X = Q*R
. [Q,R] = qr(X,"e")
produz um "economia de tamanho": Se X
é m-por-n
com m > n, então, apenas as primeiras n colunas de
Q
são computadas assim como as primeiras n linhas
de R
.
De Q*R = X
, segue que a k-ésima coluna da
matriz X
, é expressa como combinação linear das k
primeiras colunas de Q
(com coeficientes
R(1,k), ..., R(k,k)
). As k primeiras colunas de
Q
formam uma base ortogonal para o subespaço
gerado pelas k priemiras colunas de X
. Se a
coluna k
de X
(i.e.
X(:,k)
) é uma combinação linear das
p
primeiras colunas de X
,
então, as entradas de R(p+1,k), ..., R(k,k)
são
zeros. Neste caso, R
é trapezoidal superior. Se
X
tem posto rk
, as linhas
R(rk+1,:), R(rk+2,:), ...
são zeros.
produz uma matriz de permutação (de colunas)
E
, uma matriz triangular superior
R
com elementos na diagonal decrescentes e uma
matriz ortogonal (ou unitaria) Q
tais que
X*E = Q*R
. Se rk
é o posto de
X
, as rk
primeiras entradas ao
longo da diagonal de R
, i.e. R(1,1),
R(2,2), ..., R(rk,rk)
são todas diferentes de zero.
[Q,R,E] = qr(X,"e")
produz uma "economia de
tamanho": Se X
ié m-por-n com m > n, então,
apenas as n primeiras colunas de Q
são computadas
tanto quanto as n priemiras linhas de R
.
retorna rk
= estimativa do posto de
X
i.e. rk
é o número elementos
da diagonal de R
que são maiores que um dado
limiar tol
.
retorna rk
= estimativa do posto de
X
i.e. rk
é o número de
elementos da diagonal de R
que são maiores que
tol=R(1,1)*%eps*max(size(R))
. Veja
rankqr
para uma fatoração QR que revela o posto
usando o número de condicionamento de R
.
// fatoração QR, caso genérico // X é alta (posto cheio) X=rand(5,2);[Q,R]=qr(X); [Q'*X R] //X é gorda (posto cheio) X=rand(2,3);[Q,R]=qr(X); [Q'*X R] //coluna 4 de X é uma combinação linear das colunas 1 e 2: X=rand(8,5);X(:,4)=X(:,1)+X(:,2); [Q,R]=qr(X); R, R(:,4) //X tem posto 2, linhas 3 a $ de R são zero: X=rand(8,2)*rand(2,5);[Q,R]=qr(X); R //Avaliando o posto rk: pivotação por colunas ==> rk primeiras //As entradas diagonais de R são não-nulas: 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)) (span="gerado") | ![]() | ![]() |
A decomposição qr é baseada nas rotinas de Lapack DGEQRF, DGEQPF, DORGQR para as matrizes de reais ZGEQRF, ZGEQPF, ZORGQR para as matrizes de complexos.