【问题标题】:flip coin 100 times get exactly 50 Matlab抛硬币 100 次正好得到 50 Matlab
【发布时间】:2014-10-24 14:26:20
【问题描述】:

如果我掷硬币 100 次,正好 50 次正面朝上的概率是多少?我的想法是从 1000 次中获得 100 次硬币翻转中恰好出现 50 次的次数,然后将其除以 1000,即事件数。 我必须在 Matlab 中对这个实验进行建模。 我知道掷硬币 100 次并检索正面的数量并将计数添加到正好 50 个正面的数量是一个事件。但我不知道如何重复该事件 1000 次或 10000 次。

这是我目前写的代码:

total_flips=100;
heads=0;
tails=0;
n=0;
for z=1:1000
%tosses 100 coins 
for r=1:100
    %randomizes to choose 1 or 0, 0 being heads
    coin=floor(2*rand(1));
    if (coin==0)
        heads=heads+1;
    else
        tails=tails+1;
    end
end

if heads==50
    n=n+1;
end
end

我尝试在 for 循环中包含 for 循环和 if 语句,但没有运气。如何重复?

【问题讨论】:

  • 请告诉我们您尝试将 for 循环和 if 语句放在另一个 for 循环中。这是正确的做法,让我们看看你做错了什么。
  • 这是一道数学题,你可以分析解决,你不需要matlab来解决...
  • 我知道,但是该课程需要提供 Matlab 模型以及计算。
  • 我遇到的问题是,当我尝试重复 for 循环和 for 循环中的 if 语句时,n 不计数
  • 注意概率理论上可以计算为binopdf(50, 100, .5)

标签: matlab for-loop coin-flipping


【解决方案1】:

虽然您的问题已解决,但您的代码中出现了 cmets:

1) 你设置了变量total_flips=100,但你没有在你的for循环中使用它,它从1到100。它可以从1到total_flips

2) 省略 for 循环:虽然这不是您的问题,但您的代码可以优化。您的问题不需要单个 for 循环:

repititions = 1000;
total_flips = 100;
coin_flip_matrix = floor(2*rand(total_flips, repititions));  % all coin flips: one column per repitition
num_of_heads = sum(coin_flip_matrix); % number of heads for each repitition (shaped: 1 x repitions)
n = sum(num_of_heads == 50) % how often did we hit 50?

【讨论】:

    【解决方案2】:

    您根本不需要tails,您需要在外部for z=1:1000 循环内将heads 设置为零。

    【讨论】:

    • 哇,谢谢,完全错过了。我包括尾巴只是为了参考,看看第一部分是否有效。非常感谢!!
    • @azumakazuma 如果分析器帮助您解决了问题,请考虑点击答案旁边的复选标记以获得奖励。欢迎来到!
    猜你喜欢
    • 2016-03-28
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多