Вдохновленный этой статьей: Statistics of Coin-Toss Patterns, я провел симуляцию Монте-Карло для определения ожидаемого числа бросания монеты, чтобы получить определенный шаблон с помощью Excel VBA. Следующий код - это метод Монте-Карло для подбрасывания справедливой монеты, чтобы получить шаблон HTH, где H - голова (1), а T - хвост (0).Моделирование Монте-Карло для броска монеты для получения определенного рисунка
Sub Tossing_Coin()
Dim Toss(1000000) As Double, NToss(1000000) As Double, AVToss(1000000) As Double
t0 = Timer
Sheet2.Cells.Clear
a = 0
For j = 1 To 1000000
p1 = Rnd()
If p1 <= 0.5 Then
Toss(1) = 1
Else
Toss(1) = 0
End If
p2 = Rnd()
If p2 <= 0.5 Then
Toss(2) = 1
Else
Toss(2) = 0
End If
i = 2
Do
p3 = Rnd()
If p3 <= 0.5 Then
Toss(i + 1) = 1
Else
Toss(i + 1) = 0
End If
i = i + 1
Loop Until Toss(i - 2) = 1 And Toss(i - 1) = 0 And Toss(i) = 1
NToss(j) = i
a = a + NToss(j)
AVToss(j) = a/j
b = AVToss(j)
Next j
MsgBox "The expected number of tossing is " & b & "." _
& vbNewLine & "The running time of simulation is " & Round(Timer - t0, 2) & " s."
End Sub
Выход программы, как показано ниже:
что согласуется с результатом, как показано в статье. Другие образцы для подбрасывания справедливой монеты также соответствуют. Несмотря на результаты, я все еще не уверен, правильно ли написана программа, или нет. Мое сомнение возникает, когда монета несправедлива, то есть p1
, p2
и p3
не равны 0.5, так как у меня нет никакой информации, чтобы проверить ее точность. Я также хочу знать, как написать эффективную программу в VBA Excel или R, чтобы выполнить симуляцию выше для более длинного шаблона, такого как THTHTHTHT, THTTHHTHTTH и т. Д., И его цикл составляет более 1 000 000 (возможно, 100 000 000 или 1 000 000 000), но все же довольно быстро? Есть идеи?
Спасибо за ваш ответ, но вы можете дать дополнительные комментарии к каждой строке, так как я не получаю его на некоторых частях, таких как: ожидаемый = ожидаемый + ожидаемый - (средний $ (последовательность, i, 1) = "T") ',' mask = (2^(Len (последовательность) * 2 + 1)) - (2^Len (последовательность)) - 1' и т. д. В любом случае, как вы можете гарантировать, что ответ по-прежнему правильный, если я изменю вероятность получения головы, например: p = 0,3? Есть ли математическое доказательство для поддержки вашего моделирования? –