มีสูตรปิดง่าย ๆ ในแง่ของรากของพหุนามดีกรี -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 เราสามารถคำนวณได้อย่างง่ายดาย
อี1000000= 285714.761905 ...
สำหรับการประมาณจะมีรากที่ใหญ่ที่สุดที่ไม่ซ้ำกัน λ+= 1 ดังนั้นในที่สุด (สำหรับขนาดใหญ่พอสมควร k) คำ λk+ จะครอง d ข้อตกลงใน ( 2 )ข้อผิดพลาดจะลดลงแบบเอกซ์โปเนนเชียลตามบรรทัดฐานที่เล็กที่สุดที่สองของราก ดำเนินการต่อตัวอย่างด้วยk = 6 , สัมประสิทธิ์ของ λ+ คือ a+= 0.4761905 และบรรทัดฐานที่เล็กที่สุดถัดไปคือ 0.7302500 (บังเอิญอื่น ๆ aผม มักจะใกล้เคียงกับ 1 ขนาด) ดังนั้นเราอาจประมาณค่าก่อนหน้าเป็น
อี1000000≈2 ×1066 + 1+ 0.4761905 = 285714.761905 ...
ด้วยข้อผิดพลาดในคำสั่งของ 0.7302500106≈10- 314368.
เพื่อแสดงให้เห็นว่าการแก้ปัญหานี้เป็นจริงได้อย่างไรนี่คือR
โค้ดที่ส่งคืนฟังก์ชันเพื่อประเมินอีk สำหรับใด ๆ k (ภายในขอบเขตของการคำนวณจุดลอยตัวที่มีความแม่นยำสองเท่า) และไม่ใหญ่เกินไป 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)
และดูว่าคุณรู้จักเอาต์พุต ;-) หรือไม่ การวางนัยทั่วไปนี้ช่วยในการพัฒนาและทดสอบฟังก์ชั่น)