假设我们做了一个实验,我们将n个球扔进n个罐子里。 X是一个独立变量,用于描述第一个jar中的球数。构建函数返回满足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。我做错了什么?
答案 0 :(得分: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
以下内容也有助于诊断问题。它在m
的选择值处显示不同n
的P(X> m)(彩色点)的值。以虚线覆盖为1/n^2
。