我需要计算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
答案 0 :(得分: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返回的二项式系数很大时,最终会失去精度。一个非常好的选择是使用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)