Existe uma fórmula simples e fechada em termos das raízes de um polinômio de grau 6.
Na verdade, é um pouco mais fácil considerar um dado justo geral com d≥2 faces rotuladas com os números 1,2,…,d.
Vamos ek ser o número esperado de rolos necessários para igualar ou exceder k. Para k≤0, ek=0. Caso contrário, a expectativa é uma mais que a expectativa do número de rolagens para atingir o valor imediatamente anterior, que estaria entre k−d,k−d+1,…,k−1, onde
ek=1+1d(ek−d+ek−d+1+⋯+ek−1).(1)
Essa relação de recorrência linear tem uma solução na forma
ek=2kd+1+∑i=1daiλki(2)
onde λi são as raízes d complexas do polinômio
Td−1d(Td−1+Td−2+⋯+T+1).(3)
As constantes de ai encontram-se aplicando-se a solução para os valores , onde em todos os casos. Isso fornece um conjunto de equações lineares nas constantes e possui uma solução única. Que a solução funciona pode ser demonstrada verificando a recorrência usando o fato de que toda raiz satisfaz(2)k=−(d−1),−(d−2),…,−1,0ek=0dd(1)(3):
1+1d∑j=1dek−j=1+1d∑j=1d(2(k−j)d+1+∑i=1daiλk−ji)=2kd+1+∑i=1daiλk−di[1d(1+λi+⋯+λd−1i)]=2kd+1+∑i=1daiλk−diλdi=2kd+1+∑i=1daiλki=ek.
Esta solução de formulário fechado nos fornece boas maneiras de aproximar a resposta e também avaliar com precisão. (Para valores pequenos a modestos de a aplicação direta da recorrência é uma técnica computacional eficaz.) Por exemplo, com , podemos calcular prontamentek,d=6
e1000000=285714.761905…
Para aproximações, haverá uma maior raiz única assim, eventualmente (para suficientemente grande ), o termo dominará os termos emO erro diminuirá exponencialmente de acordo com a segunda menor norma das raízes. Continuando o exemplo com o coeficiente de é e a próxima menor norma é (Aliás, o outro tende a ser muito próximo de em tamanho.) Assim, podemos aproximar o valor anterior comoλ+=1kλk+d(2).k = 6 , λ + a + = 0,4761905 0,7302500. a i 1k=6,λ+a+=0.47619050.7302500.ai1
e1000000≈2×1066+1+0.4761905=285714.761905…
com um erro da ordem de0.7302500106≈10−314368.
Para demonstrar como essa solução é prática, eis o R
código que retorna uma função para avaliar para qualquer (dentro do escopo de cálculos de ponto flutuante de precisão dupla) e não muito grande (será atolado uma vez que ):ekkdd≫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)
}
Como exemplo de seu uso, aqui calcula as expectativas parak=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
O objeto retornado inclui as raízes e seus multiplicadores para análises adicionais. O primeiro componente da matriz de multiplicadores é o coeficiente útilλiaia+.
(Se você está curioso para que die
servem os outros parâmetros , execute die(2, 2, 0, c(1,0))$f(1:10)
e veja se reconhece a saída ;-). Essa generalização ajudou no desenvolvimento e no teste da função.)