gaussian_kernel_2d Function

function gaussian_kernel_2d(x, y, mean, sigma) result(gaussian_kernel)

Arguments

Type IntentOptional Attributes Name
real(kind=8), intent(in) :: x(:)
real(kind=8), intent(in) :: y(:)
real(kind=8), intent(in) :: mean(2)
real(kind=8), intent(in) :: sigma(2,2)

Return Value real(kind=8), (size(x),size(y))


Calls

proc~~gaussian_kernel_2d~~CallsGraph proc~gaussian_kernel_2d gaussian_kernel_2d det det proc~gaussian_kernel_2d->det inv inv proc~gaussian_kernel_2d->inv

Source Code

function gaussian_kernel_2d(x,y,mean,sigma) result(gaussian_kernel)
  real(8),intent(in) :: x(:),y(:)
  real(8),intent(in) :: mean(2)
  real(8),intent(in) :: sigma(2,2)
  real(8)            :: gaussian_kernel(size(x),size(y))
  real(8),parameter  :: pi2=2d0*acos(-1d0)
  real(8)            :: detSigma
  real(8)            :: InvSigma(2,2)
  real(8)            :: gaussian_factor
  real(8)            :: arg,xvec(2)
  integer            :: i,j
  !
  detSigma = det(sigma)
  gaussian_factor=1/pi2/sqrt(detSigma)
  !
  InvSigma = Sigma
  call inv(InvSigma)
  do i=1,size(x)
     do j=1,size(y)
        xvec = [x(i),y(j)] - mean
        arg  = dot_product(xvec,matmul(InvSigma,xvec))
        !
        gaussian_kernel(i,j)=gaussian_factor*exp(-0.5d0*arg)
        !
     enddo
  enddo
end function gaussian_kernel_2d