当我使用isWinConfidence切换isWinDefault时,我得到了截然不同的结果.我觉得他们应该是一样的.我的代码或统计数据中是否存在我误解的错误?
此测试旨在模拟单次硬币1倍与硬币翻转多次.
问题是
如果P(x)是70%那么p(x)*100应该在70%的时间内> = 70,不是吗?
谢谢.
private void TestWin()
{
double headsUp = 0;
double testRuns = 100;
for (double i = 0; i < testRuns; i++)
{
if (IsWinConfidence())
{
headsUp++;
}
}
label1.Text = "Probability of Heads is " + headsUp /testRuns;
}
private bool IsWinDefault()
{
if (r.NextDouble() <= .7)
{
return true;
}
return false;
}
private bool IsWinConfidence()
{
int headsCount = 0;
for (double x = 0; x < 100; x++)
{
if (IsWinDefault())
headsCount++;
}
double pHeadsCount = headsCount / 100d;
if (pHeadsCount >= .7 )
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是简单的答案:
70% 的概率意味着平均抛 100 次硬币会产生 70 次正面朝上。然而,有时会超过 70,有时会更少。
换句话说,每批抛 100 次硬币,正面朝上的数量将接近 70 个。有时低于 70,有时高于 70,有时正好 70。
因此,如果数字在 70 左右波动,那么如果您询问“它在 70 或等于 70 上方波动的频率”,您将得到的答案是“大约 50% 的时间”,这是理所当然的。
所以你没有用你的代码问正确的问题。
事实上,将 IsWinConfidence 循环中的数字增加到更高的值会得到接近 50 的数字。
让我们在这里分析一下你们的论点。
你是说如果你有:
一枚有偏差的硬币,70% 的情况下,落地时正面朝上,30% 的情况下,落地时正面朝下
那么你是说:
如果我抛硬币 100 次,正面朝上的次数应该超过 70 次
一者并不导致另一者,你的论点在这里有一个缺陷。概率与保证无关,而与平均值有关。
如果概率是绝对的,你的第二个陈述应该是:
如果我抛硬币 100 次,我应该得到 70 次正面朝上
注意这里缺少“超过”。
相反,第一个参数的含义是:
如果我抛硬币 100 次,然后再抛 100 次,然后再抛 100 次,然后再抛 100 次,以此类推,那么平均每抛 100 次就会有 70 次正面朝上
现在,我对概率计算了解不够,无法分解你的循环和计数,但我确实知道,只要遵循逻辑,你的论点就会失败。
让我们尝试另一种方法。
如果硬币是均匀的,尽管有偏差,这意味着在抛 100 次硬币中,有时会得到超过 70 次,有时会少于 70 次。
在我天真的想法中,这意味着……平均而言,你只有一半的时间会掷到 70 次以上的硬币。
通过将循环中的数字增加到 100.000,我得到的置信函数返回接近 50。这似乎支持了我的理论。
但正如我所说,我成为概率专家(甚至涉足者)的机会小于零。
| 归档时间: |
|
| 查看次数: |
1584 次 |
| 最近记录: |