>>28086
Ох, восстановил своё старое решение и обнаружил, что я, похоже, ошибся.
То есть решение, которое я показал в >>23267 - действительно устойчивый цикл, только из заданных начальных условий задача к нему не сходится. Похоже, я тогда что-то перепутал, или взял слишком низкую точность.
Правильный цикл начинается с
1): V=15, L=15, d=1735289213/179244147 ~~ 9.68115
2): V=17, L=15, d=821285249/179244147 ~~ 4.58194
3): V=16, L=16, d=16 ~~ 16
То есть, у этой задачи много различных устойчивых циклов.
>то есть не похоже, что моя модель чем-то хуже твоей.
Ты, как мне подсказывает libastral, производишь моделирование,пользуясь числами с плавающей запятой.
Поэтому то, что ты нашёл, с математической точки зрения является только некоторым приближением к решению.
В отличие от твоего, моё решение - точное. Оно найдено в рациональных числах (а значения с запятой приведены просто для оценки). Правда, первый раз я нашёл не то решение.
Ход решения у меня был довольно простой
1) Пользуясь числами с плавающей запятой, численно промоделировать задачу до тех пор, пока не будет достигнут цикл с некоторой достаточной точностью (я сейчас брал 1е-6, но для 1e-40 ответ получается тот же). У меня получилось, что точность 1e-6 достигается на 521-м шаге.
2) Найти точно (символьно) параметры цикла. Для этого:
2.0) Взять какое-нибудь состояние, которое близко к циклу. В нём часть параметров целочисленные и известны точно, а часть - приближения.
2.1) Заменить неизвестные параметры (оставшиеся расстояния) буквами. То есть, ввести переменные d_1, d_2, d_3.
2.2) Провести 9 шагов моделирования, производя все вычисления символьно.
На этом шаге возникает проблема: нужно сравнивать выражения, содержащие неизвестные величины d_1, d_2, d_3.
Я применил такой подход: при сравнении (и только при нём), в переменные подставляются их приближённые численные значения, найденные на шаге моделирования (1).
Естественно, после подстановки значения станут приближёнными, но (можно надеяться, что) на результат сравнения это не повлияет.
2.3) После 9 шагов новые положения бегунов будут выражены через исходные.
2.4) Остаётся приравнять новые положения старым, и найти значения переменных d_1, d_2, d_3, решив получившуюся систему уравнений.
Я восстановил скрипт, и он выдал мне такое:
==== Step N ====
1): V=d_1, L=15, d=d_1
2): V=d_2, L=15, d=d_2
3): V=d_3, L=16, d=d_3
==== Step N+9 ====
1): V=15, L=15, d=24112543/1419857 - 356726032*d_3/410338673 + 3537607920*d_1/6975757441 + 43965361904*d_2/118587876497
2): V=17, L=15, d=18600801/1419857 - 2747835119*d_1/6975757441 - 221100495*d_3/410338673 + 101356861425*d_2/118587876497
3): V=16, L=16, d=16
(заметь, тут всё точно, нет никакой плавающей запятой)
Осталось найти такие значения v_1, v_2, v_3, чтобы цикл замкнулся.
Для этого нужно решить систему из 3 (реально 2) линейных уравнений:
d_1 = 24112543/1419857 - 356726032*d_3/410338673 + 3537607920*d_1/6975757441 + 43965361904*d_2/118587876497
d_2 = 18600801/1419857 - 2747835119*d_1/6975757441 - 221100495*d_3/410338673 + 101356861425*d_2/118587876497
d_3 = 16
Решение:
d_3 = 16
d_2 = 821285249/179244147
d_1 = 1735289213/179244147
Можно проверить, что это решение обеспечивает точное повторение цикла.
То есть, по сути, из численного решения я взял только информацию о том, в каком порядке каждый из бегунов пересекает границы, а сами положения бегунов нашёл аналитически.
На всякий случай я убедился, что найденные аналитически положения бегунов действительно достаточно близки к использованным численным приближениям:
==== Compare symbolic solutions with initial approximation ====
d_1: Numeric: 9.68115 Symbolic: 1735289213/179244147 Difference: -1.25589e-06
d_2: Numeric: 4.58193 Symbolic: 821285249/179244147 Difference: -1.35126e-06
d_3: Numeric: 16 Symbolic: 16 Difference: 0
Т.е. всё ОК.
Ещё я на всякий случай провёл моделирование исходной задачи с повышенной точностью, используя gmp, но результат это не изменило.
До сих пор не представляю, можно ли решить эту задачу без компьютера.