QR_Givens_decomposition Subroutine

public subroutine QR_Givens_decomposition(A, Q, R)

QR decomposition using Givens rotations

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), DIMENSION(:, :) :: A
real(kind=dp), intent(out), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) :: Q
real(kind=dp), intent(out), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) :: R

Calls

proc~~qr_givens_decomposition~~CallsGraph proc~qr_givens_decomposition QR_Givens_decomposition proc~identity_n Identity_n proc~qr_givens_decomposition->proc~identity_n proc~rotation_matrix rotation_matrix proc~qr_givens_decomposition->proc~rotation_matrix proc~rotation_matrix->proc~identity_n

Called by

proc~~qr_givens_decomposition~~CalledByGraph proc~qr_givens_decomposition QR_Givens_decomposition proc~qr_decomposition QR_decomposition proc~qr_decomposition->proc~qr_givens_decomposition proc~eigen Eigen proc~eigen->proc~qr_decomposition proc~is_spd is_SPD proc~is_spd->proc~eigen

Source Code

    SUBROUTINE QR_Givens_decomposition(A, Q, R)
        REAL(dp), DIMENSION(:, :), INTENT(IN) :: A
        REAL(dp), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)), INTENT(OUT) :: Q, R
        REAL(dp), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) :: G
        INTEGER :: N, i, j

        N= SIZE(A, 1)

        R = A

        Q = Identity_n(N)

        DO j = 1, N-1
            DO i = j+1, N

                G = rotation_matrix(R, [i, j])

                R = MATMUL(G, R)

                Q = MATMUL(Q, TRANSPOSE(G))

            END DO
        END DO

    END SUBROUTINE QR_Givens_decomposition