2014-08-30 54 views
0

如果我將一個硬幣翻轉100次,那麼正好有50個硬幣的概率是多少?我的想法是在1000次硬幣翻轉中出現50次,並將其除以1000,這是事件的數量。 我必須在Matlab中對此實驗進行建模。 據我所知,翻轉一枚硬幣100次,檢索頭部數量並增加一個數量到正好50個頭部的數量是一個事件。但我不知道如何重複1000次或10000次。翻轉硬幣100次得到正好50個Matlab

這是迄今爲止我所編寫的代碼:

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 

我試圖涵蓋的循環和內是否爲一個循環語句,但沒有運氣。我如何重複它?

+0

請向我們展示您嘗試將for循環和if語句放在另一個for循環中。這是正確的方法,讓我們看看你做錯了什麼。 – 2014-08-30 23:17:24

+0

這是一個數學問題,你可以解決分析,你不需要matlab的... – bla 2014-08-30 23:20:26

+0

我知道,但類需要一個Matlab模型來呈現以及計算。 – azumakazuma 2014-08-30 23:21:28

回答

1

根本不需要tails,並且您需要在外部for z=1:1000循環內將heads設置回零。

+0

哇謝謝,完全錯過了。我包括尾巴只是爲了引用,看看第一部分是否工作。非常感謝你!! – azumakazuma 2014-08-30 23:36:31

+0

@azumakazuma如果anser幫助你解決了你的問題,請考慮點擊獎勵信用答案旁邊的複選標記。歡迎來到SO! – 2014-08-31 02:05:01

2

雖然你的問題就解決了,下面就是我對你的代碼註釋:

1)您設置變量total_flips=100,但你不使用它你的for循環,哪裏就有奇蹟從1到100。可以從1到total_flips

2)省略for-loops:雖然這不是你的問題,但你的代碼可以優化。您不需要針對您的問題使用單個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? 
+0

+1用於矢量化 – 2014-08-31 10:57:39