1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import numpy as np
def calculate_theoretical_variance(): sides = [4, 6, 8, 12, 20] E_prev = 1 Var_prev = 0 for n in sides: e_k = (n + 1) / 2 v_k = (n**2 - 1) / 12 E_curr = E_prev * e_k Var_curr = (E_prev * v_k) + (e_k**2 * Var_prev) E_prev, Var_prev = E_curr, Var_curr return Var_prev
def monte_carlo_simulation(trials=100000): results = [] for _ in range(trials): T = np.random.randint(1, 5) C = np.sum(np.random.randint(1, 7, size=T)) O = np.sum(np.random.randint(1, 9, size=C)) D = np.sum(np.random.randint(1, 13, size=O)) I = np.sum(np.random.randint(1, 21, size=D)) results.append(I) return np.var(results)
theoretical = calculate_theoretical_variance() print(f"理论方差: {theoretical:.4f}")
|