regress_2 Subroutine

public subroutine regress_2(reg, x, y, a, b)

FIXME : Add documentation

Arguments

Type IntentOptional Attributes Name
type(reg_type), dimension(:), target :: reg
real, intent(in), dimension(:) :: x
real, intent(in), dimension(:) :: y
real, intent(out), optional, dimension(:) :: a
real, intent(out), optional, dimension(:) :: b

Contents

Source Code


Source Code

  subroutine regress_2 (reg, x, y, a, b)
    implicit none    
    type (reg_type), dimension(:), target :: reg
    real, dimension(:), intent (in) :: x, y
    real, dimension(:), intent (out), optional :: a, b

    integer, dimension(:), pointer :: n
    real, dimension(:), pointer :: xy, xsum, ysum, x2sum
    
    n     => reg % n 
    xy    => reg % xy
    xsum  => reg % xsum
    ysum  => reg % ysum
    x2sum => reg % x2sum

    n = n + 1
    xy = xy + x*y
    xsum = xsum + x
    ysum = ysum + y
    x2sum = x2sum + x*x

    if (n(1)>1) then
       reg%b = (xy-xsum*ysum/real(n))/(x2sum-xsum*xsum/real(n))
       reg%a = ysum/real(n) - reg%b*xsum/real(n)
    else
       reg%b = 0.
       reg%a = 0.
    end if
    
    if (present(a)) then
       b=reg%b
       a=reg%a
    end if

  end subroutine regress_2