Mercurial > hg > octave-lyh
annotate scripts/statistics/distributions/discrete_pdf.m @ 11523:fd0a3ac60b0e
update copyright notices
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 14 Jan 2011 05:47:45 -0500 |
parents | 1740012184f9 |
children | 19b9f17d22af |
rev | line source |
---|---|
11523 | 1 ## Copyright (C) 1996-2011 Kurt Hornik |
3426 | 2 ## |
3922 | 3 ## This file is part of Octave. |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
3426 | 9 ## |
3922 | 10 ## Octave is distributed in the hope that it will be useful, but |
3191 | 11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
3426 | 13 ## General Public License for more details. |
14 ## | |
3191 | 15 ## You should have received a copy of the GNU General Public License |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
3191 | 18 |
3456 | 19 ## -*- texinfo -*- |
20 ## @deftypefn {Function File} {} discrete_pdf (@var{x}, @var{v}, @var{p}) | |
21 ## For each element of @var{x}, compute the probability density function | |
6754 | 22 ## (PDF) at @var{x} of a univariate discrete distribution which assumes |
3456 | 23 ## the values in @var{v} with probabilities @var{p}. |
24 ## @end deftypefn | |
3191 | 25 |
5428 | 26 ## Author: KH <Kurt.Hornik@wu-wien.ac.at> |
3456 | 27 ## Description: pDF of a discrete distribution |
3191 | 28 |
3456 | 29 function pdf = discrete_pdf (x, v, p) |
3426 | 30 |
3191 | 31 if (nargin != 3) |
6046 | 32 print_usage (); |
3191 | 33 endif |
34 | |
4859 | 35 sz = size (x); |
3191 | 36 |
4030 | 37 if (! isvector (v)) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
11156
diff
changeset
|
38 error ("discrete_pdf: V must be a vector"); |
4030 | 39 elseif (! isvector (p) || (length (p) != length (v))) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
11156
diff
changeset
|
40 error ("discrete_pdf: P must be a vector with length (V) elements"); |
3456 | 41 elseif (! (all (p >= 0) && any (p))) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
11156
diff
changeset
|
42 error ("discrete_pdf: P must be a nonzero, nonnegative vector"); |
3191 | 43 endif |
44 | |
4859 | 45 n = numel (x); |
3456 | 46 m = length (v); |
47 x = reshape (x, n, 1); | |
48 v = reshape (v, 1, m); | |
49 p = reshape (p / sum (p), m, 1); | |
3191 | 50 |
10524
1c6ff93c025a
Reimplement the other discrete distribution functions using lookup
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
51 pdf = NaN (sz); |
3456 | 52 k = find (!isnan (x)); |
53 if (any (k)) | |
3191 | 54 n = length (k); |
11156
83da69c6e7be
Sort values in discrete_pdf before calling lookup
David Bateman <dbateman@free.fr>
parents:
10524
diff
changeset
|
55 [vs, vi] = sort (v); |
83da69c6e7be
Sort values in discrete_pdf before calling lookup
David Bateman <dbateman@free.fr>
parents:
10524
diff
changeset
|
56 pdf (k) = p (vi(lookup (vs, x(k), 'm'))); |
3191 | 57 endif |
58 | |
59 endfunction |