Если я правильно понял, то проблема состоит в том, чтобы найти распределение вероятностей для времени, в которое заканчивается первый прогон или более голов.n
Изменить Вероятности можно точно и быстро определить с помощью умножения матриц, а также можно аналитически вычислить среднее значение как а дисперсию - как где , но, вероятно, не существует простой замкнутой формы для самого распределения. Выше определенного числа подбрасываний монет распределение по сути является геометрическим распределением: имеет смысл использовать эту форму для больших .σ 2 = 2 n + 2 ( μ - n - 3 ) - μ 2 + 5 μ μ = μ - + 1 тμ−=2n+1−1σ2=2n+2(μ−n−3)−μ2+5μμ=μ−+1t
Эволюция во времени распределения вероятностей в пространстве состояний может быть смоделирована с использованием матрицы переходов для состояний, где количество последовательных подбрасываний монет. Состояния следующие:n =k=n+2n=
- Штат , без головыH0
- Государство , возглавляю, i 1 ≤ i ≤ ( n - 1 )Hii1≤i≤(n−1)
- Штат , или более глав nHnn
- Состояние , или более голов, за которыми следует хвост nH∗n
Как только вы попадете в состояние вы не сможете вернуться ни в одно из других состояний.H∗
Вероятности перехода состояний в состояния следующие
- Состояние : вероятность из ,1H0 Hя12Hi , т.е. включает себя, но не состояние H ni=0,…,n−1Hn
- Состояние : вероятность 1Hi изHi-112Hi−1
- Состояние : вероятность 1Hn изHn-1,Hn, т.е. из состояния сn-1головами и самого себя12Hn−1,Hnn−1
- Состояние : вероятность 1H∗ изHnи вероятность 1 изH∗(сама по себе)12HnH∗
Так, например, для это дает матрицу переходаn=4
X=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪H0H1H2H3H4H∗H012120000H112012000H212001200H312000120H400001212H∗000001⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪
Для случая начальный вектор вероятностей p равен p = ( 1 , 0 , 0 , 0 , 0 , 0 ) . В общем случае исходный вектор имеет
p i = { 1 i = 0 0 i > 0n=4pp=(1,0,0,0,0,0)
pi={10i=0i>0
Вектор - это распределение вероятностей в пространстве для любого заданного времени. Требуемый cdf представляет собой cdf во времени и представляет собой вероятность того, что по крайней мере n бросков монет завершится к моменту времени t . Его можно записать как ( X t + 1 p ) k , отмечая, что мы достигаем состояния H ∗ 1 временного шага после последнего в ходе последовательных бросков монет.pnt(Xt+1p)kH∗
Требуемое значение pmf во времени может быть записано как . Однако численно это включает в себя удаление очень маленького числа из гораздо большего числа ( ≈ 1 ) и ограничение точности. Поэтому в расчетах лучше установить X k , k = 0, а не 1. Тогда писать X ′ для полученной матрицы X ′ = X | X k , k = 0(Xt+1p)k−(Xtp)k≈1Xk,k=0X′X′=X|Xk,k=0, pmf равен . Это то, что реализовано в простой программе R ниже, которая работает для любого n ≥ 2 ,(X′t+1p)kn≥2
n=4
k=n+2
X=matrix(c(rep(1,n),0,0, # first row
rep(c(1,rep(0,k)),n-2), # to half-way thru penultimate row
1,rep(0,k),1,1,rep(0,k-1),1,0), # replace 0 by 2 for cdf
byrow=T,nrow=k)/2
X
t=10000
pt=rep(0,t) # probability at time t
pv=c(1,rep(0,k-1)) # probability vector
for(i in 1:(t+1)) {
#pvk=pv[k]; # if calculating via cdf
pv = X %*% pv;
#pt[i-1]=pv[k]-pvk # if calculating via cdf
pt[i-1]=pv[k] # if calculating pmf
}
m=sum((1:t)*pt)
v=sum((1:t)^2*pt)-m^2
c(m, v)
par(mfrow=c(3,1))
plot(pt[1:100],type="l")
plot(pt[10:110],type="l")
plot(pt[1010:1110],type="l")
Верхний график показывает pmf между 0 и 100. Нижние два графика показывают pmf между 10 и 110, а также между 1010 и 1110, иллюстрируя самоподобие и тот факт, что, как говорит @Glen_b, распределение выглядит так, как будто оно может быть аппроксимируется геометрическим распределением после периода успокоения.
Xtpt+1≈c(n)ptc(n)2n+1cn(c−1)+1=0ntnp100n=2t
Я подозреваю (ed), что может быть закрытой формой, доступной для распределения, потому что средние значения и отклонения, как я рассчитал их следующим образом
n2345678910Mean715316312725551110232047Variance241447363392147206169625344010291204151296
t=100000
n=2,…,10
pi,tHitq∗,tH∗t
- tpi,t,0≤i≤nq∗,ti
- p∗,tt
t+1t
p0,t+1=12p0,t+12p1,t+…12pn−1,t=12∑i=0n−1pi,t=12(1−pn,t−q∗,t)
H0Hn−1n−1pn−1,t+n−1=12n−1p0,tpn−1,t+n=12n(1−pn,t−q∗,t)
Hnt+1pn,t+1=12pn,t+12pn−1,t=12pn,t+12n+1(1−pn,t−n−q∗,t−n)(†)
q∗,t+1−q∗,t=12pn,t⟹pn,t=2q∗,t+1−2q∗,t2q∗,t+2−2q∗,t+1=q∗,t+1−q∗,t+12n+1(1−2q∗,t−n+1+q∗,t−n)
t→t+n2q∗,t+n+2−3q∗,t+n+1+q∗,t+n+12nq∗,t+1−12n+1q∗,t−12n+1=0
n=4n=6n=6t=1:994;v=2*q[t+8]-3*q[t+7]+q[t+6]+q[t+1]/2**6-q[t]/2**7-1/2**7
Изменить Я не вижу, куда идти, чтобы найти закрытую форму из этого отношения повторения. Тем не менее, это возможно , чтобы получить замкнутую форму для среднего.
(†)p∗,t+1=12pn,t
pn,t+12n+1(2p∗,t+n+2−p∗,t+n+1)+2p∗,t+1=12pn,t+12n+1(1−pn,t−n−q∗,t−n)(†)=1−q∗,t
t=0∞E[X]=∑∞x=0(1−F(x))p∗,t2n+1∑t=0∞(2p∗,t+n+2−p∗,t+n+1)+2∑t=0∞p∗,t+12n+1(2(1−12n+1)−1)+22n+1=∑t=0∞(1−q∗,t)=μ=μ
H∗
E[X2]=∑∞x=0(2x+1)(1−F(x))
∑t=0∞(2t+1)(2n+1(2p∗,t+n+2−p∗,t+n+1)+2p∗,t+1)2∑t=0∞t(2n+1(2p∗,t+n+2−p∗,t+n+1)+2p∗,t+1)+μ2n+2(2(μ−(n+2)+12n+1)−(μ−(n+1)))+4(μ−1)+μ2n+2(2(μ−(n+2))−(μ−(n+1)))+5μ2n+2(μ−n−3)+5μ2n+2(μ−n−3)−μ2+5μ=∑t=0∞(2t+1)(1−q∗,t)=σ2+μ2=σ2+μ2=σ2+μ2=σ2+μ2=σ2
Средство и отклонения могут быть легко созданы программно. Например, чтобы проверить средства и отклонения из таблицы выше, используйте
n=2:10
m=c(0,2**(n+1))
v=2**(n+2)*(m[n]-n-3) + 5*m[n] - m[n]^2
Наконец, я не уверен, что вы хотели, когда вы написали
когда хвост поражает и ломает полосу голов, отсчет начинается снова со следующего броска.
nn
μ−1μ+1Xk,k,=0X1,k=1H0H∗n=4
H0H1H2H3H4H∗probability0.484848480.242424240.121212120.060606060.060606060.03030303
H∗=1/0.03030303=33=μ+1
Приложение : программа Python, используемая для генерации точных вероятностей n
= количества последовательных N
хедс-бросков.
import itertools, pylab
def countinlist(n, N):
count = [0] * N
sub = 'h'*n+'t'
for string in itertools.imap(''.join, itertools.product('ht', repeat=N+1)):
f = string.find(sub)
if (f>=0):
f = f + n -1 # don't count t, and index in count from zero
count[f] = count[f] +1
# uncomment the following line to print all matches
# print "found at", f+1, "in", string
return count, 1/float((2**(N+1)))
n = 4
N = 24
counts, probperevent = countinlist(n,N)
probs = [count*probperevent for count in counts]
for i in range(N):
print '{0:2d} {1:.10f}'.format(i+1,probs[i])
pylab.title('Probabilities of getting {0} consecutive heads in {1} tosses'.format(n, N))
pylab.xlabel('toss')
pylab.ylabel('probability')
pylab.plot(range(1,(N+1)), probs, 'o')
pylab.show()