about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/KPMstats/multipdf.m
blob: 592d000492e9a722ed1e728dd5f1f6e88ec19c65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function p = multipdf(x,theta)
%MULTIPDF Multinomial probability density function.
%   p = multipdf(x,theta) returns the probabilities of 
%   vector x, under the multinomial distribution
%   with parameter vector theta.
%
%   Author: David Ross

%--------------------------------------------------------
% Check the arguments.
%--------------------------------------------------------
error(nargchk(2,2,nargin));

% make sure theta is a vector
if ndims(theta) > 2 | all(size(theta) > 1)
    error('theta must be a vector');
end

% make sure x is of the appropriate size
if ndims(x) > 2 | any(size(x) ~= size(theta))
    error('columns of X must have same length as theta');
end


%--------------------------------------------------------
% Main...
%--------------------------------------------------------
p = prod(theta .^ x);
p = p .* factorial(sum(x)) ./ prod(factorial_v(x));


%--------------------------------------------------------
% Function factorial_v(x): computes the factorial function
% on each element of x
%--------------------------------------------------------
function r = factorial_v(x)

if size(x,2) == 1
    x = x';
end

r = [];
for y = x
    r = [r factorial(y)];
end