Существует простая замкнутая формула в терминах корней многочлена степени 6.
На самом деле немного проще рассмотреть обычный честный кристалл с d≥2 гранями, помеченными номерами 1,2,…,d.
Пусть ek будет ожидаемым числом бросков, необходимым для того, чтобы равняться или превышать k. Для k≤0, ek=0. В противном случае ожидание на единицу больше, чем ожидание количества бросков для достижения непосредственно предшествующего значения, которое будет среди k−d,k−d+1,…,k−1, откуда
ek=1+1d(ek−d+ek−d+1+⋯+ek−1).(1)
Это линейное рекуррентное соотношение имеет решение в виде
ek=2kd+1+∑i=1daiλki(2)
где λi - d комплексные корни многочлена
Td−1d(Td−1+Td−2+⋯+T+1).(3)
Константы ai находятся путем применения решения (2) к значениям k=−(d−1),−(d−2),…,−1,0 где ek=0 в каждом случае. Это дает набор d линейных уравнений по d константам и имеет единственное решение. То, что решение работает, может быть продемонстрировано проверкой повторения (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.
Это решение в закрытой форме дает нам хорошие способы приблизить ответ, а также оценить его точно. (Для малых и умеренных значений k, непосредственное применение рецидива является эффективной вычислительной техникой). Например, при dзнак равно6 мы можем легко вычислить
e1000000= 285714,761905 …
Для приближений будет существовать единственный наибольший корень λ+= 1 поэтому в конечном итоге (при достаточно большом К ) член λК+ будет доминировать над d членами в ( 2 ) .Ошибка будет экспоненциально уменьшаться в соответствии со второй наименьшей нормой корней. Продолжая пример с к = 6 , коэффициент λ+ представляет + = 0,4761905 , а следующий-наименьшая норма 0,7302500. (Кстати, другойa+= 0,47619050,7302500.aя склонен быть очень близким к1 размеру.) Таким образом, мы можем приблизить предыдущее значение как
е1000000≈ 2 × 1066 + 1+ 0,4761905 = 285714,761905 ...
с ошибкой порядка 0.7302500106≈ 10- 314368,
Чтобы продемонстрировать, насколько практичным является это решение, ниже приведен R
код, который возвращает функцию для оценки еК для любого К (в рамках вычислений с плавающей запятой двойной точности) и не слишком большого d (оно уменьшится, когда 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)
}
В качестве примера его использования здесь рассчитываются ожидания для 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
Возвращаемый объект включает в себя корни λя и их множители aя для дальнейшего анализа. Первым компонентом массива множителей является полезный коэффициент a+,
(Если вам интересно, для чего предназначены другие параметры die
, выполните die(2, 2, 0, c(1,0))$f(1:10)
и посмотрите, распознаете ли вы вывод ;-). Это обобщение помогло в разработке и тестировании функции.)