1

我需要计算二项分布的概率质量函数和累积分布函数。我想使用 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

4 回答 4

1

octave 提供了很好的分布 pdf、cdf、quantile 集合;它们必须从 octave 转换,但这是相对微不足道的(转换endifend、转换!=~=等;)参见例如octave binocdf以了解二项式 cdf 函数。

于 2009-12-11T20:43:02.860 回答
1

您可以使用函数NCHOOSEK来计算二项式系数。这样,您可以创建一个函数,计算k给定N和的一组值的概率质量函数值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返回的二项式系数很大时,您最终可能会丢失精度。一个非常好的替代方法是使用来自John D'ErricoMathWorks File Exchange上提交的Variable Precision Integer Arithmetic。通过将您的数字转换为他的类型,您可以避免精度损失。vpi

于 2009-12-11T18:07:37.550 回答
0

看起来对于二项分布的 CDF,我最好的选择是不完全 beta 函数 betainc

于 2009-12-11T19:12:10.710 回答
-1

对于 PDF

x=1:15
p=.45

c=binopdf(x,15,p)

plot(x,c)

同样CDF

D=binocdf(x,15,p) 

plot(x,D)
于 2016-03-11T04:33:41.903 回答