Esiste una semplice formula chiusa in termini di radici di un polinomio di grado 6.
In realtà è un po 'più semplice considerare un dado equo generale con d≥ 2 facce etichettati con i numeri 1 , 2 , … , d.
Sia eK il numero previsto di rotoli necessari per uguagliare o superare k . Per k ≤ 0 , eK= 0. Altrimenti l'aspettativa è uno in più dell'aspettativa del numero di rotoli per raggiungere il valore immediatamente precedente, che sarebbe tra k - d, k - d+ 1 , … , k - 1 , da dove
eK= 1 + 1d( ek - d+ ek - d+ 1+⋯+ek−1).(1)
Questa relazione di ricorrenza lineare ha una soluzione nella forma
ek=2kd+1+∑i=1daiλki(2)
dove λio sono i d complesse radici del polinomio
Td- 1d( Td- 1+ Td- 2+ ⋯ + T+ 1 ) .(3)
Le costanti un'io si trovano applicando la soluzione ( 2 ) ai valori k=−(d−1),−(d−2),…,−1,0 dove ek=0 in ogni caso. Ciò fornisce un insieme di equazioni d lineari nelle costanti d e ha una soluzione unica. Che la soluzione funzioni può essere dimostrata verificando la ricorrenza (1)usando il fatto che ogni radice soddisfa (3):
1 + 1dΣj = 1dek - j= 1 + 1dΣj = 1d( 2 ( k - j )d+ 1+ ∑i = 1dun'ioλk - jio)= 2 kd+ 1+ ∑i = 1dun'ioλk - dio[ 1d( 1 + λio+ ⋯ + λd- 1io) ]= 2 kd+ 1+ ∑i = 1dun'ioλk - dioλdio= 2 kd+ 1+ ∑i = 1dun'ioλKio= eK.
Questa soluzione a forma chiusa ci offre buoni modi per approssimare la risposta e valutarla accuratamente. (Per valori da piccoli a modesti di k , l'applicazione diretta della ricorrenza è una tecnica computazionale efficace.) Ad esempio, con d= 6 possiamo facilmente calcolare
e1000000= 285714.761905 …
Per approssimazioni, ci sarà una radice unica più grande λ+= 1 quindi alla fine (per K sufficientemente grande ) il termine λK+ dominerà i termini d in ( 2 ) .L'errore diminuirà in modo esponenziale in base alla seconda norma più piccola delle radici. Continuando l'esempio con k = 6 , il coefficiente di λ+ è a+=0.4761905 e la norma più piccola successiva è 0.7302500. (Per inciso, l'altro ai tendono ad essere molto vicino a1 nel formato.) Quindi possiamo approssimare il valore precedente,
e1000000≈2×1066+1+0.4761905=285714.761905…
con un errore dell'ordine di 0.7302500106≈10−314368.
Per dimostrare quanto sia pratica questa soluzione, ecco il R
codice che restituisce una funzione per valutare ek per qualsiasi k (nell'ambito dei calcoli in virgola mobile a doppia precisione) e non eccessivamente grande d (si bloccherà una volta d≫100 ):
die <- function(d, mult=1, cnst=1, start=rep(0,d)) {
# Create the companion matrix (its eigenvalues are the lambdas).
X <- matrix(c(0,1,rep(0,d-1)),d,d+1)
X[, d] <- mult/d
lambda <- eigen(X[, 1:d], symmetric=FALSE, only.values=TRUE)$values
# Find the coefficients that agree with the starting values.
u <- 2*cnst/(d+1)
a <- solve(t(outer(lambda, 1:d, `^`)), start - u*((1-d):0))
# This function assumes the starting values are all real numbers.
f <- Vectorize(function(i) Re(sum(a * lambda ^ (i+d))) + u*i)
list(f=f, lambda=lambda, a=a, multiplier=mult, offset=cnst)
}
Come esempio del suo utilizzo, qui calcola le aspettative per k = 1 , 2 , … , 16 :
round(die(6)$f(1:10), 3)
1.000 1.167 1.361 1.588 1.853 2.161 2.522 2.775 3.043 3.324 3.613 3.906 4.197 4.476 4.760 5.046
λioun'ioun'+.
(Se sei curioso di sapere a cosa die
servono gli altri parametri , esegui die(2, 2, 0, c(1,0))$f(1:10)
e vedi se riconosci l'output ;-). Questa generalizzazione ha aiutato a sviluppare e testare la funzione.)