Man page - unhr_col(3)
Packages contas this manual
- tftri(3)
- tgsyl(3)
- lasd_comp_grp(3)
- gesv_mixed(3)
- posv_driver_grp(3)
- lasrt(3)
- ilatrans(3)
- blas2_banded(3)
- gbsvxx(3)
- lauum(3)
- hbgvx(3)
- gelq_comp2(3)
- geqrt3(3)
- laed8(3)
- ppcon(3)
- herfsx(3)
- hesv(3)
- larrf(3)
- ungbr(3)
- hetri2x(3)
- larfb_gett(3)
- laqz_group(3)
- lassq(3)
- geev_comp_grp(3)
- lasd6(3)
- heevd(3)
- ggbal(3)
- tbsv(3)
- gbrfs(3)
- gels_aux_grp(3)
- blas3_grp(3)
- hetrs_aa(3)
- trsen(3)
- gbsv_driver(3)
- gecs_comp_grp(3)
- lanhs(3)
- tfsm(3)
- gesv_driver(3)
- stegr(3)
- gels_top(3)
- lanv2(3)
- ieeeck(3)
- solve_top(3)
- hpgv(3)
- gels(3)
- hetrd_2stage(3)
- gels_driver_grp(3)
- hetrf_rk(3)
- heev(3)
- potri(3)
- hprfs(3)
- blas2_full(3)
- geqrfp(3)
- tfsv_comp(3)
- pbtf2(3)
- hetrd_hb2st(3)
- laqr3(3)
- langt(3)
- gghd3(3)
- unbdb3(3)
- hpsvx(3)
- hpevx(3)
- hetrs_aa_2stage(3)
- geqrt2(3)
- gesv_comp(3)
- tpmv(3)
- blas_top(3)
- gebak(3)
- larrd(3)
- gemmtr(3)
- lamtsqr(3)
- iparam2stage(3)
- posv_driver(3)
- tgsna(3)
- hetrd_he2hb(3)
- laexc(3)
- lasq4(3)
- gelqf(3)
- unghr(3)
- posv_comp_grp(3)
- larz(3)
- asum(3)
- uncsd2by1(3)
- ggevx(3)
- lanhe(3)
- lsamen(3)
- hbgv(3)
- lamc3(3)
- gesvd_comp_grp(3)
- tbcon(3)
- geql2(3)
- lascl2(3)
- porfsx(3)
- laed3(3)
- pbsv(3)
- blas2_grp(3)
- tplqt2(3)
- laruv(3)
- lahef_rook(3)
- langb(3)
- unm22(3)
- laqgb(3)
- laqr4(3)
- tfttr(3)
- lagtf(3)
- unbdb(3)
- pftrf(3)
- pbtrs(3)
- bdsdc(3)
- ung2r(3)
- hetf2_rk(3)
- unbdb2(3)
- hesvxx(3)
- lag2(3)
- lals0(3)
- scal(3)
- la_constants(3)
- ladiv(3)
- laqhb(3)
- hsein(3)
- gtsv_driver(3)
- hetrf_aa(3)
- hesv_rk(3)
- heevd_2stage(3)
- stevr(3)
- hbev_driver2(3)
- la_herpvgrw(3)
- hpsv_driver(3)
- larfgp(3)
- la_heamv(3)
- bbcsd(3)
- laqp2(3)
- getrf(3)
- gemlq(3)
- getsqrhrt(3)
- gbcon(3)
- tplq_comp_grp(3)
- trrfs(3)
- larre(3)
- hpmv(3)
- hpsv(3)
- gerfsx(3)
- potrs(3)
- md__r_e_a_d_m_e(3)
- posv_comp(3)
- lartgs(3)
- hesv_comp_aasen2(3)
- hbevx(3)
- lasda(3)
- hegv_2stage(3)
- geqr(3)
- gelsy(3)
- gelq_comp1(3)
- laebz(3)
- ungqr(3)
- hptri(3)
- tpttr(3)
- ungql(3)
- la_hercond(3)
- unbdb5(3)
- getsqr_comp_grp(3)
- aux_grp(3)
- hesvx(3)
- gges(3)
- ggrqf(3)
- reflector_aux_grp(3)
- heev_comp_grp(3)
- lacpy(3)
- lalsa(3)
- unmql(3)
- hesv_comp_v3(3)
- lasr(3)
- lacon(3)
- latdf(3)
- hesv_comp_grp(3)
- lalsd(3)
- hetf2(3)
- stebz(3)
- lascl(3)
- heev_top(3)
- laqr1(3)
- trevc3(3)
- hegv_driver(3)
- ungtsqr(3)
- hbev_comp(3)
- bdsvd_driver(3)
- hegv(3)
- gttrf(3)
- hegv_driver_grp(3)
- gttrs(3)
- hpgvd(3)
- pbsvx(3)
- gges3(3)
- larrc(3)
- lasd4(3)
- pbrfs(3)
- larfx(3)
- heevr(3)
- gebal(3)
- laqz1(3)
- hbtrd(3)
- latps(3)
- potrf(3)
- pttrs(3)
- lasd_comp2(3)
- laqz4(3)
- gerq2(3)
- gesvd_aux(3)
- gerfs(3)
- gbrfsx(3)
- lanht(3)
- ilaenv2stage(3)
- latrd(3)
- ilaenv(3)
- hbev_2stage(3)
- trmv(3)
- larft(3)
- tprfs(3)
- geev(3)
- geqp3(3)
- ungtr(3)
- gtts2(3)
- posv_mixed(3)
- tgsen(3)
- gelqt3(3)
- scalar_grp(3)
- pftrs(3)
- gemqr(3)
- ptcon(3)
- lange(3)
- gghrd(3)
- pptrs(3)
- steqr(3)
- geev_top(3)
- larfy(3)
- heevx_2stage(3)
- upgtr(3)
- hpcon(3)
- gelst(3)
- hesv_rook(3)
- laqr_group(3)
- svd_driver_grp(3)
- larnv(3)
- rot_aux_grp(3)
- larrb(3)
- trsv(3)
- ppsv_driver(3)
- pbsv_driver(3)
- hegv_comp_grp(3)
- la_lin_berr(3)
- bdsvdx(3)
- larcm(3)
- gehd2(3)
- unm2r(3)
- rotm(3)
- la_gbrfsx_extended(3)
- nrm2(3)
- lar1v(3)
- latbs(3)
- labrd(3)
- geesx(3)
- roundup_lwork(3)
- lamc5(3)
- lasd3(3)
- tpttf(3)
- hbevd_2stage(3)
- syconvf(3)
- solve_aux_grp(3)
- params_grp(3)
- porfs(3)
- lasq1(3)
- pteqr(3)
- hetrs(3)
- heswapr(3)
- stev_comp_grp(3)
- ggqrf(3)
- larscl2(3)
- la_gercond(3)
- hpr(3)
- axpy(3)
- her(3)
- geqr_comp3(3)
- unbdb4(3)
- blas2_like_grp(3)
- larra(3)
- unitary_top(3)
- ppequ(3)
- tpmlqt(3)
- gebrd(3)
- unml2(3)
- laln2(3)
- hetf2_rook(3)
- gecon(3)
- blas1_grp(3)
- lartgp(3)
- lasq2(3)
- ppsv(3)
- hegvd(3)
- la_gbrcond(3)
- iladiag(3)
- tgsja(3)
- potf2(3)
- getsls(3)
- heev_comp(3)
- hfrk(3)
- pbequ(3)
- ggglm(3)
- uncsd(3)
- pfsv_driver(3)
- tpqrt2(3)
- hb2st_kernels(3)
- unhr_col(3)
- hpevd(3)
- geqr_comp2(3)
- la_porfsx_extended(3)
- ung2l(3)
- hegs2(3)
- larr_comp_grp(3)
- hpsv_comp(3)
- gesvj(3)
- gemlqt(3)
- ungr2(3)
- ptrfs(3)
- laic1(3)
- trsv_comp(3)
- lasy2(3)
- hgeqz(3)
- getrs(3)
- laed0(3)
- ppsv_comp(3)
- geequb(3)
- hbmv(3)
- latrs(3)
- lasv2(3)
- unmrq(3)
- geqr_comp1(3)
- larmm(3)
- gehrd(3)
- blas1_like_grp(3)
- laqr2(3)
- unmr2(3)
- hecon_3(3)
- gemm(3)
- abs1(3)
- geqlf(3)
- ptsv_comp(3)
- blas_like_top(3)
- geqrt(3)
- hpgv_driver(3)
- ppsvx(3)
- heev_driver_grp(3)
- lagv2(3)
- tptri(3)
- lahef_aa(3)
- poequ(3)
- laqr5(3)
- lanhb(3)
- second(3)
- laqps(3)
- lasq5(3)
- ggev_comp_grp(3)
- gebd2(3)
- hesv_driver(3)
- hetri_rook(3)
- lasd8(3)
- gtsvx(3)
- lasq6(3)
- lahr2(3)
- hpr2(3)
- hetri_3(3)
- lantb(3)
- gesvdq(3)
- la_porpvgrw(3)
- laesy(3)
- laqr0(3)
- lahef(3)
- copy(3)
- unbdb1(3)
- tgexc(3)
- latsqr(3)
- rscl(3)
- larrk(3)
- hetd2(3)
- la_gbrpvgrw(3)
- blast_aux(3)
- ptsv_driver(3)
- lanhf(3)
- iamax(3)
- gesvdx(3)
- pfsv_comp(3)
- hbevx_2stage(3)
- geqr_comp4(3)
- hbevd(3)
- tgsy2(3)
- gbtrs(3)
- laqz2(3)
- hesv_comp_v2(3)
- tbmv(3)
- gemqrt(3)
- ilauplo(3)
- hetrf_aa_2stage(3)
- ggqr_comp_grp(3)
- gbtf2(3)
- pfsv(3)
- geqr2(3)
- gtrfs(3)
- laev2(3)
- hbgv_driver(3)
- rotg(3)
- unmrz(3)
- ungl2(3)
- lartv(3)
- ggrq_comp_grp(3)
- stein(3)
- ptsvx(3)
- blas0_like_grp(3)
- gesvd(3)
- pptri(3)
- ilalc(3)
- larfb(3)
- hpgst(3)
- gedmd(3)
- hptrs(3)
- gbsv_comp(3)
- stedc(3)
- larzt(3)
- gerq_comp_grp(3)
- xerbla_grp(3)
- ilaprec(3)
- unmlq(3)
- lae2(3)
- laswlq(3)
- rot(3)
- hegst(3)
- getrf2(3)
- pbsv_comp(3)
- upmtr(3)
- hesv_aa_driver(3)
- lapy2(3)
- lantp(3)
- larrj(3)
- geqpf_comp_grp(3)
- pbcon(3)
- gelq_comp3(3)
- stev(3)
- lamswlq(3)
- laswp(3)
- trti2(3)
- unmbr(3)
- pprfs(3)
- laed4(3)
- gerqf(3)
- trtrs(3)
- herfs(3)
- pstrf(3)
- trsv_comp_grp(3)
- hetri_3x(3)
- tpcon(3)
- heevr_2stage(3)
- hemv(3)
- larrv(3)
- ggev(3)
- launhr_col_getrfnp2(3)
- gesvx(3)
- lagts(3)
- la_gbamv(3)
- laed9(3)
- gtsv_comp(3)
- heevx(3)
- hecon_rook(3)
- ggesx(3)
- her2(3)
- trttf(3)
- trcon(3)
- gesdd(3)
- ggsvp3(3)
- hpev(3)
- tplqt(3)
- lacp2(3)
- la_xisnan_la_isnan(3)
- hptrd(3)
- ggsvd_driver_grp(3)
- dot(3)
- blas3_like_grp(3)
- lasd0(3)
- unm2l(3)
- tzrzf(3)
- lauu2(3)
- syconv(3)
- pttrf(3)
- lamc4(3)
- labad(3)
- syconvf_rook(3)
- unbdb6(3)
- geqr_comp_grp(3)
- gbsvx(3)
- gbequ(3)
- lamrg(3)
- ilalr(3)
- tgevc(3)
- lamch(3)
- gees(3)
- gtcon(3)
- gbbrd(3)
- lasd2(3)
- stemr(3)
- lartg(3)
- lasdt(3)
- sterf(3)
- tprfb(3)
- unmhr(3)
- gbmv(3)
- stev_driver(3)
- hetrs_3(3)
- laed5(3)
- lahqr(3)
- xerbla_array(3)
- lasq3(3)
- gsvj1(3)
- trsna(3)
- tpqrt(3)
- unmtr(3)
- laqhp(3)
- disna(3)
- lahef_rk(3)
- ilaver(3)
- lags2(3)
- lasd7(3)
- laqhe(3)
- gejsv(3)
- gtsv(3)
- gbsv(3)
- lasdq(3)
- heev_2stage(3)
- laisnan(3)
- lacrt(3)
- geqr2p(3)
- geequ(3)
- larfg(3)
- laneg(3)
- gesc2(3)
- lapll(3)
- trevc(3)
- lamc1(3)
- laed1(3)
- las2(3)
- posvx(3)
- lsame(3)
- trttp(3)
- la_wwaddw(3)
- unmqr(3)
- lacrm(3)
- hetrs_rook(3)
- tbsv_comp(3)
- lamc2(3)
- hbgst(3)
- getf2(3)
- hpgvx(3)
- la_geamv(3)
- ggsvd_comp_grp(3)
- heequb(3)
- gelsd(3)
- gelq(3)
- hbgvd(3)
- pocon(3)
- laqz0(3)
- lacn2(3)
- geswlq_comp_grp(3)
- gbequb(3)
- hetrs2(3)
- laqz3(3)
- pptrf(3)
- ggbak(3)
- tpmqrt(3)
- laein(3)
- lagtm(3)
- sum1(3)
- trtri(3)
- ungtsqr_row(3)
- hetri(3)
- rot_comp(3)
- larf(3)
- gemv(3)
- la_herfsx_extended(3)
- lasq_comp_grp(3)
- laeda(3)
- laed_comp2(3)
- latrz(3)
- trsyl(3)
- svd_top(3)
- hseqr(3)
- xerbla(3)
- posvxx(3)
- rotmg(3)
- lasd1(3)
- imax1(3)
- aux_top(3)
- tpsv(3)
- trexc(3)
- tgex2(3)
- hesv_comp_v1(3)
- geql_comp_grp(3)
- swap(3)
- hbev_driver(3)
- poequb(3)
- ggls_driver_grp(3)
- lar2v(3)
- unmr3(3)
- ggev_driver_grp(3)
- tfttp(3)
- gesv_comp_grp(3)
- bdsqr(3)
- hpev_driver(3)
- ggev3(3)
- gsvj0(3)
- la_gerpvgrw(3)
- blas2_packed(3)
- potrf2(3)
- stevx(3)
- lapy3(3)
- gbtrf(3)
- gelq2(3)
- hetrf_rook(3)
- gesvd_driver(3)
- trsyl3(3)
- pbstf(3)
- laed_comp_grp(3)
- set_grp(3)
- la_transtype(3)
- hpev_comp(3)
- geqrf(3)
- posv(3)
- tptrs(3)
- lantr(3)
- lacgv(3)
- iparmq(3)
- laed6(3)
- ungrq(3)
- hptrf(3)
- ger(3)
- hbev(3)
- lapmt(3)
- ptsv(3)
- lanhp(3)
- larzb(3)
- tbtrs(3)
- stevd(3)
- gesv_driver_grp(3)
- laed2(3)
- gerz_comp_grp(3)
- getri(3)
- hesv_driver_grp(3)
- geevx(3)
- laqge(3)
- latrs3(3)
- largv(3)
- ggsvd3(3)
- hesv_comp_aasen(3)
- tpsv_comp(3)
- la_porcond(3)
- tpqr_comp_grp(3)
- gelqt(3)
- hesv_aa_2stage(3)
- gelq_comp_grp(3)
- pftri(3)
- unglq(3)
- laed7(3)
- pbtrf(3)
- lapmr(3)
- heev_driver(3)
- la_gerfsx_extended(3)
- launhr_col_getrfnp(3)
- hetrd(3)
- larrr(3)
- geev_driver_grp(3)
- hecon(3)
- gesvxx(3)
- lasd5(3)
- gelss(3)
- laset(3)
- pstf2(3)
- tbrfs(3)
- norm_grp(3)
- ptts2(3)
- getc2(3)
- gglse(3)
- hesv_aa(3)
- heev_driver2(3)
- hegvx(3)
- hetri2(3)
- laqtr(3)
- gesv(3)
- lapack_top(3)
- hetrf(3)
apt-get install liblapack-doc
Manual
| unhr_col(3) | LAPACK | unhr_col(3) |
NAME
unhr_col - {un,or}hr_col: Householder reconstruction
SYNOPSIS
Functions
subroutine cunhr_col (m, n, nb, a, lda, t, ldt, d, info)
CUNHR_COL subroutine dorhr_col (m, n, nb, a, lda, t, ldt, d,
info)
DORHR_COL subroutine sorhr_col (m, n, nb, a, lda, t, ldt, d,
info)
SORHR_COL subroutine zunhr_col (m, n, nb, a, lda, t, ldt, d,
info)
ZUNHR_COL
Detailed Description
Function Documentation
subroutine cunhr_col (integer m, integer n, integer nb, complex, dimension( lda, * ) a, integer lda, complex, dimension( ldt, * ) t, integer ldt, complex, dimension( * ) d, integer info)
CUNHR_COL
Purpose:
CUNHR_COL takes an M-by-N complex matrix Q_in with orthonormal columns
as input, stored in A, and performs Householder Reconstruction (HR),
i.e. reconstructs Householder vectors V(i) implicitly representing
another M-by-N matrix Q_out, with the property that Q_in = Q_out*S,
where S is an N-by-N diagonal matrix with diagonal entries
equal to +1 or -1. The Householder vectors (columns V(i) of V) are
stored in A on output, and the diagonal entries of S are stored in D.
Block reflectors are also returned in T
(same output format as CGEQRT).
Parameters
M is INTEGER
The number of rows of the matrix A. M >= 0.
N
N is INTEGER
The number of columns of the matrix A. M >= N >= 0.
NB
NB is INTEGER
The column block size to be used in the reconstruction
of Householder column vector blocks in the array A and
corresponding block reflectors in the array T. NB >= 1.
(Note that if NB > N, then N is used instead of NB
as the column block size.)
A
A is COMPLEX array, dimension (LDA,N)
On entry:
The array A contains an M-by-N orthonormal matrix Q_in,
i.e the columns of A are orthogonal unit vectors.
On exit:
The elements below the diagonal of A represent the unit
lower-trapezoidal matrix V of Householder column vectors
V(i). The unit diagonal entries of V are not stored
(same format as the output below the diagonal in A from
CGEQRT). The matrix T and the matrix V stored on output
in A implicitly define Q_out.
The elements above the diagonal contain the factor U
of the 'modified' LU-decomposition:
Q_in - ( S ) = V * U
( 0 )
where 0 is a (M-N)-by-(M-N) zero matrix.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,M).
T
T is COMPLEX array,
dimension (LDT, N)
Let NOCB = Number_of_output_col_blocks
= CEIL(N/NB)
On exit, T(1:NB, 1:N) contains NOCB upper-triangular
block reflectors used to define Q_out stored in compact
form as a sequence of upper-triangular NB-by-NB column
blocks (same format as the output T in CGEQRT).
The matrix T and the matrix V stored on output in A
implicitly define Q_out. NOTE: The lower triangles
below the upper-triangular blocks will be filled with
zeros. See Further Details.
LDT
LDT is INTEGER
The leading dimension of the array T.
LDT >= max(1,min(NB,N)).
D
D is COMPLEX array, dimension min(M,N).
The elements can be only plus or minus one.
D(i) is constructed as D(i) = -SIGN(Q_in_i(i,i)), where
1 <= i <= min(M,N), and Q_in_i is Q_in after performing
i-1 steps of “modified” Gaussian elimination.
See Further Details.
INFO
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
Further Details:
The computed M-by-M unitary factor Q_out is defined implicitly as
a product of unitary matrices Q_out(i). Each Q_out(i) is stored in
the compact WY-representation format in the corresponding blocks of
matrices V (stored in A) and T.
The M-by-N unit lower-trapezoidal matrix V stored in the M-by-N
matrix A contains the column vectors V(i) in NB-size column
blocks VB(j). For example, VB(1) contains the columns
V(1), V(2), ... V(NB). NOTE: The unit entries on
the diagonal of Y are not stored in A.
The number of column blocks is
NOCB = Number_of_output_col_blocks = CEIL(N/NB)
where each block is of order NB except for the last block, which
is of order LAST_NB = N - (NOCB-1)*NB.
For example, if M=6, N=5 and NB=2, the matrix V is
V = ( VB(1), VB(2), VB(3) ) =
= ( 1 )
( v21 1 )
( v31 v32 1 )
( v41 v42 v43 1 )
( v51 v52 v53 v54 1 )
( v61 v62 v63 v54 v65 )
For each of the column blocks VB(i), an upper-triangular block
reflector TB(i) is computed. These blocks are stored as
a sequence of upper-triangular column blocks in the NB-by-N
matrix T. The size of each TB(i) block is NB-by-NB, except
for the last block, whose size is LAST_NB-by-LAST_NB.
For example, if M=6, N=5 and NB=2, the matrix T is
T = ( TB(1), TB(2), TB(3) ) =
= ( t11 t12 t13 t14 t15 )
( t22 t24 )
The M-by-M factor Q_out is given as a product of NOCB
unitary M-by-M matrices Q_out(i).
Q_out = Q_out(1) * Q_out(2) * ... * Q_out(NOCB),
where each matrix Q_out(i) is given by the WY-representation
using corresponding blocks from the matrices V and T:
Q_out(i) = I - VB(i) * TB(i) * (VB(i))**T,
where I is the identity matrix. Here is the formula with matrix
dimensions:
Q(i){M-by-M} = I{M-by-M} -
VB(i){M-by-INB} * TB(i){INB-by-INB} * (VB(i))**T {INB-by-M},
where INB = NB, except for the last block NOCB
for which INB=LAST_NB.
=====
NOTE:
=====
If Q_in is the result of doing a QR factorization
B = Q_in * R_in, then:
B = (Q_out*S) * R_in = Q_out * (S * R_in) = Q_out * R_out.
So if one wants to interpret Q_out as the result
of the QR factorization of B, then the corresponding R_out
should be equal to R_out = S * R_in, i.e. some rows of R_in
should be multiplied by -1.
For the details of the algorithm, see [1].
[1] 'Reconstructing Householder vectors from tall-skinny QR',
G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen,
E. Solomonik, J. Parallel Distrib. Comput.,
vol. 85, pp. 3-31, 2015.
Author
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
November 2019, Igor Kozachenko,
Computer Science Division,
University of California, Berkeley
subroutine dorhr_col (integer m, integer n, integer nb, double precision, dimension( lda, * ) a, integer lda, double precision, dimension( ldt, * ) t, integer ldt, double precision, dimension( * ) d, integer info)
DORHR_COL
Purpose:
DORHR_COL takes an M-by-N real matrix Q_in with orthonormal columns
as input, stored in A, and performs Householder Reconstruction (HR),
i.e. reconstructs Householder vectors V(i) implicitly representing
another M-by-N matrix Q_out, with the property that Q_in = Q_out*S,
where S is an N-by-N diagonal matrix with diagonal entries
equal to +1 or -1. The Householder vectors (columns V(i) of V) are
stored in A on output, and the diagonal entries of S are stored in D.
Block reflectors are also returned in T
(same output format as DGEQRT).
Parameters
M is INTEGER
The number of rows of the matrix A. M >= 0.
N
N is INTEGER
The number of columns of the matrix A. M >= N >= 0.
NB
NB is INTEGER
The column block size to be used in the reconstruction
of Householder column vector blocks in the array A and
corresponding block reflectors in the array T. NB >= 1.
(Note that if NB > N, then N is used instead of NB
as the column block size.)
A
A is DOUBLE PRECISION array, dimension (LDA,N)
On entry:
The array A contains an M-by-N orthonormal matrix Q_in,
i.e the columns of A are orthogonal unit vectors.
On exit:
The elements below the diagonal of A represent the unit
lower-trapezoidal matrix V of Householder column vectors
V(i). The unit diagonal entries of V are not stored
(same format as the output below the diagonal in A from
DGEQRT). The matrix T and the matrix V stored on output
in A implicitly define Q_out.
The elements above the diagonal contain the factor U
of the 'modified' LU-decomposition:
Q_in - ( S ) = V * U
( 0 )
where 0 is a (M-N)-by-(M-N) zero matrix.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,M).
T
T is DOUBLE PRECISION array,
dimension (LDT, N)
Let NOCB = Number_of_output_col_blocks
= CEIL(N/NB)
On exit, T(1:NB, 1:N) contains NOCB upper-triangular
block reflectors used to define Q_out stored in compact
form as a sequence of upper-triangular NB-by-NB column
blocks (same format as the output T in DGEQRT).
The matrix T and the matrix V stored on output in A
implicitly define Q_out. NOTE: The lower triangles
below the upper-triangular blocks will be filled with
zeros. See Further Details.
LDT
LDT is INTEGER
The leading dimension of the array T.
LDT >= max(1,min(NB,N)).
D
D is DOUBLE PRECISION array, dimension min(M,N).
The elements can be only plus or minus one.
D(i) is constructed as D(i) = -SIGN(Q_in_i(i,i)), where
1 <= i <= min(M,N), and Q_in_i is Q_in after performing
i-1 steps of “modified” Gaussian elimination.
See Further Details.
INFO
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
Further Details:
The computed M-by-M orthogonal factor Q_out is defined implicitly as
a product of orthogonal matrices Q_out(i). Each Q_out(i) is stored in
the compact WY-representation format in the corresponding blocks of
matrices V (stored in A) and T.
The M-by-N unit lower-trapezoidal matrix V stored in the M-by-N
matrix A contains the column vectors V(i) in NB-size column
blocks VB(j). For example, VB(1) contains the columns
V(1), V(2), ... V(NB). NOTE: The unit entries on
the diagonal of Y are not stored in A.
The number of column blocks is
NOCB = Number_of_output_col_blocks = CEIL(N/NB)
where each block is of order NB except for the last block, which
is of order LAST_NB = N - (NOCB-1)*NB.
For example, if M=6, N=5 and NB=2, the matrix V is
V = ( VB(1), VB(2), VB(3) ) =
= ( 1 )
( v21 1 )
( v31 v32 1 )
( v41 v42 v43 1 )
( v51 v52 v53 v54 1 )
( v61 v62 v63 v54 v65 )
For each of the column blocks VB(i), an upper-triangular block
reflector TB(i) is computed. These blocks are stored as
a sequence of upper-triangular column blocks in the NB-by-N
matrix T. The size of each TB(i) block is NB-by-NB, except
for the last block, whose size is LAST_NB-by-LAST_NB.
For example, if M=6, N=5 and NB=2, the matrix T is
T = ( TB(1), TB(2), TB(3) ) =
= ( t11 t12 t13 t14 t15 )
( t22 t24 )
The M-by-M factor Q_out is given as a product of NOCB
orthogonal M-by-M matrices Q_out(i).
Q_out = Q_out(1) * Q_out(2) * ... * Q_out(NOCB),
where each matrix Q_out(i) is given by the WY-representation
using corresponding blocks from the matrices V and T:
Q_out(i) = I - VB(i) * TB(i) * (VB(i))**T,
where I is the identity matrix. Here is the formula with matrix
dimensions:
Q(i){M-by-M} = I{M-by-M} -
VB(i){M-by-INB} * TB(i){INB-by-INB} * (VB(i))**T {INB-by-M},
where INB = NB, except for the last block NOCB
for which INB=LAST_NB.
=====
NOTE:
=====
If Q_in is the result of doing a QR factorization
B = Q_in * R_in, then:
B = (Q_out*S) * R_in = Q_out * (S * R_in) = Q_out * R_out.
So if one wants to interpret Q_out as the result
of the QR factorization of B, then the corresponding R_out
should be equal to R_out = S * R_in, i.e. some rows of R_in
should be multiplied by -1.
For the details of the algorithm, see [1].
[1] 'Reconstructing Householder vectors from tall-skinny QR',
G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen,
E. Solomonik, J. Parallel Distrib. Comput.,
vol. 85, pp. 3-31, 2015.
Author
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
November 2019, Igor Kozachenko,
Computer Science Division,
University of California, Berkeley
subroutine sorhr_col (integer m, integer n, integer nb, real, dimension( lda, * ) a, integer lda, real, dimension( ldt, * ) t, integer ldt, real, dimension( * ) d, integer info)
SORHR_COL
Purpose:
SORHR_COL takes an M-by-N real matrix Q_in with orthonormal columns
as input, stored in A, and performs Householder Reconstruction (HR),
i.e. reconstructs Householder vectors V(i) implicitly representing
another M-by-N matrix Q_out, with the property that Q_in = Q_out*S,
where S is an N-by-N diagonal matrix with diagonal entries
equal to +1 or -1. The Householder vectors (columns V(i) of V) are
stored in A on output, and the diagonal entries of S are stored in D.
Block reflectors are also returned in T
(same output format as SGEQRT).
Parameters
M is INTEGER
The number of rows of the matrix A. M >= 0.
N
N is INTEGER
The number of columns of the matrix A. M >= N >= 0.
NB
NB is INTEGER
The column block size to be used in the reconstruction
of Householder column vector blocks in the array A and
corresponding block reflectors in the array T. NB >= 1.
(Note that if NB > N, then N is used instead of NB
as the column block size.)
A
A is REAL array, dimension (LDA,N)
On entry:
The array A contains an M-by-N orthonormal matrix Q_in,
i.e the columns of A are orthogonal unit vectors.
On exit:
The elements below the diagonal of A represent the unit
lower-trapezoidal matrix V of Householder column vectors
V(i). The unit diagonal entries of V are not stored
(same format as the output below the diagonal in A from
SGEQRT). The matrix T and the matrix V stored on output
in A implicitly define Q_out.
The elements above the diagonal contain the factor U
of the 'modified' LU-decomposition:
Q_in - ( S ) = V * U
( 0 )
where 0 is a (M-N)-by-(M-N) zero matrix.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,M).
T
T is REAL array,
dimension (LDT, N)
Let NOCB = Number_of_output_col_blocks
= CEIL(N/NB)
On exit, T(1:NB, 1:N) contains NOCB upper-triangular
block reflectors used to define Q_out stored in compact
form as a sequence of upper-triangular NB-by-NB column
blocks (same format as the output T in SGEQRT).
The matrix T and the matrix V stored on output in A
implicitly define Q_out. NOTE: The lower triangles
below the upper-triangular blocks will be filled with
zeros. See Further Details.
LDT
LDT is INTEGER
The leading dimension of the array T.
LDT >= max(1,min(NB,N)).
D
D is REAL array, dimension min(M,N).
The elements can be only plus or minus one.
D(i) is constructed as D(i) = -SIGN(Q_in_i(i,i)), where
1 <= i <= min(M,N), and Q_in_i is Q_in after performing
i-1 steps of “modified” Gaussian elimination.
See Further Details.
INFO
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
Further Details:
The computed M-by-M orthogonal factor Q_out is defined implicitly as
a product of orthogonal matrices Q_out(i). Each Q_out(i) is stored in
the compact WY-representation format in the corresponding blocks of
matrices V (stored in A) and T.
The M-by-N unit lower-trapezoidal matrix V stored in the M-by-N
matrix A contains the column vectors V(i) in NB-size column
blocks VB(j). For example, VB(1) contains the columns
V(1), V(2), ... V(NB). NOTE: The unit entries on
the diagonal of Y are not stored in A.
The number of column blocks is
NOCB = Number_of_output_col_blocks = CEIL(N/NB)
where each block is of order NB except for the last block, which
is of order LAST_NB = N - (NOCB-1)*NB.
For example, if M=6, N=5 and NB=2, the matrix V is
V = ( VB(1), VB(2), VB(3) ) =
= ( 1 )
( v21 1 )
( v31 v32 1 )
( v41 v42 v43 1 )
( v51 v52 v53 v54 1 )
( v61 v62 v63 v54 v65 )
For each of the column blocks VB(i), an upper-triangular block
reflector TB(i) is computed. These blocks are stored as
a sequence of upper-triangular column blocks in the NB-by-N
matrix T. The size of each TB(i) block is NB-by-NB, except
for the last block, whose size is LAST_NB-by-LAST_NB.
For example, if M=6, N=5 and NB=2, the matrix T is
T = ( TB(1), TB(2), TB(3) ) =
= ( t11 t12 t13 t14 t15 )
( t22 t24 )
The M-by-M factor Q_out is given as a product of NOCB
orthogonal M-by-M matrices Q_out(i).
Q_out = Q_out(1) * Q_out(2) * ... * Q_out(NOCB),
where each matrix Q_out(i) is given by the WY-representation
using corresponding blocks from the matrices V and T:
Q_out(i) = I - VB(i) * TB(i) * (VB(i))**T,
where I is the identity matrix. Here is the formula with matrix
dimensions:
Q(i){M-by-M} = I{M-by-M} -
VB(i){M-by-INB} * TB(i){INB-by-INB} * (VB(i))**T {INB-by-M},
where INB = NB, except for the last block NOCB
for which INB=LAST_NB.
=====
NOTE:
=====
If Q_in is the result of doing a QR factorization
B = Q_in * R_in, then:
B = (Q_out*S) * R_in = Q_out * (S * R_in) = Q_out * R_out.
So if one wants to interpret Q_out as the result
of the QR factorization of B, then the corresponding R_out
should be equal to R_out = S * R_in, i.e. some rows of R_in
should be multiplied by -1.
For the details of the algorithm, see [1].
[1] 'Reconstructing Householder vectors from tall-skinny QR',
G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen,
E. Solomonik, J. Parallel Distrib. Comput.,
vol. 85, pp. 3-31, 2015.
Author
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
November 2019, Igor Kozachenko,
Computer Science Division,
University of California, Berkeley
subroutine zunhr_col (integer m, integer n, integer nb, complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( ldt, * ) t, integer ldt, complex*16, dimension( * ) d, integer info)
ZUNHR_COL
Purpose:
ZUNHR_COL takes an M-by-N complex matrix Q_in with orthonormal columns
as input, stored in A, and performs Householder Reconstruction (HR),
i.e. reconstructs Householder vectors V(i) implicitly representing
another M-by-N matrix Q_out, with the property that Q_in = Q_out*S,
where S is an N-by-N diagonal matrix with diagonal entries
equal to +1 or -1. The Householder vectors (columns V(i) of V) are
stored in A on output, and the diagonal entries of S are stored in D.
Block reflectors are also returned in T
(same output format as ZGEQRT).
Parameters
M is INTEGER
The number of rows of the matrix A. M >= 0.
N
N is INTEGER
The number of columns of the matrix A. M >= N >= 0.
NB
NB is INTEGER
The column block size to be used in the reconstruction
of Householder column vector blocks in the array A and
corresponding block reflectors in the array T. NB >= 1.
(Note that if NB > N, then N is used instead of NB
as the column block size.)
A
A is COMPLEX*16 array, dimension (LDA,N)
On entry:
The array A contains an M-by-N orthonormal matrix Q_in,
i.e the columns of A are orthogonal unit vectors.
On exit:
The elements below the diagonal of A represent the unit
lower-trapezoidal matrix V of Householder column vectors
V(i). The unit diagonal entries of V are not stored
(same format as the output below the diagonal in A from
ZGEQRT). The matrix T and the matrix V stored on output
in A implicitly define Q_out.
The elements above the diagonal contain the factor U
of the 'modified' LU-decomposition:
Q_in - ( S ) = V * U
( 0 )
where 0 is a (M-N)-by-(M-N) zero matrix.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,M).
T
T is COMPLEX*16 array,
dimension (LDT, N)
Let NOCB = Number_of_output_col_blocks
= CEIL(N/NB)
On exit, T(1:NB, 1:N) contains NOCB upper-triangular
block reflectors used to define Q_out stored in compact
form as a sequence of upper-triangular NB-by-NB column
blocks (same format as the output T in ZGEQRT).
The matrix T and the matrix V stored on output in A
implicitly define Q_out. NOTE: The lower triangles
below the upper-triangular blocks will be filled with
zeros. See Further Details.
LDT
LDT is INTEGER
The leading dimension of the array T.
LDT >= max(1,min(NB,N)).
D
D is COMPLEX*16 array, dimension min(M,N).
The elements can be only plus or minus one.
D(i) is constructed as D(i) = -SIGN(Q_in_i(i,i)), where
1 <= i <= min(M,N), and Q_in_i is Q_in after performing
i-1 steps of “modified” Gaussian elimination.
See Further Details.
INFO
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
Further Details:
The computed M-by-M unitary factor Q_out is defined implicitly as
a product of unitary matrices Q_out(i). Each Q_out(i) is stored in
the compact WY-representation format in the corresponding blocks of
matrices V (stored in A) and T.
The M-by-N unit lower-trapezoidal matrix V stored in the M-by-N
matrix A contains the column vectors V(i) in NB-size column
blocks VB(j). For example, VB(1) contains the columns
V(1), V(2), ... V(NB). NOTE: The unit entries on
the diagonal of Y are not stored in A.
The number of column blocks is
NOCB = Number_of_output_col_blocks = CEIL(N/NB)
where each block is of order NB except for the last block, which
is of order LAST_NB = N - (NOCB-1)*NB.
For example, if M=6, N=5 and NB=2, the matrix V is
V = ( VB(1), VB(2), VB(3) ) =
= ( 1 )
( v21 1 )
( v31 v32 1 )
( v41 v42 v43 1 )
( v51 v52 v53 v54 1 )
( v61 v62 v63 v54 v65 )
For each of the column blocks VB(i), an upper-triangular block
reflector TB(i) is computed. These blocks are stored as
a sequence of upper-triangular column blocks in the NB-by-N
matrix T. The size of each TB(i) block is NB-by-NB, except
for the last block, whose size is LAST_NB-by-LAST_NB.
For example, if M=6, N=5 and NB=2, the matrix T is
T = ( TB(1), TB(2), TB(3) ) =
= ( t11 t12 t13 t14 t15 )
( t22 t24 )
The M-by-M factor Q_out is given as a product of NOCB
unitary M-by-M matrices Q_out(i).
Q_out = Q_out(1) * Q_out(2) * ... * Q_out(NOCB),
where each matrix Q_out(i) is given by the WY-representation
using corresponding blocks from the matrices V and T:
Q_out(i) = I - VB(i) * TB(i) * (VB(i))**T,
where I is the identity matrix. Here is the formula with matrix
dimensions:
Q(i){M-by-M} = I{M-by-M} -
VB(i){M-by-INB} * TB(i){INB-by-INB} * (VB(i))**T {INB-by-M},
where INB = NB, except for the last block NOCB
for which INB=LAST_NB.
=====
NOTE:
=====
If Q_in is the result of doing a QR factorization
B = Q_in * R_in, then:
B = (Q_out*S) * R_in = Q_out * (S * R_in) = Q_out * R_out.
So if one wants to interpret Q_out as the result
of the QR factorization of B, then the corresponding R_out
should be equal to R_out = S * R_in, i.e. some rows of R_in
should be multiplied by -1.
For the details of the algorithm, see [1].
[1] 'Reconstructing Householder vectors from tall-skinny QR',
G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen,
E. Solomonik, J. Parallel Distrib. Comput.,
vol. 85, pp. 3-31, 2015.
Author
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Contributors:
November 2019, Igor Kozachenko,
Computer Science Division,
University of California, Berkeley
Author
Generated automatically by Doxygen for LAPACK from the source code.
| Thu Aug 7 2025 17:26:25 | Version 3.12.0 |