| // Copyright 2015 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package stats |
| |
| // DeltaDist is the Dirac delta function, centered at T, with total |
| // area 1. |
| // |
| // The CDF of the Dirac delta function is the Heaviside step function, |
| // centered at T. Specifically, f(T) == 1. |
| type DeltaDist struct { |
| T float64 |
| } |
| |
| func (d DeltaDist) PDF(x float64) float64 { |
| if x == d.T { |
| return inf |
| } |
| return 0 |
| } |
| |
| func (d DeltaDist) pdfEach(xs []float64) []float64 { |
| res := make([]float64, len(xs)) |
| for i, x := range xs { |
| if x == d.T { |
| res[i] = inf |
| } |
| } |
| return res |
| } |
| |
| func (d DeltaDist) CDF(x float64) float64 { |
| if x >= d.T { |
| return 1 |
| } |
| return 0 |
| } |
| |
| func (d DeltaDist) cdfEach(xs []float64) []float64 { |
| res := make([]float64, len(xs)) |
| for i, x := range xs { |
| res[i] = d.CDF(x) |
| } |
| return res |
| } |
| |
| func (d DeltaDist) InvCDF(y float64) float64 { |
| if y < 0 || y > 1 { |
| return nan |
| } |
| return d.T |
| } |
| |
| func (d DeltaDist) Bounds() (float64, float64) { |
| return d.T - 1, d.T + 1 |
| } |