exponenta event banner

Обнаружение пересечения нулей

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

Simulink ® использует метод, известный как обнаружение пересечения нуля, для точного определения местоположения разрыва без использования чрезмерно малых временных шагов. Обычно этот метод увеличивает время выполнения моделирования, но может привести к остановке некоторых моделирований до предполагаемого времени завершения.

Simulink использует для этой цели два алгоритма: неадаптивный и адаптивный. Сведения об этих методах см. в разделе Алгоритмы пересечения нулей.

Демонстрация эффектов обнаружения чрезмерного пересечения нуля

В этом примере представлены три модели, иллюстрирующие поведение пересечения нулей: example_bounce_two_integrators, example_doublebounce, и example_bounce.

example_bounce_two_integrators модель демонстрирует, как чрезмерное пересечение нуля может привести к остановке моделирования до предполагаемого времени завершения, если не используется адаптивный алгоритм.

example_bounce модель использует лучший дизайн модели, реализуя динамику шара с помощью двойного интегратора, чем example_bounce_two_integrators.

example_doublebounce модель демонстрирует, как адаптивный алгоритм успешно решает сложную систему с двумя различными требованиями пересечения нуля.

Рассмотрим example_bounce_two_integrators модель. Для вычисления вертикальной скорости и положения шара во время моделирования используются два отдельных интегратора.

  1. Откройте модель, запустив open_system('example_bounce_two_integrators') в командной строке.

  2. Как только появится блок-схема, задайте для параметра Параметры параметров конфигурации решателя > Параметры пересечения нуля > Алгоритм на панели Решатель (Solver) параметров конфигурации модели значение Nonadaptive. Установите время остановки модели равным 20 с. Эту настройку можно изменить на панели инструментов Simulink или на панели «Решатель» параметров конфигурации модели.

  3. Моделирование модели.

Теперь можно просматривать и анализировать результаты моделирования.

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

Измените время остановки моделирования на 25 с и смоделируйте модель. Моделирование останавливается с ошибкой из-за чрезмерных последовательных событий пересечения нуля в блоках «Сравнить с нулем» и «Позиция».

Simulink will stop the simulation of model 'example_bounce_two_integrators' because the 2 zero crossing signal(s) identified below caused 1000 consecutive zero crossing events in time interval between 20.357636989536076 and 20.357636990631594.
 --------------------------------------------------------------------------------
Number of consecutive zero-crossings : 1000
           Zero-crossing signal name : RelopInput
                          Block type : RelationalOperator
                          Block path : 'example_bounce_two_integrators/Compare To Zero/Compare'
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Number of consecutive zero-crossings : 500
           Zero-crossing signal name : IntgLoLimit
                          Block type : Integrator
                          Block path : 'example_bounce_two_integrators/Position'
--------------------------------------------------------------------------------
 

Хотя этот предел можно увеличить, настроив параметр Параметры конфигурации модели (Model Configuration Parameters) > Решатель (Solver) > Количество последовательных пересечений нулей (Number of series zero crossings), это изменение по-прежнему не позволяет моделированию продолжаться в течение 25 с.

Измените параметры «Параметры пересечения нулей» > «Алгоритм» на панели «Параметры конфигурации модели». Adaptive и снова смоделировать модель в течение 25 с.

Увеличивая масштаб последних 5 секунд моделирования, можно увидеть, что результаты более полные и ближе к ожидаемому аналитическому решению динамики подпрыгивающего мяча. Количество разговоров, которое вы видите, является следствием состояния системы, приближающегося к нулю, и ожидается в численном моделировании.

example_bounce модель использует блок интегратора второго порядка для моделирования динамики подпрыгивающего шара. Это предпочтительный метод моделирования двойной интеграции динамики шара для производительности решателя. Сравнение производительности решателя для example_bounce_two_integrators и example_bounceпопробуйте запустить приложение Solver Profiler в обеих моделях. Подробное сравнение обеих моделей см. в разделе Моделирование подпрыгивающего шара.

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

Предотвращение чрезмерных пересечений нулевого уровня

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

Изменить типПроцедура измененияПреимущества

Увеличить количество разрешенных нулевых переходов

Увеличьте значение параметра Число последовательных пересечений нуля. на панели Решатель (Solver) в диалоговом окне Параметры конфигурации (Configuration Parameters).

Это может дать модели достаточно времени для разрешения пересечения нуля.

Смягчить пороговое значение сигнала

Выберите Адаптивный (Adaptive) в раскрывающемся списке Алгоритм (Algorithm) и увеличьте значение опции Порог сигнала (Signal threshold) на панели Решатель (Solver) в диалоговом окне Параметры конфигурации (Configuration Parameters).

Решателю требуется меньше времени для точного определения местоположения пересечения нуля. Это может сократить время моделирования и исключить чрезмерное количество последовательных ошибок пересечения нуля. Однако ослабление порога сигнала может снизить точность.

Использовать адаптивный алгоритм

Выберите Адаптивный (Adaptive) в раскрывающемся списке Алгоритм (Algorithm) на панели Решатель (Solver) в диалоговом окне Параметры конфигурации (Configuration Parameters).

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

Отключить обнаружение пересечения нулей для определенного блока

  1. Снимите флажок Включить обнаружение пересечения нулей в диалоговом окне параметров блока.

  2. Выбрать Use local settings в раскрывающемся списке Элемент управления пересечением нуля (Zero-crossing) на панели Решатель (Solver) диалогового окна Параметры конфигурации (Configuration Parameters).

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

Отключить обнаружение пересечения нулей для всей модели

Выбрать Disable all в раскрывающемся списке Элемент управления пересечением нуля (Zero-crossing) на панели Решатель (Solver) диалогового окна Параметры конфигурации (Configuration Parameters).

Это предотвращает обнаружение нулевых пересечений в любом месте модели. Следствием этого является то, что ваша модель больше не получает преимуществ от повышенной точности, которую обеспечивает обнаружение пересечения нуля.

При использовании ode15s решатель, рассмотреть возможность корректировки порядка формул численного дифференцирования

Выберите значение из списка Maximum order раскрывающийся список на панели Решатель (Solver) диалогового окна Параметры конфигурации (Configuration Parameters).

Дополнительные сведения см. в разделе Максимальный порядок.

Уменьшить максимальный размер шага

Введите значение для Max step size на панели Решатель (Solver) диалогового окна Параметры конфигурации (Configuration Parameters).

Решатель выполняет шаги, достаточно небольшие для разрешения пересечения нуля. Однако уменьшение размера шага может увеличить время моделирования и редко является необходимым при использовании адаптивного алгоритма.

Как симулятор может пропустить события нулевого пересечения

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

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

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

Рассмотрим реализацию модели отскока с двумя интеграторами.

Профилирование последних 0,5 с моделирования с использованием профилировщика решателя показывает, что моделирование обнаруживает 44 события пересечения нуля в блоке сравнения с нулем и 22 события на выходе блока положения.

Увеличение значения параметра Относительный допуск (Relative tolerance) до 1e-2 вместо значения по умолчанию 1e-3. Этот параметр можно изменить в разделе Сведения о решателе (Solver Details) панели Решатель (Solver) в диалоговом окне Параметры конфигурации (Configuration Parameters) или с помощью set_param определить RelTol как '1e-2'.

Профилирование последних 0,5 с моделирования с новым относительным допуском решателя показывает, что он обнаруживает только 24 события пересечения нуля в блоке Сравнить с нулем (Compare To Zero) и 12 событий на выходе блока Положение (Position).

Обнаружение пересечения нулей в блоках

Блок может регистрировать набор переменных пересечения нуля, каждая из которых является функцией переменной состояния, которая может иметь разрыв. Функция пересечения нуля проходит через нуль от положительного или отрицательного значения, когда возникает соответствующая неоднородность. Зарегистрированные переменные пересечения нуля обновляются в конце каждого этапа моделирования, и любая переменная, которая изменила знак, идентифицируется как имеющая событие пересечения нуля.

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

Примечание

Алгоритм обнаружения пересечения нуля может создавать скобки для событий пересечения нуля только для сигналов типа данных double.

Блоки, регистрирующие нулевые пересечения

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

БлокКоличество обнаружений пересечения нулей

Брюшной пресс

Во-первых, чтобы обнаружить, когда входной сигнал пересекает ноль в направлении подъема или падения.

Обратная реакция

Во-вторых, один для обнаружения, когда верхний порог включен, и один для обнаружения, когда нижний порог включен.

Сравнить с константой

Во-первых, чтобы обнаружить, когда сигнал равен константе.

Сравнить с нулем

Во-первых, чтобы обнаружить, когда сигнал равен нулю.

Мертвая зона

Во-вторых, один для определения момента ввода мертвой зоны (входной сигнал минус нижний предел) и один для определения момента выхода мертвой зоны (входной сигнал минус верхний предел).

Позволить

Во-первых, если порт Enable находится внутри блока Subsystem, он обеспечивает возможность обнаружения нулевых пересечений. Дополнительные сведения см. в разделе Использование включенных подсистем.

Из файла

Во-первых, чтобы обнаружить, когда входной сигнал имеет разрыв в направлении подъема или падения

Из рабочей области

Во-первых, чтобы обнаружить, когда входной сигнал имеет разрыв в направлении подъема или падения

Хит-кроссинг

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

Если

Во-первых, чтобы определить, когда выполняется условие If.

Интегратор

Если порт сброса присутствует, для определения момента сброса.

Если выход ограничен, есть три пересечения нуля: одно для обнаружения, когда достигнут верхний предел насыщения, одно для обнаружения, когда достигнут нижний предел насыщения, и одно для обнаружения, когда насыщение осталось.

MinMax

Один для каждого элемента выходного вектора, чтобы обнаружить, когда входной сигнал является новым минимумом или максимумом.

Реляционный оператор

Во-первых, чтобы определить, является ли указанное отношение истинным.

Реле

Один, если реле выключено, для обнаружения точки включения. Если реле включено, для обнаружения точки отключения.

Насыщенность

Во-вторых, один для обнаружения, когда верхний предел достигнут или оставлен, и один для обнаружения, когда нижний предел достигнут или оставлен.

Интегратор второго порядка

Пять, два для обнаружения, когда достигнуто состояние x верхнего или нижнего предела, два для обнаружения, когда достигнуто состояние dx/dt верхнего или нижнего предела, и один для обнаружения, когда состояние выходит из насыщения.

Знак

Во-первых, чтобы определить, когда вход пересекает ноль.

Редактор сигналов

Во-первых, чтобы обнаружить, когда входной сигнал имеет разрыв в направлении подъема или падения

Шаг

Во-первых, чтобы определить время шага.

Выключатель

Во-первых, чтобы определить, когда возникает состояние переключения.

Вариант переключения

Во-первых, чтобы определить, когда выполняется условие обращения.

Спусковой механизм

Во-первых, если порт Triggered находится внутри блока Subsystem, он обеспечивает возможность обнаружения нулевых пересечений. Дополнительные сведения см. в разделе Использование инициированных подсистем.

Включенная и запускаемая подсистема

Два, один для разрешающего порта и один для триггерного порта. Дополнительные сведения см. в разделе Использование включенных и запускаемых подсистем

Примечание

Обнаружение пересечения нулей также доступно для диаграммы Stateflow ®, использующей режим непрерывного времени. Дополнительные сведения см. в разделе Настройка диаграммы потока состояний для моделирования непрерывного времени (поток состояний).

Пример реализации: Блок насыщения

Примером блока Simulink, который регистрирует пересечение нуля, является блок насыщенности. Обнаружение пересечения нуля идентифицирует следующие события состояния в блоке Насыщения:

  • Входной сигнал достигает верхнего предела.

  • Входной сигнал выходит за верхний предел.

  • Входной сигнал достигает нижнего предела.

  • Входной сигнал выходит за нижний предел.

Считается, что блоки симулятора, определяющие собственные события состояния, имеют собственные пересечения нулей. Используйте блок пересечения совпадений для получения явного уведомления о событии пересечения нуля. Список блоков с нулевыми пересечениями см. в разделе Блоки, регистрирующие нулевые пересечения.

Обнаружение события состояния зависит от построения внутреннего сигнала пересечения нуля. Этот сигнал недоступен для блок-схемы. Для блока насыщения сигнал, который используется для обнаружения пересечений нуля для верхнего предела, равен zcSignal = UpperLimit - u, где u - входной сигнал.

Сигналы пересечения нуля имеют атрибут направления, который может иметь следующие значения:

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

  • падение - пересечение нуля происходит, когда сигнал падает до нуля или через ноль, или когда сигнал выходит из нуля и становится отрицательным.

  • либо - пересечение нуля происходит, если возникает состояние подъема или падения.

Для верхнего предела блока насыщения направление пересечения нуля равно. Это позволяет обнаруживать входные и выходные события насыщения с использованием одного и того же сигнала пересечения нуля.

Связанные темы