MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何在MATLAB中为二项式分布计算PMF和CDF? (https://www.labfans.com/bbs/showthread.php?t=22979)

poster 2019-12-10 16:49

如何在MATLAB中为二项式分布计算PMF和CDF?
 
我需要计算[URL="http://en.wikipedia.org/wiki/Binomial_distribution"]二项式分布[/URL]的概率质量函数和累积分布函数。我想使用MATLAB来做到这一点(原始MATLAB,没有工具箱)。我可以自己计算这些,但希望使用预定义的函数,但找不到任何函数。那里有东西吗?

function x = homebrew_binomial_pmf(N,p) x = [1]; for i = 1:N x = [0 x]*p + [x 0]*(1-p); end
回答:
您可以使用函数[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/nchoosek.html"]NCHOOSEK[/URL]来计算二项式系数。这样,您可以创建一个函数,计算给定N和p一组k值的概率质量函数的值:

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)^(Nk(i)); end end 要绘制概率质量函数,请执行以下操作:

k = 0:40; pmf = binom_dist(40,0.5,k); plot(k,pmf,'r.'); 累积分布函数可以使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cumsum.html"]CUMSUM[/URL]从概率质量函数中[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cumsum.html"]找到[/URL] :

cummDist = cumsum(pmf); plot(k,cummDist,'r.'); [B]注意:[/B]当从[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/nchoosek.html"]NCHOOSEK[/URL]返回的二项式系数很大时,您可能最终会失去精度。一个非常好的替代方法是在[URL="http://www.mathworks.com/matlabcentral/fileexchange/"]MathWorks文件交换[/URL]上使用[URL="http://www.mathworks.com/matlabcentral/fileexchange/authors/679"]John D'Errico[/URL]提交的“ [URL="http://www.mathworks.com/matlabcentral/fileexchange/22725-variable-precision-integer-arithmetic"]可变精度整数算术”[/URL] 。通过将数字转换为他的vpi类型,可以避免精度损失。



[url=https://stackoverflow.com/questions/1889778]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:16

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.