根据6阶多项式的根有一个简单的封闭式。
实际上,考虑带有标有数字的普通公平模子要容易一些d≥21,2,…,d.
令为等于或超过的预期滚动 对于 否则,期望是一个大于轧辊的数量的期望到达前次值,这将是中从那里ekk.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)
其中是多项式的复数根λid
Td−1d(Td−1+Td−2+⋯+T+1).(3)
常数通过将解应用于值其中每种情况。这给出了常数中的线性方程组,并且具有唯一的解。通过使用每个根都满足的事实来验证重复可以证明该解决方案有效ai(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.
这种封闭形式的解决方案为我们提供了一种近似答案以及准确评估答案的好方法。 (对于中小值直接应用递归是一种有效的计算技术。)例如,对于我们可以轻松地进行计算k,d=6
e1000000=285714.761905…
对于近似值,将有一个唯一的最大根因此最终(对于足够大的)项将主导的项误差将根据根的第二最小范数成倍减少。继续该示例,其中的系数为,第二个范数为 (顺便说一下,另一个往往非常接近)因此,我们可以将前一个值近似为λ+=1kλk+d(2).k=6,λ+a+=0.47619050.7302500.ai1
e1000000≈2×1066+1+0.4761905=285714.761905…
误差0.7302500106≈10−314368.
为了说明该解决方案的实用性,以下R
代码返回一个函数,用于对任何(在双精度浮点计算的范围内)而不是过大的(一旦会停顿),求的值: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)
}
作为其用法的示例,这里它计算对的期望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
它返回的对象包括根及其乘数以进行进一步分析。乘法器数组的第一部分是有用系数λiaia+.
(如果您好奇的其他参数是什么die
,请执行die(2, 2, 0, c(1,0))$f(1:10)
并查看是否可以识别输出;-)。这种概括有助于开发和测试功能。)