Вы знакомы с броуновским движением: в упрощенном виде его можно рассчитывать так: мы перемещаемся на одну клеточку, а вот направление выбираем случайным образом. Броуновское движение возможно в пространстве произвольных размерностей, для числа размерностей 1 и 2 блуждания почти всегда рано или поздно возвращаются в исходную точку, а для более высоких размерностей это уже не выполняется.
Но что, если мы будем прыгать не на одну клетку, а на очередную разницу между простыми числами - вначале 1 (3-2), потом 2 (5-3), снова 2 (7-5), потом 4 (11-7) итд. А вот направление мы будем 'вращать', например, для плоскости это будет вверх-вправо-вниз-влево? Будет очень красиво.
Сразу скажу, я хотел сотворить что-то красивое с простыми числами с 24 февраля. Это помогало мне не сойти с ума и не выпилиться. Эти эксперименты отвлекали меня, и хорошо, что вначале ничего красивого не получалось - я пробовал и нечто, похожее на игру Жизнь, и треугольник Паскаля, и связь простых чисел и похожих на них lucky numbers... Так что только недавно я получил результат, который меня устроил.
Здесь мы поблуждали совсем недолго, и начали выскакивать за размер небольшого png. Поэтому я решил работать с большими матрицами, а потом 'компессировать' их в картинки приемлемого размера, суммируя число посещений клетки и обозначая это разными цветами.
Давайте еще дальше:
Здесь видно, как ведет себя граф: топтание на месте, резкий скачок из-за большого prime number gap. Поехали дальше:
А что будет, если мы сделаем то же самое для 3d?
(вид со стороны XY). Внешне все выглядит примерно также. И это не удивительно, если мы не показываем ось Z, то все сводится к плоскому варианту, в котором мы просто пропускаем некоторые шаги. Конечно, если бы размер gap как-то коррелировал бы с номером шага mod 6, то изменения были бы, но гипотеза Римана говорит, что простые числа ведут себя наиболее 'случайным' образом, и такой корреляции не должно быть.
Секундочку, для броуновского движения 2D и 3D случаю различаются принципиально (по вероятности возвращения в данную точку), а с простыми получаются нет разницы от числа измерений? А как с возвращением в точку (0,0)?
Это невозможно по простой причине: первый шаг равен 1, а все остальные шаги четные. Однако не будем занудствовать, какая вероятность того, что блуждание придет достаточно близко к точке 0,0? Давайте построим график расстояния от начальной точки для разного числа измерений:
За исключением 1D, где имеет тенденция касания нуля, остальные графики ведут себя схожим образом, что неудивительно, учитывая что gap все время растет, не говоря о больших выбросах, так что хорошей 'компенсации' плюсов и минусов, как это происходит при броуновском движении, нет (хотя выделенного направления роста, если справедлива гипотеза Римана, тоже быть не может). Сравним с подобным графиками для броуновского движения (конечно, в отличие от детерминированных графиков 'простых блужданий' здесь могут быть разные картины в зависимости от random seed):
Обратите внимание, что за миллиард шагов мы находимся в пределе 40 тысяч клеток, тогда как для 'простых блужданий' мы ушли в десятки раз дальше.
Ну и в заключение, насколько далеко я могу продолжить расчет? Я достиг на ноутбуке 383'470'718 шагов с матрицей 600'000x600'000 клеток, упакованных в биты, прежде чем блуждание 'вывалилось' за пределы матрицы.
UPD: Кроме того, можно присваивать цвет на основе того, в какой момент производилось рисование (в зависимости от номера шага):
Комментарии (14)
ku4in
21.04.2022 16:29Было бы любопытно услышать пару слов про используемые инструменты и время расчета.
amarao
21.04.2022 16:44+1Спасибо!
У меня есть карманный пет-проект на rust, equart (брутфорс relations на 2d плоскости). Смотреть там особо нечего, потому что я на нём учу Rust; но идея офигенная.
Я её себе в закладочки взял и попробую сделать, как время получится. С уравнениями мне удалось выйти на ~5 fps на пересёт 4k картинки, тут - аж интересно.
А какой у вас самый большой размер int'а получился? u128 или больше?
Tzimie Автор
22.04.2022 13:55Нет, 77 миллиардов, чуть чуть вышел за uint32
Кстати в конце добавил еще картинку (UPD: ...)
stanislavshwartsman
22.04.2022 07:18+1После единицы все шаги чёрные, можно их сразу разделить на 2, картинка будет плотнее и возможно интереснее.
Tzimie Автор
22.04.2022 07:24Так как я все равно компрессирую картинку, то мало что поменяется визуально, но если делить все шаги пополам, то матрицу можно сделать в да раза меньше по каждому измерению, а в тогда по памяти в четыре раза меньше!!! А я упирался в память! Спасибки!
belch84
22.04.2022 21:21+2Не совсем по теме, но тоже про броуновское движение. Модели для него бывают разные, вот одна, которая возникает как фазовая траектория динамической системы
Модель для броуновского движения
Bronx
24.04.2022 09:29Интересно, спасибо.
Выполняется ли для этого движения закон Эйнштейна (матожидание квадрата проекции смещения на любую ось пропорционально времени)?
Hrodvitnir
Выглядит похожим на различные туманности:)