Istnieje prosta zamknięta formuła pod względem pierwiastków wielomianu stopnia 6.
W rzeczywistości trochę łatwiej jest rozważyć ogólną uczciwą kostkę d≥2 twarze oznaczone cyframi 1,2,…,d.
Pozwolić ek być oczekiwaną liczbą rzutów potrzebnych do wyrównania lub przekroczenia k. Dla k ≤ 0, mik= 0 W przeciwnym razie oczekiwanie jest o jeden większe niż oczekiwanie liczby rolek, aby osiągnąć bezpośrednio poprzedzającą wartość, która byłaby wśród k−d,k−d+1,…,k−1, skąd
ek=1+1d(ek−d+ek−d+1+⋯+ek−1).(1)
Ta liniowa relacja powtarzalności ma rozwiązanie w formie
ek=2kd+1+∑i=1daiλki(2)
gdzie λi są d złożone pierwiastki wielomianu
Td−1d(Td−1+Td−2+⋯+T+1).(3)
Stałe ai można znaleźć, stosując rozwiązanie (2) do wartości k =−(d- 1 ) ,−(d−2),…,−1,0 gdzie ek=0w każdym przypadku. Daje to zestawd równania liniowe w dstałe i ma unikalne rozwiązanie. To, że rozwiązanie działa, można wykazać, weryfikując jego powtarzalność(1) wykorzystując fakt, że każdy root spełnia (3):
1 +1re∑j = 1remik - j= 1 +1re∑j = 1re(2 ( k - j )re+ 1+∑i = 1rezajaλk - jja)=2 tysre+ 1+∑i = 1rezajaλk - dja[1re( 1 +λja+ ⋯ +λre- 1ja) ]=2 tysre+ 1+∑i = 1rezajaλk - djaλreja=2 tysre+ 1+∑i = 1rezajaλkja=mik.
To rozwiązanie w formie zamkniętej daje nam dobre sposoby na przybliżenie odpowiedzi i jej dokładną ocenę. (Dla małych do skromnych wartościk , bezpośrednie zastosowanie nawrotu jest skuteczną techniką obliczeniową.) Na przykład za pomocą re= 6 możemy łatwo obliczyć
e1000000=285714.761905…
Dla przybliżeń będzie unikalny największy root λ+=1 więc w końcu (dla wystarczająco dużych k) termin λk+ zdominuje d warunki w (2).Błąd zmniejszy się wykładniczo zgodnie z drugą najmniejszą normą pierwiastków. Kontynuując przykład zk=6, współczynnik λ+ jest a+=0.4761905 a następną najmniejszą normą jest 0.7302500. (Nawiasem mówiąc, drugi ai wydają się być bardzo blisko 1 pod względem wielkości.) W ten sposób możemy przybliżyć poprzednią wartość jako
e1000000≈2×1066+1+0.4761905=285714.761905…
z błędem w kolejności 0.7302500106≈10−314368.
Aby zademonstrować praktyczność tego rozwiązania, oto R
kod, który zwraca funkcję do ocenyek dla każdego k (w zakresie obliczeń zmiennoprzecinkowych podwójnej precyzji) i niezbyt dużych d (ugrzęźnie raz 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)
}
Jako przykład użycia oblicza tutaj oczekiwania 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
Obiekt, który zwraca, zawiera korzenie λi i ich mnożniki aido dalszej analizy. Pierwszym składnikiem tablicy mnożników jest współczynnik użytecznya+.
(Jeśli jesteś ciekaw, do czego die
służą pozostałe parametry , uruchom die(2, 2, 0, c(1,0))$f(1:10)
i sprawdź, czy rozpoznajesz wynik ;-). To uogólnienie pomogło w opracowaniu i przetestowaniu funkcji).