linalg 1.8.2
A linear algebra library that provides a user-friendly interface to several BLAS and LAPACK routines.
Loading...
Searching...
No Matches
linalg::form_lq Interface Reference

Forms the orthogonal matrix Q from the elementary reflectors returned by the LQ factorization algorithm. More...

Public Member Functions

 form_lq_no_pivot
 
 form_lq_no_pivot_cmplx
 

Detailed Description

Forms the orthogonal matrix Q from the elementary reflectors returned by the LQ factorization algorithm.

Syntax
subroutine form_lq(real(real64) l(:,:), real(real64) tau(:), real(real64) q(:,:), optional real(real64) work(:), optional integer(int32) olwork, optional class(errors) err)
subroutine form_lq(complex(real64) l(:,:), complex(real64) tau(:), complex(real64) q(:,:), optional complex(real64) work(:), optional integer(int32) olwork, optional class(errors) err)
Parameters
[in,out]lOn input, an M-by-N matrix where the elements above the diagonal contain the elementary reflectors generated from the LQ factorization performed by lq_factor. On and below the diagonal the matrix contains the matrix L. On output, the elements above the diagonal are zeroed sucht hat the remaining matrix is the M-by-N lower trapezoidal matrix L where only the M-by-M submatrix is the lower triangular matrix L. Notice, M must be less than or equal to N for this routine.
[in]tauA MIN(M, N)-element array containing the scalar factors of each elementary reflector defined in l.
[out]qAn N-by-N matrix where the orthogonal matrix Q will be written.
[out]workAn optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.
[out]olworkAn optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.
[in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
  • LA_ARRAY_SIZE_ERROR: Occurs if any of the input arrays are not sized appropriately.
  • LA_OUT_OF_MEMORY_ERROR: Occurs if local memory must be allocated, and there is insufficient memory available.
Notes
This routine utilizes the LAPACK routine DORGLQ (ZUNGLQ in the complex case).
Usage
The folowing example illustrates the solution of a system of equations using LQ factorization.
program example
use iso_fortran_env, only : real64, int32
use linalg
implicit none
! Variables
real(real64) :: a(3,3), b(3), q(3,3), tau(3), x(3)
integer(int32) :: i
! Build the 3-by-3 matrix A.
! | 1 2 3 |
! A = | 4 5 6 |
! | 7 8 0 |
a = reshape( &
[1.0d0, 4.0d0, 7.0d0, 2.0d0, 5.0d0, 8.0d0, 3.0d0, 6.0d0, 0.0d0], &
[3, 3])
! Build the right-hand-side vector B.
! | -1 |
! b = | -2 |
! | -3 |
b = [-1.0d0, -2.0d0, -3.0d0]
! The solution is:
! | 1/3 |
! x = | -2/3 |
! | 0 |
! Compute the LQ factorization
call lq_factor(a, tau)
! Build L and Q. A is overwritten with L
call form_lq(a, tau, q)
! Solve the lower triangular problem and store the solution in B.
!
! A few notes about this solution noting we've factored A = L * Q.
!
! We then have to solve: L * Q * X = B for X. If we let Y = Q * X, then
! we solve the lower triangular system L * Y = B for Y.
call solve_triangular_system(.false., .false., .true., a, b)
! Now we've solved the lower triangular system L * Y = B for Y. At
! this point we solve the problem: Q * X = Y. Q is an orthogonal matrix;
! therefore, inv(Q) = Q**T. We can solve this by multiplying both
! sides by Q**T:
!
! Compute Q**T * B = X
call mtx_mult(.true., 1.0d0, q, b, 0.0d0, x)
! Display the results
print '(A)', "LQ Solution: X = "
print '(F8.4)', (x(i), i = 1, size(x))
end program
Forms the orthogonal matrix Q from the elementary reflectors returned by the LQ factorization algorit...
Definition linalg.f90:3684
Computes the LQ factorization of an M-by-N matrix.
Definition linalg.f90:3570
Performs the matrix operation: .
Definition linalg.f90:361
Solves a triangular system of equations.
Definition linalg.f90:2316
Provides a set of common linear algebra routines.
Definition linalg.f90:145
The above program produces the following output.
LQ Solution: X =
0.3333
-0.6667
0.0000
See Also

Definition at line 3684 of file linalg.f90.


The documentation for this interface was generated from the following file: