root/trunk/random/lognormal.lisp

Revision 26, 3.4 kB (checked in by lhealy, 9 months ago)

Subversion version stamp.

  • Property svn:keywords set to Id
Line 
1;; Lognormal distribution
2;; Liam Healy, Sat Sep 30 2006
3;; Time-stamp: <2008-02-17 13:10:13EST lognormal.lisp>
4;; $Id$
5
6(in-package :gsl)
7
8(defmfun lognormal (generator zeta sigma)
9  "gsl_ran_lognormal"
10  (((generator generator) :pointer) (zeta :double) (sigma :double))
11  :c-return :double
12  :documentation                        ; FDL
13  "A random variate from the lognormal distribution.
14   The distribution function is
15   p(x) dx = {1 \over x \sqrt{2 \pi \sigma^2}} \exp(-(\ln(x) - \zeta)^2/2 \sigma^2) dx
16   for x > 0.")
17
18(defmfun lognormal-pdf (x zeta sigma)
19  "gsl_ran_lognormal_pdf" ((x :double) (zeta :double) (sigma :double))
20  :c-return :double
21  :documentation                        ; FDL
22  "The probability density p(x) at X
23   for a lognormal distribution with parameters zeta and sigma,
24   using the formula given in #'lognormal.")
25
26(defmfun lognormal-P (x zeta sigma)
27  "gsl_cdf_lognormal_P" ((x :double) (zeta :double) (sigma :double))
28  :c-return :double
29  :documentation                        ; FDL
30  "The cumulative distribution functions
31  P(x) for the lognormal distribution with parameters zeta and sigma.")
32
33(defmfun lognormal-Q (x zeta sigma)
34  "gsl_cdf_lognormal_Q" ((x :double) (zeta :double) (sigma :double))
35  :c-return :double
36  :documentation                        ; FDL
37  "The cumulative distribution functions
38  Q(x) for the lognormal distribution with parameters
39  zeta and sigma.")
40
41(defmfun lognormal-Pinv (P zeta sigma)
42  "gsl_cdf_lognormal_Pinv" ((P :double) (zeta :double) (sigma :double))
43  :c-return :double
44  :documentation                        ; FDL
45  "The inverse cumulative distribution functions
46  P(x) for the lognormal distribution with parameters
47  zeta and sigma.")
48
49(defmfun lognormal-Qinv (Q zeta sigma)
50  "gsl_cdf_lognormal_Qinv" ((Q :double) (zeta :double) (sigma :double))
51  :c-return :double
52  :documentation                        ; FDL
53  "The inverse cumulative distribution functions
54   Q(x) for the lognormal distribution with parameters
55   zeta and sigma.")
56
57;;; Examples and unit test
58#|
59(make-tests lognormal
60  (letm ((rng (random-number-generator *mt19937* 0)))
61      (loop for i from 0 to 10
62            collect
63            (lognormal rng 1.0d0 2.0d0)))
64  (lognormal-pdf 1.2d0 1.0d0 2.0d0)
65  (lognormal-P 1.2d0 1.0d0 2.0d0)
66  (lognormal-Q 1.2d0 1.0d0 2.0d0)
67  (lognormal-Pinv 0.3413288272347352d0 1.0d0 2.0d0)
68  (lognormal-Qinv 0.6586711727652649d0 1.0d0 2.0d0))
69|#
70
71(LISP-UNIT:DEFINE-TEST LOGNORMAL
72  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
73   (LIST
74    (LIST 2.386447068127768d0 0.11687602167359055d0
75          4.753374578796263d0 30.093393775755004d0
76          0.8119584375760986d0 3.163421055157545d0
77          0.9146206567715651d0 0.727307901065758d0
78          2.180184852178898d0 3.8908856616896017d0
79          182.18469788916977d0))
80   (MULTIPLE-VALUE-LIST
81    (LETM ((RNG (RANDOM-NUMBER-GENERATOR *MT19937* 0)))
82      (LOOP FOR I FROM 0 TO 10 COLLECT
83            (LOGNORMAL RNG 1.0d0 2.0d0)))))
84  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
85   (LIST 0.15289833965691607d0)
86   (MULTIPLE-VALUE-LIST
87    (LOGNORMAL-PDF 1.2d0 1.0d0 2.0d0)))
88  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
89   (LIST 0.3413288272347351d0)
90   (MULTIPLE-VALUE-LIST (LOGNORMAL-P 1.2d0 1.0d0 2.0d0)))
91  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
92   (LIST 0.6586711727652649d0)
93   (MULTIPLE-VALUE-LIST (LOGNORMAL-Q 1.2d0 1.0d0 2.0d0)))
94  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
95   (LIST 1.2000000000000004d0)
96   (MULTIPLE-VALUE-LIST
97    (LOGNORMAL-PINV 0.3413288272347352d0 1.0d0 2.0d0)))
98  (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
99   (LIST 1.2d0)
100   (MULTIPLE-VALUE-LIST
101    (LOGNORMAL-QINV 0.6586711727652649d0 1.0d0 2.0d0))))
Note: See TracBrowser for help on using the browser.