FIXME : Add documentation
Type | Intent | Optional | 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 |
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