Calculates QR decompositions of matrices.
Option
PRINT = string tokens |
Printed output required (orthogonalmatrix, uppertriangularmatrix); default * i.e. no printing |
|---|
Parameters
INMATRIX = matrices or symmetric matrices |
Matrices to be decomposed |
|---|---|
ORTHOGONALMATRIX = matrices |
Orthogonal matrix of each decomposition |
UPPERTRIANGULARMATRIX= matrices |
Upper-triangular matrix of each decomposition |
Description
The QR decomposition of a matrix is a decomposition of an m by n matrix A into an orthogonal matrix Q (i.e. Q′Q = I), and an n by m matrix R, so that A = Q R. If m ≥ n, the top n rows of R are triangular and the lower m–n rows contain zeros. If m < n, R is trapezoidal, i.e. it has the form (R1 | R2) where R1 is an upper triangular matrix and R2 is a rectangular matrix.
The matrix A to be composed is specified by the INMATRIX parameter, and the matrices Q and R can be saved using the ORTHOGONALMATRIX, and UPPERTRIANGULARMATRIX parameters, respectively.
The PRINT option allows you to print either of the components of the decomposition; by default, nothing is printed.
Option: PRINT.
Parameters: INMATRIX, ORTHOGONALMATRIX, UPPERTRIANGULARMATRIX.
Method
QRD uses subroutines F08AEF and F08AFF from the NAG Library.
See also
Directives: MATRIX, CALCULATE, NAG, FLRV, SVD.
Commands for: Calculations and manipulation,
Multivariate and cluster analysis.
Example
" Example QRD-1: NAG example for F08AEF "
MATRIX [ROWS=6; COLUMNS=4; VALUES=\
-0.57, -1.28, -0.39, 0.25,\
-1.93, 1.08, -0.31, -2.14,\
2.30, 0.24, 0.40, -0.35,\
-1.93, 0.64, -0.66, 0.08,\
0.15, 0.30, 0.15, -2.13,\
-0.02, 1.03, -1.43, 0.50] A
QRD A; ORTHOGONALMATRIX=Q; UPPERTRIANGULARMATRIX=R
PRINT Q,R
" verify that A = QR "
CALCULATE QR = Q *+ R
PRINT [RLWIDTH=2] A,QR; FIELD=9
" verify that Q'Q = I "
CALCULATE QQ = T(Q) *+ Q
PRINT QQ
" solve the linear least-squares problem:
minimize (Axi - Bi)**2: i=1,2 "
MATRIX [ROW=6; COLUMNS=2; VALUES=\
-3.15, 2.19,\
-0.11, -3.64,\
1.99, 0.57,\
-2.70, 8.23,\
0.26, -6.35,\
4.50, -1.48] B
CALCULATE C = T(Q) *+ B
& X = GINVERSE(R) *+ C
PRINT X
" check vs. ordinary regression "
VARIATE B1,B2; VALUES=B$[*;1,2]
& A1,A2,A3,A4; VALUES=A$[*;1...4]
MODEL B1,B2
FIT [PRINT=estimates; CONSTANT=omit] A1,A2,A3,A4