racket/collects/math/private/distributions/delta-dist.rkt
Neil Toronto 0936d8c20b Reworked distribution API, finally happy with it (as happy as I can be without being able to partially instantiate polymorphic parent struct types)
Added docs for math/distributions (about 75% finished)
Started docs for math/array (very incomplete)
2012-11-21 21:16:35 -07:00

36 lines
1.1 KiB
Racket

#lang typed/racket/base
(require racket/performance-hint
racket/promise
"../../flonum.rkt"
"impl/delta-dist.rkt"
"dist-struct.rkt"
"utils.rkt")
(provide fldelta-pdf
fldelta-cdf
fldelta-inv-cdf
Delta-Dist delta-dist delta-dist-mean)
(define-real-dist: delta-dist Delta-Dist
delta-dist-struct ([mean : Flonum]))
(begin-encourage-inline
(: delta-dist (case-> (-> Delta-Dist)
(Real -> Delta-Dist)))
(define (delta-dist [c 0.0])
(let ([c (fl c)])
(define pdf (opt-lambda: ([x : Real] [log? : Any #f])
(fldelta-pdf c (fl x) log?)))
(define cdf (opt-lambda: ([x : Real] [log? : Any #f] [1-p? : Any #f])
(fldelta-cdf c (fl x) log? 1-p?)))
(define inv-cdf (opt-lambda: ([p : Real] [log? : Any #f] [1-p? : Any #f])
(fldelta-inv-cdf c (fl p) log? 1-p?)))
(define sample (case-lambda:
[() c]
[([n : Integer]) (build-list n (λ (_) c))]))
(delta-dist-struct pdf sample cdf inv-cdf c c (delay c) c)))
)