1

假设我们做了一个实验,我们把 n 个球扔进 n 个罐子里。X 是一个自变量,描述了第一个罐子中的球数。构建函数返回满足 P(X>m)<1/n^2 的最小整数。

分布是二项式的,所以我编写了以下 matlab 函数:

function m = intpq3(n)
flag=0;
par=1/n^2;
m=0;
P=0;
%Since X is non-neative integer 
if(n==1)
    m=-1*Inf;
else
    while(flag==0 && m<=n)
        m=m+1;
         P=P+nchoosek(n,m)*(1/n)^m*(1-1/n)^(n-m);   

        if(1-P<=par)
            flag=1;
        end

    end
end
disp(m)
end

但是对于我给它的每一个'n',它都会返回错误或n-1。我究竟做错了什么?

4

1 回答 1

1

您的程序的以下版本似乎可以满足您的需求。据我所知,您的版本的问题是您没有包含m=0在您的总和中P,因此1-P一直太大。让程序输出数字并与纸笔计算进行比较总是一个好主意。

function [m,P] = intpq3(n,varargin);    

if nargin==2
   plt=varargin{1}; 
else
   plt = 0;
end

flag=0;
par=1/n^2;
m=0;
P=0;

disp(['1/n^2 =  ' num2str(par)]);

%Since X is non-neative integer 
if(n==1)
    m=-1*Inf;
else
    while m<n & flag==0
       P=P+nchoosek(n,m)*(1/n)^m*(1-1/n)^(n-m);   
       disp([' n= ' num2str(n)  ' m= ' num2str(m)  ' P(X>' num2str(m) ') ' num2str(1-P)])
        if(1-P<=par)
            flag=1;
        end
       m=m+1;
    end
end
disp(['mselect =  ' num2str(m-1)]);
end

以下也有助于诊断问题。它显示了 P(X>m) 的值(彩色点)在不同m的选择值处n。覆盖为虚线的是1/n^2

在此处输入图像描述

于 2013-08-17T14:56:56.197 回答