qr_blocktoep — QR factorization of a block Toeplitz matrix
[Q,R] = qr_blocktoep(BC,BR)
M*r x s matrix
r x N*s matrix
orthonormal M*r x N*s matrix
upper triangular N*s x N*s matrix
The routine computes the QR factorization of the block Toeplitz matrix T=[T(0) T(1) T(2) ... T(N-1); T(-1) T(0) T(1) ... T(N-2) ; ... ; T(-M+1) T(-M+2) T(-M+3) ... T(abs(-M+N))]. The blocks T(-M+1),...,T(N-1) are r x s matrices, and BC=[T(0);T(-1);...;T(-M+1)] is the first block column and BR=[T(0),T(1),...,T(N-1)] is the first block row of T. We have to assume that the matrix [T'*T T';T eye()] is strongly regular (i.e., all leading minors are non-zero). The results Q and R are such that T=Q*R.
Note: it is a known problem with this algorithm that the computed Q may suffer from a loss of orthogonality. The matrix T should be well-conditioned with sufficiently large gaps between the singular values.
BC = (1:3)'; // first column BR = 1:2:9; // first row T = toeplitz(BC,BR); // corresponding Toeplitz matrix [Q,R] = qr_blocktoep(BC,BR); // perform QR factorization disp(clean(T-Q*R)); // show residual; should be zero disp(clean(Q*Q')); // check that Q is orthonormal; should be eye() disp(clean(R)); // R should be upper triangular