Динамика систем в последовательности AnyLogic - Фибоначчи
У меня есть модель системной динамики в AnyLogic, в которой я пытаюсь смоделировать последовательность Фибоначчи. Тем не менее, по некоторым причинам, мои результаты отличаются от ожидаемых:
Вместо
1,1,2,3,5,8,13...
я получил
1, 2,137954153, 4,021788196, 7,471205823, 13,86070806...
Я следовал этим (испанским) инструкциям, чтобы построить свою простую модель.
Я полагаю, что это не является общим для всех программ, потому что в VenSim этот пример, кажется, работает отлично...
Может кто-нибудь объяснить мне, почему это происходит в моей программе AnyLogic?
2 ответа
Причина, по которой это происходит, заключается в том, как дифференциальные уравнения обрабатываются в каждом программном обеспечении.
Причина, по которой вы получаете последовательность Фибоначчи в vensim, заключается в том, что вы используете метод Эйлера со временным шагом 1 (проверьте в настройках модели)
Если вы измените тип интеграции на RK45 в Vensim или сократите временной шаг, используя метод Эйлера, вы, вероятно, получите те же результаты, что и AnyLogic... Метод Runge-Kutta, даже если он начинается с фиксированного шага 1, он Позже изменяется временной шаг в зависимости от требований динамики модели.
Теперь давайте поймем, что использование временного шага 1 нелепо в любом практическом применении... Но вот почему вы получаете точные значения в vensim... потому что эти точные значения действительно очень неточны для того, что на самом деле представляет собой модель. Я бы даже сказал, что модель по вашей ссылке - плохая модель, и ее не следует показывать публике.
К счастью, AnyLogic не позволяет вам сделать это. Вы можете установить временной шаг 1 в свойствах модели, но он сразу обнаружит неточности и изменит временной шаг на что-то намного меньшее (возможно, 0,01)... Так как он позволяет использовать только Эйлер + Ньютон в смешанных уравнениях вариант, но не один Эйлер.
Спасибо за ответы. Я думаю, что недоразумение состоит в том, что для моделирования определенных систем реального мира дискретное время (представленное с помощью разностных уравнений) имеет больше смысла, чем непрерывное время (представленное с помощью дифференциальных уравнений). Таким образом, AnyLogic должен позволять это. По крайней мере, он должен указать где-нибудь в документации, что он не может обрабатывать системы, лучше всего описываемые разностными уравнениями. Он определенно не должен переопределять вводимые пользователем данные без указания того, что он это делает и почему.
Что касается вашего комментария о том, что вы «готовы пожертвовать точностью всей модели только ради ежегодных выплат». В случае простой банковской модели, которая хочет проиллюстрировать разницу между сложными и несложными процентами, это может быть вся модель. Я понимаю, что это можно показать другими способами, кроме AnyLogic, но все же кажется странным, что AnyLogic этого не допускает.