QR_Gram_Schmidt_Classical_decomposition Subroutine

public subroutine QR_Gram_Schmidt_Classical_decomposition(A, Q, R)

QR decomposition using Classical Gram-Schmidt method

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

Called by

proc~~qr_gram_schmidt_classical_decomposition~~CalledByGraph proc~qr_gram_schmidt_classical_decomposition QR_Gram_Schmidt_Classical_decomposition proc~qr_decomposition QR_decomposition proc~qr_decomposition->proc~qr_gram_schmidt_classical_decomposition proc~eigen Eigen proc~eigen->proc~qr_decomposition proc~is_spd is_SPD proc~is_spd->proc~eigen

Source Code

    subroutine QR_Gram_Schmidt_Classical_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)) :: u
        integer :: N, i, j

        N = size(A, 1)
        Q = 0.d0
        R = 0.d0

        do j = 1, N
            u = A(:, j)
            do i = 1, j - 1
                R(i, j) = dot_product(Q(:, i), A(:, j))
                u = u - (R(i, j) * Q(:, i))
            end do
            R(j, j) = norm2(u)
            Q(:, j) = u / R(j, j)
        end do

    end subroutine QR_Gram_Schmidt_Classical_decomposition