forlab_stats_std.f90 Source File


Contents

Source Code


Source Code

submodule(forlab_stats) forlab_stats_var

    implicit none

contains

    module procedure var_1_sp
    integer :: opt_w

    opt_w = 0
    if (present(w)) opt_w = w
    select case (opt_w)
    case (0)
        var_1_sp = sum((x - mean(x))**2)/(size(x) - 1)
    case (1)
        var_1_sp = sum((x - mean(x))**2)/size(x)
    end select
    return
    end procedure var_1_sp

    module procedure var_2_sp
    integer :: opt_w, i, m, n

    opt_w = 0
    if (present(w)) opt_w = w
    m = size(A, 1)
    n = size(A, 2)
    if ((.not. present(dim)) .or. (dim == 1)) then
        allocate (var_2_sp(n))
        do i = 1, n
            var_2_sp(i) = var_1_sp(A(:, i), opt_w)
        end do
    elseif (dim == 2) then
        allocate (var_2_sp(m))
        do i = 1, m
            var_2_sp(i) = var_1_sp(A(i, :), opt_w)
        end do
    end if
    return
    end procedure var_2_sp
    module procedure var_1_dp
    integer :: opt_w

    opt_w = 0
    if (present(w)) opt_w = w
    select case (opt_w)
    case (0)
        var_1_dp = sum((x - mean(x))**2)/(size(x) - 1)
    case (1)
        var_1_dp = sum((x - mean(x))**2)/size(x)
    end select
    return
    end procedure var_1_dp

    module procedure var_2_dp
    integer :: opt_w, i, m, n

    opt_w = 0
    if (present(w)) opt_w = w
    m = size(A, 1)
    n = size(A, 2)
    if ((.not. present(dim)) .or. (dim == 1)) then
        allocate (var_2_dp(n))
        do i = 1, n
            var_2_dp(i) = var_1_dp(A(:, i), opt_w)
        end do
    elseif (dim == 2) then
        allocate (var_2_dp(m))
        do i = 1, m
            var_2_dp(i) = var_1_dp(A(i, :), opt_w)
        end do
    end if
    return
    end procedure var_2_dp
    module procedure std_1_sp
    integer :: opt_w

    opt_w = 0
    if (present(w)) opt_w = w
    std_1_sp = sqrt(var_1_sp(x, opt_w))
    return
    end procedure std_1_sp

    module procedure std_2_sp
    integer :: opt_w

    opt_w = 0
    if (present(w)) opt_w = w
    if (.not. present(dim)) then
        std_2_sp = sqrt(var_2_sp(A, opt_w))
    else
        std_2_sp = sqrt(var_2_sp(A, opt_w, dim))
    end if
    return
    end procedure std_2_sp
    module procedure std_1_dp
    integer :: opt_w

    opt_w = 0
    if (present(w)) opt_w = w
    std_1_dp = sqrt(var_1_dp(x, opt_w))
    return
    end procedure std_1_dp

    module procedure std_2_dp
    integer :: opt_w

    opt_w = 0
    if (present(w)) opt_w = w
    if (.not. present(dim)) then
        std_2_dp = sqrt(var_2_dp(A, opt_w))
    else
        std_2_dp = sqrt(var_2_dp(A, opt_w, dim))
    end if
    return
    end procedure std_2_dp

end submodule forlab_stats_var