Документация Engee

DynamicalSystems.jl

# DynamicalSystemsModule

Логотип DynamicalSystems.jl: Двойной маятник

DynamicalSystems.jl — это отмеченная наградами программная библиотека Julia для нелинейной динамики и анализа нелинейных временных рядов. Текущий репозиторий содержит документацию и экспортирует все пакеты, составляющие DynamicalSystems.jl.

Для установки библиотеки выполните import Pkg; Pkg.add("DynamicalSystems").

DynamicalSystems.jl является частью JuliaDynamics, организации, предназначенной для создания высококачественного научного программного обеспечения.

Вся дополнительная информация содержится в документации, которую можно найти в Интернете или получить локально, запустив файл docs/make.jl.

Если вы сочли эту библиотеку полезной, оцените ее на сайте GitHub. Так мы сможем получить точную нижнюю границу числа (удовлетворенных) пользователей.

Введение

Представляем вам документацию по DynamicalSystems.jl.

  • Если вы еще не пользовались библиотекой и хотите начать работу, прочтите общее руководство по использованию библиотеки.

  • На странице Содержимое представлена сводка всех пакетов, входящих в состав библиотеки.

  • В разделе Учебные ресурсы ниже можно найти дополнительные ресурсы об изучении библиотеки и ее использовании в научных исследованиях и (или) в сфере образования.

  • Помимо формального алгоритмического или научного содержимого DynamicalSystems.jl (приведенного на странице Содержимое), библиотека также предоставляет обширный набор для интерактивных или автономных динамических систем анимации и визуализации. Их описание приведено на странице Визуализации.

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

Последние новости

Библиотека DynamicalSystems.jl перенесена в Julia 1.9 и более поздние версии и теперь экспортирует приложения визуализации и интерактивные приложения автоматически при доступности Makie (или бэкендов Makie, таких как GLMakie), используя новую систему расширения пакетов.

Пакет InteractiveDynamics.jl уже устарел.

Учебные ресурсы

Учебник по DynamicalSystems.jl

Мы написали для учащихся со степенью бакалавров учебник с вводными сведениями о нелинейной динамике. Текст написан в прикладной, практической манере, но при этом охватывает все предметные основы. На страницах книги приводится реальный код Julia, который использует DynamicalSystems.jl и опубликован в сборнике Undergraduate Lecture Notes in Physics издательства Springer Nature:

Также стоит обратить внимание и на другие учебники по нелинейной динамике:

  • Chaos in Dynamical Systems — E. Ott

  • Nonlinear Time series Analysis — H. Kantz & T. Schreiber

Курс по прикладной нелинейной динамике и сложным системам

Мы разрабатываем полный курс (рассчитанный на семестр для выпускников и студентов) по прикладной нелинейной динамике, нелинейному анализу временных рядов и сложным системам, используя пакеты JuliaDynamics. DynamicalSystems.jl является его частью.

Материалы курса находятся на сайте GitHub: https://github.com/JuliaDynamics/NonlinearDynamicsComplexSystemsCourses

Наши цели

При создании DynamicalSystems.jl принимались во внимание три цели. Первая цель — заполнить пробел в высококачественном программном обеспечении общего назначения для нелинейной динамики, которое может сделать предмет нелинейной динамики доступным и воспроизводимым. Второй целью было создание полезной библиотеки, где студенты и ученые из разных областей могли бы знакомиться с методами нелинейной динамики.

Третья цель заключалась в том, чтобы кардинально изменить представление о роли кода как в научном образовании, так и в исследованиях. В учебных аудиториях редко показывают реальный исполняемый код, потому что он часто бывает длинным и запутанным. Это особенно пагубно для нелинейной динамики — области, где компьютерные исследования имеют решающее значение. А с опубликованными работами по этому направлению дела обстоят еще хуже: в подавляющем большинстве опубликованных исследований не демонстрируется код, использовавшийся для создания документа. Это затрудняет, а иногда и делает невозможным воспроизведение этих работ.

Для достижения этих целей мы создали библиотеку DynamicalSystems.jl со следующими преимуществами.

  1. Прозрачность. Особое внимание уделяется тому, чтобы исходный код всех функций был понятен и прост для выполнения, оставаясь при этом как можно более компактным и лаконичным.

  2. Интуитивность. Простое в использовании и понятное программное обеспечение облегчает проведение экспериментов.

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

  4. Надежность. Реализации алгоритмов подвергаются всестороннему тестированию.

  5. Хорошая документированность. Для всех реализованных алгоритмов предоставляется высокоуровневое научное описание функционала в строке документации, а также приводятся ссылки на научные статьи.

  6. Универсальность. Все алгоритмы одинаково хорошо работают с любой системой, будь то простая непрерывная хаотическая система, например модель Лоренца, или дискретная система высокой размерности, например связанные стандартные схемы.

  7. Производительность. Написанный полностью на Julia и использующий преимущества некоторых из лучших пакетов этого языка, DynamicalSystems.jl является очень быстрым.

Цитирование

Существует (небольшая) статья, связанная с DynamicalSystems.jl. Если мы помогли вам в исследовании, которое привело к публикации, просим вас сослаться на нее, используя DOI 10.21105/joss.00598 или следующую запись BiBTeX:

@article{Datseris2018,
  doi = {10.21105/joss.00598},
  url = {https://doi.org/10.21105/joss.00598},
  year  = {2018},
  month = {mar},
  volume = {3},
  number = {23},
  pages = {598},
  author = {George Datseris},
  title = {DynamicalSystems.jl: A Julia software library for chaos and nonlinear dynamics},
  journal = {Journal of Open Source Software}
}

Однако мы будем очень признательны, если вы также приведете ссылку на написанный нами учебник по DynamicalSystems.jl:

@book{DatserisParlitz2022,
  doi = {10.1007/978-3-030-91032-7},
  url = {https://doi.org/10.1007/978-3-030-91032-7},
  year = {2022},
  publisher = {Springer Nature},
  author = {George Datseris and Ulrich Parlitz},
  title     = "Nonlinear dynamics: A concise introduction interlaced with code",
  address   = "Cham, Switzerland",
  language  = "en",
}

Как задавать вопросы

Задавать вопросы можно тремя способами.

  1. Присоединиться к официальному форуму обсуждений Julia и задать вопрос в категории Specific Domains > Modelling & Simulations.

  2. Присоединиться к нашему каналу #dynamics-bridged в рабочем пространстве Julia Slack.

  3. Открыть проблему непосредственно на странице GitHub по DynamicalSystems.jl, предоставив минимальный рабочий пример.

Участие в разработке и пожертвования

Обязательно посетите страницу Contributor Guide, потому что вы можете помочь улучшить этот пакет, не написав ни строки кода. Кроме того, если вы сочли этот пакет полезным, оцените его на сайте GitHub. Так мы сможем получить точную нижнюю границу количества пользователей, которым этот пакет уже помог.

Наконец, вы можете пожертвовать средства на дальнейшее развитие DynamicalSystems.jl. Для этого можно добавить вознаграждения к существующим проблемам в репозиториях GitHub (вы также можете открыть новые проблемы). Для каждой проблемы можно автоматически создать вознаграждение с помощью Bountysource. См. первый комментарий к каждой проблеме.

Проблемы с вознаграждениями

Деньги, которые DynamicalSystems.jl получает в качестве наград, от спонсоров или жертвователей, конвертируются в вознаграждения для проблем на сайте GitHub. Полный список проблем, за которые полагается вознаграждение, доступен здесь.

Решая эти проблемы, вы не только вносите свой вклад в развитие открытого кода, но и получаете немного карманных денег :)

Специалисты по обслуживанию и участники разработки

Поддержку библиотеки DynamicalSystems.jl ведет Георгий Дацерис (George Datseris), который также курирует и пишет эту документацию. Однако программный код создается благодаря работе нескольких человек. Список слишком длинный, поэтому публиковать и постоянного обновлять его нецелесообразно. Рекомендуется посетить страницу GitHub для каждого из подпакетов, где приводятся ссылки на страницы разработчиков.

Номера версий

Версия DynamicalSystems сама по себе немного бессмысленна, потому что модуль не имеет исходного кода, кроме повторного экспорта других модулей. В целях прозрачности для создания документации, которую вы сейчас читаете, использовались следующие пакеты и версии:

using Pkg
Pkg.status([
    "DynamicalSystems",
    "StateSpaceSets", "DynamicalSystemsBase", "RecurrenceAnalysis", "FractalDimensions", "DelayEmbeddings", "ComplexityMeasures", "TimeseriesSurrogates", "PredefinedDynamicalSystems", "Attractors", "ChaosTools", "CairoMakie",
    ];
    mode = PKGMODE_MANIFEST
)
Status `~/.julia/environments/v1.9/Manifest.toml`
⌃ [f3fd9213] Attractors v1.5.1
⌃ [13f3f980] CairoMakie v0.8.13
  [608a59af] ChaosTools v3.1.2
⌅ [ab4b797d] ComplexityMeasures v2.8.0
  [5732040d] DelayEmbeddings v2.7.4
⌃ [61744808] DynamicalSystems v3.0.0
⌃ [6e36e845] DynamicalSystemsBase v3.4.2
⌃ [4665ce21] FractalDimensions v1.7.4
  [31e2f376] PredefinedDynamicalSystems v1.2.0
  [639c3291] RecurrenceAnalysis v2.0.6
  [40b095a5] StateSpaceSets v1.4.5
⌃ [c804724b] TimeseriesSurrogates v2.4.0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

В силу особенностей библиотеки DynamicalSystems.jl экспортируемый API содержит сотни реализаций алгоритмов, большинство из которых независимы друг от друга. Наш подход к разработке заключается в том, что критические изменения этих отдельных алгоритмов (например, в связи с улучшением дизайна API, повышением производительности или улучшением именованных аргументов по умолчанию) могут быть сделаны без увеличения основных номеров версий. Мы увеличиваем номера основных версий только для критических изменений, которые оказывают влияние на большую часть библиотеки DynamicalSystems.jl.

Другие пакеты, имеющие отношение к NLD

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

  • DifferentialEquations.jl — помимо предоставления решателей для стандартных систем ODE (инфраструктура уже используется в DynamicalSystems.jl), пакет также имеет гораздо больше возможностей, в число которых входят решатели SDE или количественная оценка неопределенности.

  • DiffEqSensitivity.jl — дискретный и непрерывный анализ локальной чувствительности, т. е. производных решений ODE или функций решений по сравнению с параметрами, с использованием различных прямых и смежных методов, а также методов, адаптированных к хаотическим системам.

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

  • BifurcationKit.jl — многофункциональный набор инструментов для автоматизированного анализа бифуркаций.

  • NetworkDynamics.jl — пакет для простого моделирования динамики в сетях и преобразования сетевых систем в ODEProblem (которые можно преобразовать непосредственно в ContinuousDynamicalSystem).

  • Agents.jl — для моделирования на основе агентов.