is_SPD Function

public function is_SPD(A, is_sym) result(is_spd_matrix)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), dimension(:, :) :: A
logical, intent(in), optional :: is_sym

Return Value logical


Calls

proc~~is_spd~~CallsGraph proc~is_spd is_SPD proc~eigen Eigen proc~is_spd->proc~eigen proc~is_symmetric is_symmetric proc~is_spd->proc~is_symmetric proc~identity_n Identity_n proc~eigen->proc~identity_n proc~normalise normalise proc~eigen->proc~normalise proc~qr_decomposition QR_decomposition proc~eigen->proc~qr_decomposition proc~norm_2_real norm_2_real proc~normalise->proc~norm_2_real proc~qr_givens_decomposition QR_Givens_decomposition proc~qr_decomposition->proc~qr_givens_decomposition proc~qr_gram_schmidt_classical_decomposition QR_Gram_Schmidt_Classical_decomposition proc~qr_decomposition->proc~qr_gram_schmidt_classical_decomposition proc~qr_gram_schmidt_modified_decomposition QR_Gram_Schmidt_Modified_decomposition proc~qr_decomposition->proc~qr_gram_schmidt_modified_decomposition proc~qr_householder_decomposition QR_Householder_decomposition proc~qr_decomposition->proc~qr_householder_decomposition proc~qr_givens_decomposition->proc~identity_n proc~rotation_matrix rotation_matrix proc~qr_givens_decomposition->proc~rotation_matrix proc~qr_householder_decomposition->proc~identity_n proc~rotation_matrix->proc~identity_n

Source Code

    function is_SPD(A, is_sym) result(is_spd_matrix)
        real(dp), dimension(:, :), intent(in) :: A
        logical, optional, intent(in) :: is_sym
        real(dp), dimension(size(A, 1)) :: lambda
        logical :: is_spd_matrix

        if (present(is_sym)) then
            if (.not. is_sym) then
                is_spd_matrix = .false.
                return
            end if
        else if (.not. is_symmetric(A)) then
            is_spd_matrix = .false.
            return
        end if

        call Eigen(A, lambda, method="Power_iteration")
        if (minval(lambda) < 0) then
            is_spd_matrix = .false.
        else
            is_spd_matrix = .true.
        end if

    end function is_SPD