Странное поведение нетривиальных нулей Зета функции Римана

Я люблю проводить численные эксперименты. Процессор должен думать, а не простаивать. Напомню, что нетривиальные нули Зета функции Римана, расположенные симметрично относительно оси X, имеют вещественную часть равную -½ (что не доказано, может быть, у вас получится?), а мнимая часть у первых нулей равна (знак +/-, так как они расположены симметрично): 14.13, 21.02, 25.01, 30.42, 32.93…

Чем дальше, тем меньше расстояние между корнями, доказано, что в пределе

\lim_{n\to\infty} ln(n) \frac{z_{n+1} - z_n}{2\pi} = 1

где Zn — абсолютное значение мнимой части корня. То есть чем дальше, тем гуще расположены нули. Но давайте эти уменьшающиеся расстояния между корнями станут нашей путеводной звездой, они будут указывать нам, насколько сдвинуться вправо-вверх-влево-вниз. Заметьте, что такая последовательность направлений совпадает с направлением вращения фазы комплексного числа. То есть на первом шаге мы увеличиваем X на 14.13, потом Y на 21.03–14.13=6.9 и оказываемся в точке (14.13, 6.9). Дальше мы смещаемся влево на 25.01–21.02=3.99 и оказываемся в точке (10.14,6.9). Наконец, двигаемся вниз на 30.42–25.01=5.41 и попадаем в (10.14,1.49). Цикл из четырех движений закончен.

За несколько дней mpmath мне сгенерил 100 тысяч корней и я увидел интересную картину, после чего решил скачать готовые корни — тут: https://www.lmfdb.org/zeros/zeta/ можно скачать базу где есть около 10 миллардов корней, я же ограничился 100 миллионами.

Итак, после первого миллиона корней:

1m корней

1m корней

Каждое блуждание увеличивало значение пикселя на единицу. Так как многие пиксели оказывались на пути много раз, то в итоге я брал логарифм получившегося числа — так видно что наш процесс 'потоптался' дольше всего. Согласитесь, это несколько неожиданно. Ниже график зависимости X и Y от номера корня:

X,Y, 1m корней

X, Y, 1m корней

Видно как процесс долго топчется на месте, а потом резко рвет вверх, к другому 'облаку'. Для 10 миллионов:

10m

10m

Рост X, Y для 10 миллионов:

d32c843a608470ffeb55104979e4f867.png

И, наконец, для 100 миллионов:

100m

100m

Рост X, Y для 100 миллионов:

100m

100m

На последнем графике хорошо заметно, как тормозится рост из-за уменьшения расстояния между корнями. Но совершенно удивительно то, что функция выросла там мало (на 5000) за 100 миллионов корней, то есть 25 миллионов 'оборотов' — то есть в среднем 1/5000 за оборот.

Интересно, что стоит немного поменять порядок обхода с нашего — X+Y+X-Y- на, например, такой: X+Y+Y-X-, результат сразу становится тривиальным

1m

1m

Ну почти тривиальным. Здесь интересно то, что сохраняется направление. То есть в любом случае есть интересная корреляция между расстояними между корнями, и я попытался ее поймать (расстояния нормировались к log (n)/2pi, центр поэтому лежит в точке 1,1). Сразу увидел, что есть антикорреляция между двумя соседними расстояниями:

Корреляция, 100m корней

Корреляция, 100m корней

если один шаг был длиннее обычного, следующий, скорее всего, будет короче. Ну и все — через один корень корреляции практически нет.

Собственно, это и неудивительно, потому что в момент 'рывка' между 'облаками' происходит следующее (zoom одного из 'рывков'):

zoom 1

zoom 1

Еще увеличивая, здесь уже только X:

zoom 2

zoom 2

Как видно, 'рывок' только кажется поступательным движением. На самом деле процесс колбасит взад и вперед, он часто отступает, линия движения имеет ширину в несколько пикселей и речь идет не о корерляции между соседними расстояними между корнями, а о том, что влияет на расстояние между корнями на очень большом расстоянии между ними — сотен и тысяч значений.

Как это объяснить я это не знаю. Может быть знаете вы?

© Habrahabr.ru