hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_lapack_zgeqrf (f08as)

Purpose

nag_lapack_zgeqrf (f08as) computes the QRQR factorization of a complex mm by nn matrix.

Syntax

[a, tau, info] = f08as(a, 'm', m, 'n', n)
[a, tau, info] = nag_lapack_zgeqrf(a, 'm', m, 'n', n)

Description

nag_lapack_zgeqrf (f08as) forms the QRQR factorization of an arbitrary rectangular complex mm by nn matrix. No pivoting is performed.
If mnmn, the factorization is given by:
A = Q
(R)
0
,
A = Q R 0 ,
where RR is an nn by nn upper triangular matrix (with real diagonal elements) and QQ is an mm by mm unitary matrix. It is sometimes more convenient to write the factorization as
A =
(Q1Q2)
(R)
0
,
A = Q1 Q2 R 0 ,
which reduces to
A = Q1R ,
A = Q1R ,
where Q1Q1 consists of the first nn columns of QQ, and Q2Q2 the remaining mnm-n columns.
If m < nm<n, RR is trapezoidal, and the factorization can be written
A = Q
(R1R2)
,
A = Q R1 R2 ,
where R1R1 is upper triangular and R2R2 is rectangular.
The matrix QQ is not formed explicitly but is represented as a product of min (m,n)min(m,n) elementary reflectors (see the F08 Chapter Introduction for details). Functions are provided to work with QQ in this representation (see Section [Further Comments]).
Note also that for any k < nk<n, the information returned in the first kk columns of the array a represents a QRQR factorization of the first kk columns of the original matrix AA.

References

Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

Parameters

Compulsory Input Parameters

1:     a(lda, : :) – complex array
The first dimension of the array a must be at least max (1,m)max(1,m)
The second dimension of the array must be at least max (1,n)max(1,n)
The mm by nn matrix AA.

Optional Input Parameters

1:     m – int64int32nag_int scalar
Default: The first dimension of the array a.
mm, the number of rows of the matrix AA.
Constraint: m0m0.
2:     n – int64int32nag_int scalar
Default: The second dimension of the array a.
nn, the number of columns of the matrix AA.
Constraint: n0n0.

Input Parameters Omitted from the MATLAB Interface

lda work lwork

Output Parameters

1:     a(lda, : :) – complex array
The first dimension of the array a will be max (1,m)max(1,m)
The second dimension of the array will be max (1,n)max(1,n)
ldamax (1,m)ldamax(1,m).
If mnmn, the elements below the diagonal store details of the unitary matrix QQ and the upper triangle stores the corresponding elements of the nn by nn upper triangular matrix RR.
If m < nm<n, the strictly lower triangular part stores details of the unitary matrix QQ and the remaining elements store the corresponding elements of the mm by nn upper trapezoidal matrix RR.
The diagonal elements of RR are real.
2:     tau( : :) – complex array
Note: the dimension of the array tau must be at least max (1,min (m,n))max(1,min(m,n)).
Further details of the unitary matrix QQ.
3:     info – int64int32nag_int scalar
info = 0info=0 unless the function detects an error (see Section [Error Indicators and Warnings]).

Error Indicators and Warnings

  info = iinfo=-i
If info = iinfo=-i, parameter ii had an illegal value on entry. The parameters are numbered as follows:
1: m, 2: n, 3: a, 4: lda, 5: tau, 6: work, 7: lwork, 8: info.
It is possible that info refers to a parameter that is omitted from the MATLAB interface. This usually indicates that an error in one of the other input parameters has caused an incorrect value to be inferred.

Accuracy

The computed factorization is the exact factorization of a nearby matrix (A + E)(A+E), where
E2 = O(ε) A2 ,
E2 = O(ε) A2 ,
and εε is the machine precision.

Further Comments

The total number of real floating point operations is approximately (8/3) n2 (3mn) 83 n2 (3m-n)  if mnmn or (8/3) m2 (3nm) 83 m2 (3n-m)  if m < nm<n.
To form the unitary matrix QQ nag_lapack_zgeqrf (f08as) may be followed by a call to nag_lapack_zungqr (f08at):
[a, info] = f08at(a, tau);
but note that the second dimension of the array a must be at least m, which may be larger than was required by nag_lapack_zgeqrf (f08as).
When mnmn, it is often only the first nn columns of QQ that are required, and they may be formed by the call:
[a, info] = f08at(a(:,1:n), tau);
To apply QQ to an arbitrary complex rectangular matrix CC, nag_lapack_zgeqrf (f08as) may be followed by a call to nag_lapack_zunmqr (f08au). For example,
[c, info] = f08au('Left', 'Conjugate Transpose', a, tau, c);
forms C = QHCC=QHC, where CC is mm by pp.
To compute a QRQR factorization with column pivoting, use nag_lapack_zgeqpf (f08bs).
The real analogue of this function is nag_lapack_dgeqrf (f08ae).

Example

function nag_lapack_zgeqrf_example
a = [ 0.96 - 0.81i,  -0.03 + 0.96i,  -0.91 + 2.06i, ...
      -0.05 + 0.41i;
      -0.98 + 1.98i,  -1.2 + 0.19i,  -0.66 + 0.42i, ...
      -0.81 + 0.56i;
      0.62 - 0.46i,  1.01 + 0.02i,  0.63 - 0.17i, ...
      -1.11 + 0.6i;
      -0.37 + 0.38i,  0.19 - 0.54i,  -0.98 - 0.36i, ...
      0.22 - 0.2i;
      0.83 + 0.51i,  0.2 + 0.01i,  -0.17 - 0.46i, ...
      1.47 + 1.59i;
      1.08 - 0.28i,  0.2 - 0.12i,  -0.07 + 1.23i, ...
      0.26 + 0.26i];
b = [ -2.09 + 1.93i,  3.26 - 2.70i;
      3.34 - 3.53i,  -6.22 + 1.16i;
      -4.94 - 2.04i,  7.94 - 3.13i;
      0.17 + 4.23i,  1.04 - 4.26i;
      -5.19 + 3.63i,  -2.31 - 2.12i;
      0.98 + 2.53i,  -1.39 - 4.05i];
% Compute the QR factorization of A
[a, tau, info] = nag_lapack_zgeqrf(a);

% Compute c = [c1;C2] = (q**h)*b, storing the result in b
[b, info] = nag_lapack_zunmqr('Left', 'Conjugate transpose', a, tau, b);

% Compute least-squares solutions by backsubstitution in r*x = c1
[bOut, info] = nag_lapack_ztrtrs('Upper', 'No transpose', 'Non-Unit', a(1:4,:), b(1:4,:));

if (info > 0)
  fprintf('\nThe upper triangular factor, R, of A is singular,\n');
  fprintf('the least squares solution could not be computed');
else
  % Print least-squares solutions
  fprintf('\nLeast-squares solution(s)\n');
  disp(bOut);

  fprintf('Square root(s) of the residual sum(s) of squares\n');
  for i=1:2
    fprintf('%8.3f ',norm(b(5:6,i)));
  end
  fprintf('\n');
end
 

Least-squares solution(s)
  -0.5044 - 1.2179i   0.7629 + 1.4529i
  -2.4281 + 2.8574i   5.1570 - 3.6089i
   1.4872 - 2.1955i  -2.6518 + 2.1203i
   0.4537 + 2.6904i  -2.7606 + 0.3318i

Square root(s) of the residual sum(s) of squares
   0.069    0.187 

function f08as_example
a = [ 0.96 - 0.81i,  -0.03 + 0.96i,  -0.91 + 2.06i, ...
      -0.05 + 0.41i;
      -0.98 + 1.98i,  -1.2 + 0.19i,  -0.66 + 0.42i, ...
      -0.81 + 0.56i;
      0.62 - 0.46i,  1.01 + 0.02i,  0.63 - 0.17i, ...
      -1.11 + 0.6i;
      -0.37 + 0.38i,  0.19 - 0.54i,  -0.98 - 0.36i, ...
      0.22 - 0.2i;
      0.83 + 0.51i,  0.2 + 0.01i,  -0.17 - 0.46i, ...
      1.47 + 1.59i;
      1.08 - 0.28i,  0.2 - 0.12i,  -0.07 + 1.23i, ...
      0.26 + 0.26i];
b = [ -2.09 + 1.93i,  3.26 - 2.70i;
      3.34 - 3.53i,  -6.22 + 1.16i;
      -4.94 - 2.04i,  7.94 - 3.13i;
      0.17 + 4.23i,  1.04 - 4.26i;
      -5.19 + 3.63i,  -2.31 - 2.12i;
      0.98 + 2.53i,  -1.39 - 4.05i];
% Compute the QR factorization of A
[a, tau, info] = f08as(a);

% Compute c = [c1;C2] = (q**h)*b, storing the result in b
[b, info] = f08au('Left', 'Conjugate transpose', a, tau, b);

% Compute least-squares solutions by backsubstitution in r*x = c1
[bOut, info] = f07ts('Upper', 'No transpose', 'Non-Unit', a(1:4,:), b(1:4,:));

if (info > 0)
  fprintf('\nThe upper triangular factor, R, of A is singular,\n');
  fprintf('the least squares solution could not be computed');
else
  % Print least-squares solutions
  fprintf('\nLeast-squares solution(s)\n');
  disp(bOut);

  fprintf('Square root(s) of the residual sum(s) of squares\n');
  for i=1:2
    fprintf('%8.3f ',norm(b(5:6,i)));
  end
  fprintf('\n');
end
 

Least-squares solution(s)
  -0.5044 - 1.2179i   0.7629 + 1.4529i
  -2.4281 + 2.8574i   5.1570 - 3.6089i
   1.4872 - 2.1955i  -2.6518 + 2.1203i
   0.4537 + 2.6904i  -2.7606 + 0.3318i

Square root(s) of the residual sum(s) of squares
   0.069    0.187 


PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013