Статистика Мехты Дайсона для уровней энергии для измерения спектрального отклонения от равномерного распределения

Вопрос или проблема

Я пытаюсь измерить статистику Дайсона-Мехты для набора собственных значений, чтобы воспроизвести рисунок 5 из этой статьи. Часть кода на Python, которую я использовал, не дает желаемых результатов, соответствующих статистике расстояния Пуассона. Я пытаюсь получить график на высоких энергиях, который примерно выглядит как прямая пунктирная линия на этом графике изображении. Код приведен ниже:
Изображение моего графика дает либо чрезвычайно большие значения, либо не приближается к прямой линии.

import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt
eigenvalues = np.array([
24.4662, 24.4858, 24.4882, 24.4883, 24.494, 24.4995, 24.5262, \
24.5268, 24.5295, 24.5455, 24.5631, 24.5682, 24.5719, 24.5864, \
24.5899, 24.5937, 24.5967, 24.598, 24.6042, 24.609, 24.6123, 24.613, \
24.6393, 24.6396, 24.6486, 24.6487, 24.6508, 24.6644, 24.6677, \
24.669, 24.6714, 24.6744, 24.6807, 24.6902, 24.6972, 24.7011, \
24.7096, 24.7176, 24.7232, 24.7234, 24.7466, 24.7487, 24.7516, \
24.7656, 24.7682, 24.7735, 24.7822, 24.7836, 24.7851, 24.8083, \
24.8175, 24.8212, 24.8225, 24.838, 24.8416, 24.8417, 24.8481, \
24.8493, 24.8728, 24.8842, 24.8871, 24.8944, 24.8948, 24.9031, \
24.9035, 24.9076, 24.9117, 24.9179, 24.9226, 24.9247, 24.9252, 24.93, \
24.9306, 24.9492, 24.9557, 24.9613, 24.9633, 24.9688, 24.9771, \
24.9822, 24.9871, 24.9901, 24.9906, 24.9919, 24.992, 25.0017, \
25.0099, 25.0136, 25.0161, 25.0248, 25.0388, 25.0401, 25.0421, \
25.046, 25.0494, 25.0545, 25.0755, 25.0763, 25.0894, 25.0908, \
25.0934, 25.0943, 25.1323, 25.1326, 25.1346, 25.1378, 25.1481, \
25.1546, 25.1684, 25.1898, 25.1951, 25.202, 25.2031, 25.2035, \
25.2142, 25.2188, 25.2244, 25.2251, 25.2256, 25.2295, 25.2324, \
25.2337, 25.2345, 25.2456, 25.2517, 25.2607, 25.261, 25.2642, \
25.2779, 25.2864, 25.2896, 25.2924, 25.2938, 25.3032, 25.3062, \
25.3179, 25.3196, 25.3243, 25.3379, 25.3543, 25.3659, 25.3712, \
25.374, 25.3852, 25.3934, 25.3955, 25.3991, 25.402, 25.4201, 25.4232, \
25.4299, 25.4299, 25.4316, 25.4408, 25.4439, 25.4519, 25.4641, \
25.4701, 25.4711, 25.4749, 25.4749, 25.4959, 25.4971, 25.5046, \
25.5046, 25.5048, 25.5218, 25.5261, 25.5363, 25.5407, 25.5524, \
25.553, 25.555, 25.5568, 25.5606, 25.5608, 25.5648, 25.5761, 25.5805, \
25.5811, 25.5825, 25.5873, 25.5935, 25.6024, 25.615, 25.6205, \
25.6281, 25.6287, 25.6298, 25.6334, 25.647, 25.6561, 25.6591, \
25.6643, 25.6677, 25.6716, 25.672, 25.6924, 25.693, 25.6945, 25.7022, \
25.706, 25.7087, 25.7094, 25.7132, 25.7207, 25.7257, 25.7478, \
25.7594, 25.7746, 25.7884, 25.8006, 25.8021, 25.8052, 25.8145, \
25.8178, 25.829, 25.8355, 25.8411, 25.8513, 25.86, 25.8604, 25.8613, \
25.8646, 25.8725, 25.8802, 25.8815, 25.8885, 25.8958, 25.897, \
25.9051, 25.9104, 25.9186, 25.9188, 25.9225, 25.9234, 25.9298, \
25.9299, 25.9338, 25.9396, 25.9444, 25.9567, 25.9633, 25.9784, \
25.9804, 25.9812, 25.9841, 25.9899, 25.9907, 25.9962, 26., 26.0089, \
26.0109, 26.0153, 26.037, 26.0381, 26.0403, 26.0442, 26.0592, \
26.0667, 26.0674, 26.0815, 26.0854, 26.0888, 26.0933, 26.0972, \
26.1009, 26.102, 26.1139, 26.1141, 26.1297, 26.1364, 26.1381, \
26.1405, 26.1476, 26.1496, 26.1517, 26.1588, 26.1618, 26.165, \
26.1652, 26.1705, 26.1706, 26.1741, 26.1745, 26.1895, 26.1998, \
26.2001, 26.2003, 26.2271, 26.2306, 26.2478, 26.2518, 26.2566, \
26.2566, 26.2621, 26.2695, 26.2776, 26.2868, 26.2888, 26.3012, \
26.3081, 26.3283, 26.3325, 26.3363, 26.3414, 26.3472, 26.3571, \
26.3638, 26.3754, 26.3783, 26.3802, 26.3803, 26.3877, 26.3982, \
26.4058, 26.4137, 26.4196, 26.4235, 26.4239, 26.4274, 26.4352, \
26.4374, 26.4455, 26.4457, 26.4524, 26.4576, 26.4576, 26.4576, \
26.4661, 26.4854, 26.4927, 26.4947, 26.5062, 26.512, 26.5181, 26.525, \
26.5341, 26.5415, 26.5448, 26.5536, 26.5581, 26.5626, 26.5637, \
26.5685, 26.5723, 26.5745, 26.5752, 26.5758, 26.5851, 26.5913, \
26.5923, 26.5956, 26.6004, 26.6032, 26.6044, 26.613, 26.6212, 26.644, \
26.6443, 26.6599, 26.666, 26.6688, 26.6698, 26.671, 26.6768, 26.6804, \
26.6959, 26.6962, 26.6991, 26.7014, 26.7083, 26.7113, 26.7148, \
26.7211, 26.7345, 26.7389, 26.7506, 26.7679, 26.7731, 26.7762, 26.78, \
26.79, 26.792, 26.808, 26.8097, 26.81, 26.8122, 26.8146, 26.8218, \
26.8305, 26.8378, 26.8445, 26.8504, 26.8538, 26.8614, 26.8651, \
26.8731, 26.8767, 26.8791, 26.8805, 26.8834, 26.8897, 26.8974, \
26.8995, 26.9033, 26.927, 26.931, 26.9325, 26.9328, 26.9555, 26.9637, \
26.9665, 26.9683, 26.9739, 26.9778, 26.9787, 26.9895, 26.9932, \
27.0047, 27.0057, 27.0099, 27.012, 27.0131, 27.0151, 27.0194, \
27.0208, 27.0227, 27.048, 27.0528, 27.0631, 27.0674, 27.0682, \
27.0723, 27.0762, 27.0813, 27.0867, 27.0987, 27.1, 27.1024, 27.1033, \
27.106, 27.1274, 27.1354, 27.1429, 27.1478, 27.1492, 27.1497, \
27.1516, 27.1538, 27.1539, 27.1599, 27.1681, 27.1735, 27.1801, \
27.1938, 27.2243, 27.2251, 27.2286, 27.2293, 27.2345, 27.2379, \
27.2394, 27.2446, 27.262, 27.2661, 27.2688, 27.2699, 27.2806, \
27.3013, 27.3059, 27.3079, 27.3107, 27.311, 27.3178, 27.3204, \
27.3229, 27.326, 27.3421, 27.3421, 27.3595, 27.3722, 27.3793, \
27.3825, 27.3849, 27.386, 27.3915, 27.3926, 27.3976, 27.4053, \
27.4098, 27.4172, 27.4214, 27.426, 27.4395, 27.4421, 27.4435, \
27.4448, 27.446, 27.4572, 27.4673, 27.4771, 27.4814, 27.4862, 27.493, \
27.4939, 27.4941, 27.4974, 27.5033, 27.5073, 27.5101, 27.5107, \
27.5113, 27.512, 27.5178, 27.5329, 27.536, 27.5432, 27.5447, 27.5684, \
27.5751, 27.5776, 27.5796, 27.5832, 27.5926, 27.6163, 27.62, 27.623, \
27.6262, 27.6327, 27.6384, 27.6408, 27.6471, 27.6623, 27.6625, \
27.6634, 27.6724, 27.6749, 27.6817, 27.6848, 27.6875, 27.6957, \
27.6965, 27.6968, 27.7215, 27.7235, 27.725, 27.7343, 27.7384, 27.739, \
27.7467, 27.7555, 27.76, 27.7607, 27.7755, 27.7764, 27.7864, 27.8037, \
27.804, 27.8075, 27.8086, 27.8136, 27.8149, 27.8193, 27.8234, \
27.8282, 27.8304, 27.8372, 27.8526, 27.8722, 27.8728, 27.8823, \
27.8847, 27.8855, 27.8871, 27.8874, 27.8887, 27.8939, 27.9003, \
27.9134, 27.923, 27.9279, 27.9311, 27.9348, 27.9358, 27.9433, \
27.9569, 27.9721, 27.9724, 27.9731, 27.9771, 27.9831, 27.9847, \
27.9859, 27.9873, 27.9887, 27.9919, 28.0041, 28.0075, 28.0152, \
28.0279, 28.028, 28.0445, 28.048, 28.0586, 28.0591, 28.0697, 28.0736, \
28.0749, 28.0857, 28.0866, 28.0904, 28.0918, 28.0945, 28.1149, \
28.1178, 28.1208, 28.1362, 28.1424, 28.147, 28.1473, 28.1519, \
28.1542, 28.1577, 28.1645, 28.1685, 28.1685, 28.1693, 28.1749, \
28.1797, 28.1797, 28.1834, 28.1947, 28.2029, 28.2163, 28.2219, \
28.2312, 28.2324, 28.251, 28.2514, 28.2552, 28.2568, 28.2581, \
28.2709, 28.2804, 28.2809, 28.2877, 28.2895, 28.2981, 28.3005, \
28.3088, 28.3099, 28.3112, 28.3136, 28.3169, 28.3294, 28.3316, \
28.3413, 28.3424, 28.3425, 28.3552, 28.361, 28.3632, 28.366, 28.3708, \
28.3742, 28.3758, 28.386, 28.3982, 28.4315, 28.4333, 28.4341, \
28.4372, 28.4478, 28.4491, 28.4573, 28.4681, 28.4819, 28.4867, \
28.4921, 28.4966, 28.4987, 28.4995, 28.5003, 28.5004, 28.5033, \
28.5234, 28.526, 28.5269, 28.543, 28.5442, 28.5457, 28.5472, 28.5513, \
28.552, 28.5523, 28.554, 28.5654, 28.5664, 28.5669, 28.5765, 28.588, \
28.5882, 28.6025, 28.61, 28.6247, 28.6264, 28.6273, 28.6276, 28.6368, \
28.6374, 28.6466, 28.6476, 28.648, 28.65, 28.6636, 28.6709, 28.6828, \
28.6859, 28.6918, 28.7055, 28.713, 28.7186, 28.7313, 28.7313, \
28.7318, 28.7326, 28.733, 28.735, 28.7413, 28.7436, 28.7466, 28.7535, \
28.759, 28.7619, 28.7651, 28.773, 28.7731, 28.7781, 28.7886, 28.7907, \
28.7942, 28.8101, 28.8312, 28.8395, 28.8399, 28.8437, 28.848, \
28.8605, 28.8705, 28.8739, 28.8765, 28.8769, 28.8848, 28.8865, \
28.8903, 28.9095, 28.913, 28.9145, 28.9146, 28.9172, 28.9373, \
28.9374, 28.9421, 28.945, 28.9571, 28.9621, 28.9644, 28.9722, \
28.9723, 28.9723, 28.9759, 28.9785, 28.9806, 28.9867, 28.993, \
28.9995, 28.9995, 29.0024, 29.0064, 29.008, 29.0225, 29.0237, \
29.0273, 29.0282, 29.0434, 29.0505, 29.0551, 29.0606, 29.0612, \
29.0672, 29.0699, 29.07, 29.0724, 29.077, 29.0823, 29.085, 29.0881, \
29.092, 29.0947, 29.1019, 29.116, 29.1308, 29.1365, 29.1385, 29.1415, \
29.1418, 29.1425, 29.1579, 29.1598, 29.1609, 29.1774, 29.184, \
29.1909, 29.1975, 29.2035, 29.2096, 29.2122, 29.2197, 29.2252, \
29.2291, 29.2329, 29.2363, 29.2386, 29.2443, 29.2644, 29.27, 29.276, \
29.277, 29.2803, 29.2827, 29.2893, 29.2912, 29.2939, 29.2981, \
29.3085, 29.3112, 29.3123, 29.3166, 29.3203, 29.3236, 29.3286, \
29.3477, 29.3512, 29.3538, 29.3581, 29.3645, 29.3835, 29.3863, \
29.3872, 29.393, 29.3992, 29.4108, 29.4127, 29.4192, 29.4222, \
29.4265, 29.4296, 29.4462, 29.4463, 29.4464, 29.4555, 29.4603, \
29.4616, 29.4627, 29.4658, 29.4708, 29.4721, 29.4784, 29.4804, \
29.4815, 29.4877, 29.5132, 29.5196, 29.5215, 29.5222, 29.5256, \
29.5314, 29.5472, 29.5476, 29.5554, 29.5645, 29.5728, 29.5739, \
29.5788, 29.5805, 29.589, 29.5924, 29.5963, 29.5968, 29.6046, \
29.6075, 29.609, 29.6098, 29.6179, 29.6203, 29.631, 29.6328, 29.6377, \
29.6417, 29.6495, 29.6515, 29.6553, 29.6589, 29.6658, 29.6685, \
29.6689, 29.6714, 29.6838, 29.6843, 29.6866, 29.6881, 29.7094, \
29.7121, 29.7134, 29.7138, 29.7146, 29.7189, 29.7265, 29.7292, \
29.7342, 29.7376, 29.7389, 29.7511, 29.7554, 29.7765, 29.7792, \
29.7828, 29.7832, 29.7882, 29.7941, 29.7969, 29.8036, 29.8191, \
29.8197, 29.834, 29.8371, 29.8521, 29.8534, 29.8589, 29.8595, \
29.8598, 29.86, 29.8649, 29.8732, 29.8823, 29.9062, 29.9083, 29.9089, \
29.9109, 29.9138, 29.9139, 29.9158, 29.9219, 29.9313, 29.9344, \
29.9404, 29.9428, 29.9516, 29.9517, 29.9536, 29.9545, 29.9627, \
29.9703, 29.9767, 29.9781, 29.9797, 29.9916, 29.9956, 30.0071, \
30.0153, 30.0155, 30.0165, 30.0183, 30.0296, 30.0397, 30.0432, \
30.0432, 30.0524, 30.0531, 30.0535, 30.0536, 30.0553, 30.0668, \
30.0732, 30.0874, 30.0942, 30.0947, 30.1018, 30.1032, 30.1051, \
30.1082, 30.1103, 30.1121, 30.1122, 30.124, 30.131, 30.1364, 30.1385, \
30.1473, 30.1508, 30.1512, 30.1569, 30.1604, 30.1615, 30.1713, \
30.1722, 30.1785, 30.1863, 30.1888, 30.2022, 30.2028, 30.2043, \
30.2071, 30.2114, 30.2121, 30.2159, 30.2214, 30.224, 30.2281, \
30.2309, 30.248, 30.2584, 30.2769, 30.2773, 30.2818, 30.2833, \
30.2959, 30.2971, 30.298, 30.3045, 30.3131, 30.3195, 30.3223, \
30.3344, 30.335, 30.3385, 30.3422, 30.343, 30.3438, 30.3469, 30.347, \
30.3626, 30.3761, 30.3784, 30.3784, 30.379, 30.3829, 30.3917, \
30.4073, 30.4108, 30.4126, 30.4128, 30.4208, 30.4219, 30.4295, \
30.4371, 30.4477, 30.4492, 30.4537, 30.4565, 30.4688, 30.469, 30.478, \
30.4787, 30.4794, 30.4797, 30.4807, 30.4882, 30.4884, 30.4963, \
30.5069, 30.5094, 30.514, 30.5285, 30.5321, 30.5355, 30.5381, \
30.5387, 30.5494, 30.5579, 30.5586, 30.5623, 30.5694, 30.5708, \
30.602, 30.6024, 30.6199, 30.62, 30.6201, 30.6202, 30.6236, 30.625, \
30.6266, 30.633, 30.6373, 30.6374, 30.6377, 30.6381, 30.6437, \
30.6508, 30.6521, 30.6548, 30.6576, 30.6583, 30.67, 30.6706, 30.6713, \
30.6837, 30.6863, 30.6897, 30.6913, 30.6916, 30.7017, 30.7025, \
30.7031, 30.7042, 30.7135, 30.721, 30.7214, 30.7219, 30.7233, \
30.7421, 30.7425, 30.7524, 30.7531, 30.7563, 30.7694, 30.7734, \
30.7791, 30.8048, 30.8154, 30.8194, 30.8202, 30.825, 30.8381, \
30.8456, 30.8469, 30.8566, 30.8618, 30.8619, 30.8623, 30.8633, \
30.8675, 30.8681, 30.8706, 30.8758, 30.8937, 30.9024, 30.9162, \
30.9188, 30.9193, 30.9204, 30.9258, 30.9309, 30.9358, 30.9409, \
30.9435, 30.9446, 30.9531, 30.9552, 30.9572, 30.9587, 30.9588, \
30.959, 30.9736, 30.9797, 30.9897, 30.9927, 31.0047, 31.0061, \
31.0117, 31.0207, 31.0207, 31.0285, 31.0352, 31.0363, 31.0392, \
31.0399, 31.046, 31.0502, 31.0547, 31.0548, 31.0559, 31.0561, \
31.0589, 31.0722, 31.0728, 31.0794, 31.0906, 31.0974, 31.0985, \
31.1092, 31.1158, 31.1211, 31.132, 31.1331, 31.1339, 31.1362, \
31.1378, 31.1401, 31.1408, 31.1554, 31.1563, 31.1585, 31.1587, \
31.1599, 31.1605, 31.1607, 31.1707, 31.1778, 31.1784, 31.1929, \
31.1932, 31.1983, 31.1993, 31.2065, 31.2115, 31.2115, 31.2176, \
31.2225, 31.2252, 31.2267, 31.2453, 31.248, 31.2485, 31.2504, \
31.2571, 31.259, 31.2696, 31.2771, 31.2778, 31.285, 31.2892, 31.2933, \
31.2948, 31.2968, 31.3007, 31.3046, 31.3127, 31.316, 31.3209, \
31.3238, 31.33, 31.3639, 31.3665, 31.3717, 31.3742, 31.3777, 31.3784, \
31.3841, 31.3922, 31.3995, 31.4028, 31.4056, 31.4062, 31.4067, \
31.4147, 31.4203, 31.425, 31.4296, 31.4306, 31.431, 31.4354, 31.4379, \
31.4384, 31.4445, 31.4548, 31.4563, 31.4584, 31.46, 31.46, 31.4759, \
31.4796, 31.4802, 31.4861, 31.4864, 31.5026, 31.5028, 31.5183, \
31.5202, 31.5339, 31.5452, 31.5554, 31.5597, 31.5711, 31.5818, \
31.5849, 31.5899, 31.5945, 31.6062, 31.6128, 31.6149])

# Определить ступенчатую функцию N(E) для конкретного интервала собственных значений
def staircase_N(E, interval_eigenvalues):
    return np.sum(interval_eigenvalues <= E)

# Определить расчет статистики Дайсона-Мехты Δ3(L; epsilon) с линейной поправкой
def dyson_mehta(epsilon, L, num_intervals=100):
    # Выбрать собственные значения только в интервале [epsilon, epsilon + L]
    interval_eigenvalues = eigenvalues[(eigenvalues >= epsilon) & (eigenvalues <= epsilon + L)]

    # Пропустить, если в интервале нет собственных значений
    if len(interval_eigenvalues) == 0:
        return 0

    # Сгенерировать кумулятивную N(E) для этого интервала
    E_values = np.linspace(epsilon, epsilon + L, num_intervals)
    N_E_values = np.array([staircase_N(E, interval_eigenvalues) for E in E_values])

    # Рассчитать линию наилучшего соответствия для N(E) в этом интервале
    linear_fit = np.polyfit(E_values, N_E_values, 1)
    A, B = linear_fit

    # Определить функцию линейной поправки
    def linear_fit_function(E):
        return A * E + B

    # Рассчитать среднеквадратичное отклонение и приближенную интеграл
    delta3_sum = np.sum(((N_E_values - linear_fit_function(E_values)) ** 2)/100)
    delta3_integral = delta3_sum /L
    return delta3_integral

# Определить диапазон значений L для тестирования
L_values = np.arange(1, 16, 1)  # Выбрать диапазон от 0.5 до 5 раз среднего расстояния уровней
average_delta3_values = []

# Рассчитать среднее значение Δ3(L) для каждого значения L
for L in L_values:
    epsilon_min = eigenvalues.min()
    epsilon_max = eigenvalues.max() - L
    epsilon_increment = 0.1* (eigenvalues.max() - eigenvalues.min()) / len(eigenvalues)  # Доля среднего расстояния

    # Сгенерировать значения epsilon в интервале [epsilon_min, epsilon_max]
    epsilon_values = np.arange(epsilon_min, epsilon_max, epsilon_increment)

    # Рассчитать Δ3(L; epsilon) для каждого epsilon и усреднить
    delta3_values = [dyson_mehta(epsilon, L) for epsilon in epsilon_values]
    average_delta3 = np.mean(delta3_values)
    average_delta3_values.append(average_delta3)

# Построить результаты и эталонную линию L/15

plt.plot(L_values, average_delta3_values , marker="o", color="blue", label=r'$\Delta_3(L)$')
plt.plot(L_values, L_values / 15, linestyle="--", color="orange", label=r'$L/15$')
plt.xlabel('Длина окна (L)')
plt.ylabel(r'Среднее $\Delta_3(L)$')
plt.title(r'Статистика Дайсона-Мехты $\Delta_3(L)$ для различных длин окон')
plt.grid(True)
plt.legend()
plt.show()

Какие изменения я должен внести в код, чтобы он выглядел похоже на данный график?

Ответ или решение

Ваша задача по вычислению статистики Дайсона-Мехта для набора собственных значений и сопоставлению полученного графика с изображением из статьи требует особого внимания к деталям реализации кода на Python. В этом ответе я предложу несколько рекомендаций и исправлений, которые помогут улучшить ваш код, чтобы результаты были более сопоставимы с ожидаемыми данными.

Анализ Изначального Подхода

Ваш текущий код уже содержит все ключевые компоненты для вычисления статистики Дайсона-Мехта, однако есть несколько областей, которые можно улучшить:

  1. Определение промежутка энергий (epsilon) и длины окна (L):
    Вы используете фиксированный диапазон для epsilon и L. Возможно, следует пересмотреть подход к выбору этих параметров, чтобы более точно захватить вариации в данных.

  2. Обработка пустых интервалов:
    Код проверяет наличие собственных значений в интервале, однако при этом обрабатывает случай, когда таких значений нет, возвращая ноль. Это может исказить результаты.

  3. Код для вычисления линейной регрессии:
    Использование функции polyfit для нахождения линейного соответствия кажется правильным, однако убедитесь, что соответствие действительно адекватно данным функционально.

Рекомендации по Изменению Кода

Вот некоторые конкретные изменения, которые могут помочь достигнуть желаемых результатов:

  1. Увеличение количества интервалов:
    Вместо 100 интервалов для значений энергии можно использовать больше, чтобы избежать сглаживания точек.

    E_values = np.linspace(epsilon, epsilon + L, 200)  # Увеличение до 200
  2. Корректировка метода расчета статистики:
    При расчете интеграла ошибочно делится на L. Убедитесь, что можете рассмотреть различные подходы для усреднения:

    delta3_integral = delta3_sum / len(N_E_values)
  3. Оптимизация графика:
    Если результаты по-прежнему не соответствуют графику из статьи, проверьте диапазон L, возможно, следует расширить его или переместить на другое значение:

    L_values = np.arange(1, 30, 1)  # Увеличение диапазона

Пример Обновленного Кода

Подводя итог, вот пример вашего кода с внедрением вышеперечисленных изменений:

import numpy as np
import matplotlib.pyplot as plt

eigenvalues = np.array([...])  # Используйте ваш массив

def staircase_N(E, interval_eigenvalues):
    return np.sum(interval_eigenvalues <= E)

def dyson_mehta(epsilon, L, num_intervals=200):  # Увеличение до 200
    interval_eigenvalues = eigenvalues[(eigenvalues >= epsilon) & (eigenvalues <= epsilon + L)]

    if len(interval_eigenvalues) == 0:
        return 0

    E_values = np.linspace(epsilon, epsilon + L, num_intervals)
    N_E_values = np.array([staircase_N(E, interval_eigenvalues) for E in E_values])

    linear_fit = np.polyfit(E_values, N_E_values, 1)
    A, B = linear_fit

    def linear_fit_function(E):
        return A * E + B

    delta3_sum = np.sum(((N_E_values - linear_fit_function(E_values)) ** 2))
    delta3_integral = delta3_sum / len(N_E_values)  # Теперь делим на количество значений

    return delta3_integral

L_values = np.arange(1, 30, 1)  # Расширение диапазона
average_delta3_values = []

for L in L_values:
    epsilon_min = eigenvalues.min()
    epsilon_max = eigenvalues.max() - L
    epsilon_increment = 0.1 * (eigenvalues.max() - eigenvalues.min()) / len(eigenvalues)

    epsilon_values = np.arange(epsilon_min, epsilon_max, epsilon_increment)
    delta3_values = [dyson_mehta(epsilon, L) for epsilon in epsilon_values]
    average_delta3 = np.mean(delta3_values)
    average_delta3_values.append(average_delta3)

plt.plot(L_values, average_delta3_values, marker="o", color="blue", label=r'$\Delta_3(L)$')
plt.plot(L_values, L_values / 15, linestyle="--", color="orange", label=r'$L/15$')
plt.xlabel('Window Length (L)')
plt.ylabel(r'Average $\Delta_3(L)$')
plt.title(r'Dyson-Mehta $\Delta_3(L)$ Statistic for Different Window Lengths')
plt.grid(True)
plt.legend()
plt.show()

Заключение

По завершении изменений выполните повторный запуск кода и проверьте полученный график. Убедитесь, что вы получили более адекватные результаты, близкие к данным на изображении. Если результаты все еще не соответствуют, возможно, стоит рассмотреть дополнительные аспекты, такие как использование других статистических методов или более сложной регрессии для подгонки данных.

Эта доработка, скорее всего, позволит вам достичь ожидаемого результата, и важно помнить, что результаты могут варьироваться в зависимости от выбранной вашей модели анализа данных.

Оцените материал
Добавить комментарий

Капча загружается...