wolffd@0: function p = multipdf(x,theta) wolffd@0: %MULTIPDF Multinomial probability density function. wolffd@0: % p = multipdf(x,theta) returns the probabilities of wolffd@0: % vector x, under the multinomial distribution wolffd@0: % with parameter vector theta. wolffd@0: % wolffd@0: % Author: David Ross wolffd@0: wolffd@0: %-------------------------------------------------------- wolffd@0: % Check the arguments. wolffd@0: %-------------------------------------------------------- wolffd@0: error(nargchk(2,2,nargin)); wolffd@0: wolffd@0: % make sure theta is a vector wolffd@0: if ndims(theta) > 2 | all(size(theta) > 1) wolffd@0: error('theta must be a vector'); wolffd@0: end wolffd@0: wolffd@0: % make sure x is of the appropriate size wolffd@0: if ndims(x) > 2 | any(size(x) ~= size(theta)) wolffd@0: error('columns of X must have same length as theta'); wolffd@0: end wolffd@0: wolffd@0: wolffd@0: %-------------------------------------------------------- wolffd@0: % Main... wolffd@0: %-------------------------------------------------------- wolffd@0: p = prod(theta .^ x); wolffd@0: p = p .* factorial(sum(x)) ./ prod(factorial_v(x)); wolffd@0: wolffd@0: wolffd@0: %-------------------------------------------------------- wolffd@0: % Function factorial_v(x): computes the factorial function wolffd@0: % on each element of x wolffd@0: %-------------------------------------------------------- wolffd@0: function r = factorial_v(x) wolffd@0: wolffd@0: if size(x,2) == 1 wolffd@0: x = x'; wolffd@0: end wolffd@0: wolffd@0: r = []; wolffd@0: for y = x wolffd@0: r = [r factorial(y)]; wolffd@0: end