ОДУ#

block

Внешний вид блока в REPEAT VISION#

 Блок ОДУ предназначен для численного решения систем обыкновенных дифференциальных уравнений (ОДУ), выраженных в форме Коши (относительно старшей производной): \(y" = f(t, y, y')\). Блок предоставляет универсальный инструментарий для моделирования динамических систем.

Ключевые характеристики и функции блока ОДУ:

  • Поддержка переменного шага интегрирования: Для контроля точности решения реализованы алгоритмы с адаптивным выбором шага. Интеграторы (например, DormandPrince853, LSODA) автоматически подбирают шаг интегрирования, чтобы обеспечить заданную пользователем точность (относительную и абсолютную). Это оптимально с точки зрения скорости и точности на разных участках решения.

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

  • Учёт событий (Discrete Events): Важной особенностью является возможность обработки дискретных событий, определяемых условием \(g(t, y) = 0\). Блок определяет момент наступления события, останавливает, позволяет изменить вектор состояния или продолжить расчет. Это критически важно для моделирования систем с разрывами (например, срабатывание клапана, столкновение тел) или для остановки интегрирования по достижению целевого состояния.

  • Гибкая настройка событий: Возможность выбора метода поиска момента наступления события для повышения точности и устойчивости расчета.

  • Контроль вычислений: Для предотвращения бесконечных циклов установлен лимит на количество вычислений правых частей ОДУ.

  • Поддержка написания условий и импорта модуля “Math.”: Блок поддерживает работу условных операторов (if-else) и имеет полный набор математических функций из модуля Math (например, Math.sin, Math.exp) для описания правых частей уравнений и условий событий.

Принцип работы:

  1. Пользователь описывает систему ОДУ, реализуя функцию \(f(t, y)\).

  2. Выбирается тип интегратора и настраиваются его параметры (точность, максимальный/минимальный шаг).

  3. Запускается процесс интегрирования.

Важно

Несмотря на то, что внутренний решатель блока использует адаптивный шаг для гарантии точности расчетов “внутри себя”, весь проект выполняется в дискретном режиме. При увеличении шага расчёта всей модели, решателю ОДУ может потребоваться больше внутренних итераций, что потребует увеличения параметра Максимальное кол-во обращений к функции.

 Интерфейс написания системы ОДУ имеет в общем 6 разделов:

 В Инициализации указываются параметры, участвующие в расчете системы ОДУ, а также производится инициализация начальных условий ОДУ \(y[0] = x_1\), \(y'[0] = x_2\).

 В Основном блоке пишутся уравнения, выраженные в форме Коши (относительно старшей производной): \(y(n) = f(t, y, y', …, y(n-1))\), а также пользовательские функции.

 В Дополнительном блоке задаются действия, проводимые до и после интегрирования.

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

 В разделе Расширенное событие указывается условие-функция, которое при смене знака запускает событие из списка:

  • Action.RESET_DERIVATIVES – сброс значения производных;

  • Action.RESET_STATE – переопределение значения вектора состояние через специальную функцию в разделе настроек;

  • Action.STOP – остановить интегрирование вектора состояний на данном шаге;

  • Action.CONTINUE – продолжить интегрирование состояний.

Важно

В Расширенных событиях при написании функций и событий применение команды return обязательно.

 В Простых событиях достаточно написать функцию (без команды return) и выбрать действие в выпадающем списке.

 В настройках события можно выбрать метод (Muller, Brent, Биссекция), которым решатель будет искать точный момент срабатывания функции-условия, и настроить количество допустимых итераций и точность метода.

1.  Настройка блока#

 Попасть в настройки можно двойным нажатием ЛКМ по блоку.

Block settings

Рис. 1 Настройки блока#

 Внутри блока открывается два основных окна:

  • Левое окно для переключения между системой дифференциальных уравнений и событиями;

  • Правое окно с панелью управления переменными.

Left window

Рис. 2 Левое окно#

Right window

Рис. 3 Правое окно#

 Секция дифференциальных уравнений содержит следующие разделы:

Additional blocks

Рис. 4 Дополнительные блоки#

Integration parameters

Рис. 5 Параметры интегрирования#

Примечание

Для раскрытия разделов Дополнительные блоки и Параметры интегрирования необходимо нажать по их названиям ЛКМ

 Секция событий содержит следующие разделы:

  1. Расширенное событие (см. рис. 6);

  2. Простое событие (см. рис. 7).

Extended Event

Рис. 6 Расширенное событие#

Simple event

Рис. 7 Простое событие#

Примечание

Для раскрытия разделов Расширенное событие и Простое событие необходимо нажать по их названиям ЛКМ

2.  Свойства#

Нет

3.  Входы и выходы#

Параметры

Вход/Выход

Описание

Единицы измерения

Тип порта

input

Вход

–

–

Автоматика

acceleration

Выход

–

–

Автоматика

velocity

Выход

–

–

Автоматика

displacement

Выход

–

–

Автоматика

LowerBound

Выход

–

–

Автоматика

Для того, чтобы посмотреть возможности подключения блока необходимо перейти на страницу Описание портов блоков

См. также

С примером использования данного блока можно ознакомиться в разделе Авиастроение практическое руководство Разработка математической модели парашютной посадки беспилотного летательного аппарата