【问题标题】:Calculating the probability of success in k (or less) Bernoulli trials out of n using matlab使用matlab计算n次(或更少)次伯努利试验中成功的概率
【发布时间】:2019-11-11 12:32:39
【问题描述】:

我正在尝试计算 100 次伯努利试验中 70 次(或更少)的成功概率。我用 Matlab 编写了它。但是,我得到的概率是 1(它不可能是 1,因为它在所有 100 次试验中都没有成功)。

我的功能正常吗?

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 次成功的概率。

【问题讨论】:

  • 在询问数学问题时,将您尝试实现的数学包含在问题中是非常重要的。如果不这样做,您将潜在回答者的范围从“具有 MATLAB 知识的人”缩小到“具有 MATLAB 知识且事先了解您的特定数学问题的人”。请edit这个问题解释你正在尝试做什么,以及你的预期结果是什么@ 987654323@ - 你应该很容易手动做一个小试验示例来验证预期的输出我认为
  • @Wolfie:好的,谢谢你的提示。我试图将它添加到 edit 部分。我希望它足够清楚
  • 这可以通过分析或经验来完成。你想要第 70 次试验第一次成功的概率吗?或者 100 次试验中有 70 次成功的概率?基础分布因具体问题(几何与二项式)而异。此外,如果您说“第 70 次试验成功”,那只是意味着使用 CDF 可能更方便。
  • @SecretAgentMan,我需要 100 次试验中有 70 次成功的概率
  • 100 次试验中的 成功次数 分布为 Binomial(n = 100, p = P(成功))分布。 在 100 次试验中恰好有 70 次成功的概率binopdf(70,100,0.5) 如果p = 0.5

标签: matlab performance statistics probability binomial-cdf


【解决方案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。但是,我们知道,它必须略小于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2023-02-01
    • 1970-01-01
    相关资源
    最近更新 更多