如何在MATLAB中计算二项分布的PMF和CDF?

时间:2009-12-11 17:55:42

标签: matlab probability

我需要计算binomial distribution的概率质量函数和累积分布函数。我想用MATLAB来做这个(原始MATLAB,没有工具箱)。我可以自己计算,但希望使用预定义的功能,但找不到任何功能。那里有什么东西吗?

function x = homebrew_binomial_pmf(N,p)
    x = [1];
    for i = 1:N
       x = [0 x]*p + [x 0]*(1-p);
    end

4 个答案:

答案 0 :(得分:1)

您可以使用函数NCHOOSEK来计算二项式系数。有了它,您可以创建一个函数来计算给定kN的一组p值的概率质量函数的值:

function pmf = binom_dist(N,p,k)
  nValues = numel(k);
  pmf = zeros(1,nValues);
  for i = 1:nValues
    pmf(i) = nchoosek(N,k(i))*p^k(i)*(1-p)^(N-k(i));
  end
end

要绘制概率质量函数,您可以执行以下操作:

k = 0:40;
pmf = binom_dist(40,0.5,k);
plot(k,pmf,'r.');

可以使用CUMSUM

从概率质量函数中找到累积分布函数
cummDist = cumsum(pmf);
plot(k,cummDist,'r.');

注意:当从NCHOOSEK返回的二项式系数很大时,最终会失去精度。一个非常好的选择是使用Variable Precision Integer Arithmetic上来自John D'Errico的提交MathWorks File Exchange。通过将您的数字转换为vpi类型,您可以避免精确丢失。

答案 1 :(得分:1)

octave提供了很好的分布pdf,cdf,quantile;它们必须从八度音阶翻译,但这相对简单(将endif转换为end,将!=转换为~=等等;) octave binocdf用于二项式cdf函数。

答案 2 :(得分:0)

答案 3 :(得分:-1)

对于PDF

x=1:15
p=.45

c=binopdf(x,15,p)

plot(x,c)

同样CDF

D=binocdf(x,15,p) 

plot(x,D)