0

如果我掷硬币 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 语句,但没有运气。我该如何重复?

4

2 回答 2

3

尽管您的问题已解决,但您的代码中仍有注释:

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?
于 2014-08-31T10:06:22.923 回答
1

你根本不需要tails,你需要在外循环heads内设置回零。for z=1:1000

于 2014-08-30T23:30:17.853 回答