Matlab provides QR decomposition routines based on Lapack subroutines ZGEQRF/ZGEQPF and ZUNGQR. Such routines make the diagonal entries be real.
For general diagonal conditions, this code 'qr_lapack' supports that any given diagonal complex phases are allowed in QR decomposition such as all non-negative, the same as in the original matrix A, or any others. For example,
DIAG_VEC = diag(A);
[Q, R] = qr_lapack (A, ECON, DIAG_VEC);
This code accesses Lapack routines directly, not using matlab command qr. After QR decomposion based on Lapack, Q and R are recomputed to have specific phases of the diagonal entries of R.
There are other sample codes for specific tests:
* qr_diag_pos.m: QR making diagonal positive real.
* qr_diag_phase.m: QR making the same diagonal phases as in A.
* qr_diag_arg.m: another implementation using argment measure.
Note that qr_lapack.m uses the code in qr_diag_phase.m for control the diagonal phases.
qrd.m file provides options to select user subroutines among qr_lapack, qr_diag_pos, qr or others. Now we can use:
[Q, R] = qrd (A, ECON, DIAG_VEC);
test_qrd.m is for usage examples.
For fat matrices, it computes the LQ decomposition of A = L*Q, where A' = Q'*L' and [L,Q] = qr_lapack (A).
Sung-Eun Jo (2021). QR decomposition with constrained diagonal phases (Lapack interface) (https://www.mathworks.com/matlabcentral/fileexchange/47875-qr-decomposition-with-constrained-diagonal-phases-lapack-interface), MATLAB Central File Exchange. Retrieved .
MATLAB Release Compatibility
Platform CompatibilityWindows macOS Linux
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!