我正在尝试计算100项试验中有70项(或更少)伯努利试验成功的可能性。我是用Matlab编写的。但是,我得到的概率为1(由于在所有100次试验中均未成功,所以不可能为1)。
我的功能还可以吗?
syms k
f = nchoosek(100,k)*0.5^k*0.5^(100-k);
F = double(symsum(nchoosek(100,k)*0.5^k*0.5^(100-k),k,0,70));
如果是的话,我该如何在Matlab中获得更准确的冲销?
谢谢
修改: 我有一个二进制矢量,表示n次试验中的成功/失败(例如掷硬币100次)。我需要样本错误(统计信息的方式..但我不知道统计信息)。因此,我认为也许我将尝试计算“我在所有试验中都离正确有多远”,在我的代码中应为1-F。但是,那么100中有70次成功给了我error = 0,这显然是不正确的。
edit2 :在我给的示例中,我需要100次试验中有70次成功的可能性。
答案 0 :(得分:1)
您确实拥有回答此问题所需的一切。
在您发布的公式中,您将概率总计为0到70,即它将计算出0或1或2 ..或70成功的概率,这意味着70或更少的成功。
没有总和,您将获得完全k
个成功的概率。准确获得70次成功的概率是:
k = 70;
f = nchoosek(100,k)*0.5^k*0.5^(100-k)
Warning: Result may not be exact. Coefficient is greater than 9.007199e+15 and is only
accurate to 15 digits
> In nchoosek (line 92)
f =
2.3171e-05
您会收到一条警告,提示nchoosek(100,70)
的计算不正确(请参见下文,这是一种更好的方法)。
要计算获得70个或更少成功的概率,请对获得0或1或.. 70个成功的概率求和:
>> f = 0;
>> for k=0:70;
f = f + nchoosek(100,k)*.5^k*.5^(100-k);
end
您会收到很多警告,但可以看看f
:
>> f
f =
1.0000
如您所见,如果四舍五入到四位数,则概率为1。但是,我们知道,它一定要比一个小。如果我们要求Matlab显示更多数字:
>> format long
我们看到它不完全是1:
>> f
f =
0.999983919992352
如果您计算1-f
,您将看到结果不是0
(我转回显示较少的数字):
>> format short
>> 1-f
ans =
1.6080e-05
为了摆脱警告并简化计算概率的代码,Matlab提供了一些函数来处理二项式分布。要获得70次成功的概率,请使用
>> binopdf(70,100,.5)
ans =
2.3171e-05
并获得70或更少的成功:
>> format long
>> binocdf(70,100,.5)
ans =
0.999983919992352