Решатель переменного шага динамически настраивает размер временного шага, заставляя его увеличиться, когда переменная изменяется медленно и уменьшиться, когда переменная изменяется быстро. Это поведение заставляет решатель делать много небольших шагов около разрыва, потому что переменная быстро изменяется в этой области. Это улучшает точность, но может привести к чрезмерным временам симуляции.
Программное обеспечение Simulink® использует метод, который, как известно как обнаружение пересечения нулем, точно определял местоположение разрыва, не обращаясь к чрезмерно маленьким временным шагам. Обычно этот метод улучшает время выполнения симуляции, но это может заставить некоторые симуляции останавливаться перед намеченным временем завершения.
Два алгоритма предоставлены в программном обеспечении Simulink: неадаптивный и Адаптивный. Для получения информации об этих методах см. Алгоритмы Пересечения нулем.
Программное обеспечение Simulink идет с тремя моделями, которые иллюстрируют поведение пересечения нулем: sldemo_bounce_two_integrators
, sldemo_doublebounce
и sldemo_bounce
.
Модель sldemo_bounce_two_integrators
демонстрирует, как чрезмерные нулевые пересечения могут заставить симуляцию останавливаться перед намеченным временем завершения, если вы не используете адаптивный алгоритм.
Модель sldemo_bounce
использует лучший образцовый проект, чем sldemo_bounce_two_integrators
.
Модель sldemo_doublebounce
демонстрирует, как адаптивный алгоритм успешно решает сложную систему с двумя отличными требованиями пересечения нулем.
В командной строке MATLAB® введите sldemo_bounce_two_integrators
, чтобы загрузить пример.
Если блок-схема появляется, установите Model Configuration Parameters> Solver> параметр Algorithm к Nonadaptive
.
Также в панели Solver , установленной параметр Stop time на 20 с.
Запустите модель. В Редакторе Simulink выберите Simulation> Run.
После того, как симуляция завершается, кликните по окну блока Scope, чтобы видеть результаты.
Вы, возможно, должны нажать на Autoscale, чтобы просмотреть результаты в их полноте.
Используйте средства управления изменением масштаба осциллографа, чтобы тесно исследовать последний фрагмент симуляции. Вы видите, что скорость наводит чуть выше нуля в последнем моменте времени.
Измените окно редактирования Stop time симуляции на панели инструментов Simulink Editor на 25 секунд и запустите симуляцию снова.
На этот раз симуляция останавливается с ошибкой вскоре после того, как она передаст моделируемые 20 точек второго раза.
Чрезмерная болтовня как шар неоднократно приближается, нулевая скорость заставила симуляцию превышать предел по умолчанию 1 000 для количества последовательных нулевых позволенных пересечений. Несмотря на то, что можно увеличить этот предел путем корректировки Model Configuration Parameters> Solver> параметр Number of consecutive zero crossings. В этом случае внесение того изменения не позволяет симуляции моделировать в течение 25 секунд.
Также в панели Solver, из опускающегося меню Algorithm, выбирают алгоритм Adaptive.
Запустите симуляцию снова.
На этот раз симуляция выполнение до завершения, потому что адаптивный алгоритм препятствовал тому, чтобы произошло чрезмерное количество нулевых пересечений.
В подсказке команды MATLAB введите sldemo_doublebounce
, чтобы загрузить пример. Модель и открытое окно анимации. В окне анимации два шара являются опорой на две платформы.
В окне анимации нажмите кнопку Nonadaptive, чтобы запустить пример с помощью неадаптивного алгоритма. Это - настройка по умолчанию, используемая программным обеспечением Simulink для всех моделей.
Шару справа дают большую начальную скорость. Следовательно, эти два мяча попадают в землю и отскакивают в разное время.
Остановы симуляции после 14 секунд, потому что шар слева превысил количество нулевого предела пересечений. Шар справа оставляют, зависая в середине воздуха.
Диалоговое окно сообщения об ошибке открывается. Нажмите OK, чтобы закрыть его.
Нажмите на кнопку Adaptive, чтобы запустить симуляцию с адаптивным алгоритмом.
Заметьте, что на этот раз симуляция выполнение до завершения, даже после того, как земля переключается на верхний регистр из-под шара слева в 20 секунд.
Возврат и модели двойного возврата показывают, что высокочастотные колебания о разрыве ('болтовня') могут заставить симуляцию преждевременно останавливаться.
Для решателя также возможно полностью пропустить нулевые пересечения, если ошибочные допуски решателя являются слишком большими. Это возможно, потому что проверки метода обнаружения пересечения нулем, чтобы видеть, изменило ли значение сигнала знак после главного временного шага. Изменение знака указывает, что произошло нулевое пересечение, и алгоритм пересечения нулем будет затем искать в течение точного времени пересечения. Однако, если нулевое пересечение происходит во временном шаге, но значения вначале и конец шага не указывают на изменение знака, решатель переступает через пересечение, не обнаруживая его.
Следующие данные показывают сигнал, что кресты обнуляют. Прежде всего интегратор переступает через событие, потому что знак не изменился между временными шагами. Во втором решатель обнаруживает изменение в знаке и так обнаруживает событие пересечения нулем.
Используйте следующую таблицу, чтобы предотвратить чрезмерные ошибки пересечения нулем в вашей модели.
Внесите это изменение... | Как внести это изменение... | Объяснение для внесения этого изменения... |
---|---|---|
Увеличьте число позволенных нулевых пересечений | Увеличьте значение Number of consecutive zero crossings. опция на Solver разделяет на области в диалоговом окне Configuration Parameters. | Это может дать ваше достаточно образцовое время, чтобы разрешить нулевое пересечение. |
Ослабьте Signal threshold | Выберите Adaptive из выпадающего Algorithm и увеличьте значение опции Signal threshold на панели Solver в диалоговом окне Configuration Parameters. | Решатель требует, чтобы меньше времени точно определило местоположение нулевого пересечения. Это может уменьшать время симуляции и устранить чрезмерное количество последовательных ошибок пересечения нулем. Однако ослабление Signal threshold может уменьшать точность. |
Используйте алгоритм Adaptive | Выберите Adaptive из Algorithm, выпадающего на панели Solver в диалоговом окне Configuration Parameters. | Этот алгоритм динамически настраивает порог пересечения нулем, который улучшает точность и сокращает количество последовательных нулевых обнаруженных пересечений. С этим алгоритмом у вас есть опция определения и Time tolerance и Signal threshold. |
Отключите обнаружение пересечения нулем для определенного блока |
| Локально отключающее обнаружение пересечения нулем препятствует тому, чтобы определенный блок остановил симуляцию из-за чрезмерных последовательных нулевых пересечений. Все другие блоки продолжают извлекать выгоду из увеличенной точности, которую обеспечивает обнаружение пересечения нулем. |
Отключите обнаружение пересечения нулем для целой модели | Выберите | Это препятствует тому, чтобы нулевые пересечения были обнаружены где угодно в вашей модели. Последствие - то, что ваш номер модели более длинные преимущества от увеличенной точности, которую обеспечивает обнаружение пересечения нулем. |
При использовании решателя | Выберите значение из | Для получения дополнительной информации смотрите Максимальный порядок. |
Уменьшайте максимальный размер шага | Введите значение для опции | Это может обеспечить, чтобы решатель предпринял шаги достаточно маленький, чтобы разрешить нулевое пересечение. Однако сокращение размера шага может увеличить время симуляции и редко необходимо при использовании Адаптивного алгоритма. |
Программное обеспечение Simulink включает два алгоритма обнаружения пересечения нулем: неадаптивный и Адаптивный.
Чтобы выбрать алгоритм, или используйте опцию Algorithm в панели Решателя диалогового окна Configuration Parameter или используйте команду ZeroCrossAlgorithm
. Команда может или быть установлена в 'Nonadaptive'
или 'Adaptive'
.
Неадаптивный алгоритм предусмотрен назад совместимость с более старыми версиями Simulink и является значением по умолчанию. Это заключает в скобки событие пересечения нулем и использует все больше меньшие временные шаги, чтобы точно определить, когда нулевое пересечение произошло. Несмотря на то, что соответствующий для многих типов симуляций, Неадаптивный алгоритм может привести к очень длинным временам симуляции, когда высокая степень 'болтовни' (высокочастотное колебание вокруг точки пересечения нулем) присутствует.
Адаптивный алгоритм динамически включает и выключает заключение в скобки и является хорошим выбором когда:
Система содержит большой объем болтовни.
Вы хотите задать защитную полосу (допуск), вокруг которого обнаруживается нулевое пересечение.
Адаптивный алгоритм выключает заключение в скобки пересечения нулем (прекращает выполнять итерации), если любое из следующего удовлетворено:
Нулевая ошибка пересечения превышена. Это определяется значением, заданным в опции Signal threshold в панели Решателя диалогового окна Configuration Parameters. Это может также быть установлено с командой ZCThreshold
. Значением по умолчанию является Auto
, но можно ввести любой вещественный номер, больше, чем нуль для допуска.
Система превысила количество последовательных нулевых пересечений, заданных в опции Number of consecutive zero crossings в панели Решателя диалогового окна Configuration Parameters. Также это может быть установлено с командой MaxConsecutiveZCs
.
Адаптивный алгоритм автоматически устанавливает допуск к обнаружению пересечения нулем. Также можно установить допуск путем введения вещественного номера, больше, чем или равный нулю в панели Решателя Параметров конфигурации, выпадающий Signal threshold
. Эта опция только становится активной, когда алгоритм пересечения нулем установлен в Adaptive
.
Эти показы диаграммы, как порог Сигнала устанавливает область окна вокруг точки пересечения нулем. Сигналы, находящиеся в пределах этого окна, рассматриваются как являющийся в нуле.
Событие пересечения нулем заключается в скобки временными шагами Tn-1 и Tn. Решатель итеративно уменьшает временные шаги, пока переменная состояния не находится в полосе, заданной порогом сигнала, или пока количество последовательных нулевых пересечений не равняется или превышает значение в панели Решателя Параметров конфигурации, выпадающий Number of consecutive zero crossings
.
Очевидно от фигуры, что увеличение порога сигнала увеличивает расстояние между временными шагами, которые будут выполняться. Это часто приводит к более быстрым временам симуляции, но может уменьшать точность.
Блок может указать набор переменных пересечения нулем, каждая из которых является функцией переменной состояния, которая может иметь разрыв. Функция пересечения нулем проходит через нуль от положительной или отрицательной величины, когда соответствующий разрыв происходит. Зарегистрированные переменные пересечения нулем обновляются в конце каждого шага симуляции, и любая переменная, которая изменила знак, идентифицирована как имевший событие пересечения нулем.
Если какие-либо нулевые пересечения обнаруживаются, программное обеспечение Simulink интерполирует между предыдущими и текущими значениями каждой переменной, которая изменила знак, чтобы оценить времена нулевых пересечений (то есть, разрывы).
Алгоритм обнаружения Пересечения нулем может заключить в скобки события пересечения нулем только для сигналов типа данных дважды
В следующей таблице перечислены блоки, которые указывают нулевые пересечения, и объясняет, как блоки используют нулевые пересечения:
Блок | Описание нулевого пересечения |
---|---|
Один: обнаружить, когда входной сигнал пересекает нуль или в повышении или в падающем направлении. | |
Два: один, чтобы обнаружить, когда верхний порог занят, и один, чтобы обнаружить, когда более низкий порог занят. | |
Один: обнаружить, когда сигнал равняется константе. | |
Один: обнаружить, когда сигнал равняется нулю. | |
Два: один, чтобы обнаружить, когда мертвая зона вводится (входной сигнал минус нижний предел), и один, чтобы обнаружить, когда из мертвой зоны выходят (входной сигнал минус верхний предел). | |
Один: Если порт Enable в блоке Subsystem, он предусматривает возможность обнаружить нулевые пересечения. Смотрите Разрешать блок Subsystem для деталей Используя Enabled Подсистемы. | |
Один: обнаружить, когда входной сигнал имеет разрыв или в повышении или в падающем направлении | |
Один: обнаружить, когда входной сигнал имеет разрыв или в повышении или в падающем направлении | |
Один или два. Если нет никакого выходного порта, существует только один нуль, пересекающийся, чтобы обнаружить, когда входной сигнал поразил пороговое значение. Если существует выходной порт, второе нулевое пересечение используется, чтобы возвратить вывод 0 от 1, чтобы создать подобный импульсу вывод. | |
Один: обнаружить когда, Если условие соблюдают. | |
Если порт сброса присутствует, чтобы обнаружить, когда сброс происходит. Если вывод ограничивается, существует три нулевых пересечения: один, чтобы обнаружить, когда верхний предел насыщения достигнут, один, чтобы обнаружить, когда более низкий предел насыщения достигнут, и один, чтобы обнаружить, когда насыщение оставляют. | |
Один: для каждого элемента выходного вектора, чтобы обнаружить, когда входной сигнал является новым минимумом или максимумом. | |
Один: обнаружить, когда заданное отношение верно. | |
Один: если реле выключено, чтобы обнаружить переключатель - на точке. Если реле работает, чтобы обнаружить выключать точку. | |
Два: один, чтобы обнаружить, когда верхний предел достигнут или оставлен, и один, чтобы обнаружить, когда нижний предел достигнут или оставлен. | |
Пять: два, чтобы обнаружить, когда state x верхнее или нижний предел достигнуты; два, чтобы обнаружить, когда dx состояния/dt верхний или нижний предел достигнут; и один, чтобы обнаружить, когда состояние оставляет насыщение. | |
Один: обнаружить, когда вход пересекается через нуль. | |
Один: обнаружить, когда входной сигнал имеет разрыв или в повышении или в падающем направлении | |
Один: обнаружить время шага. | |
Один: обнаружить, когда условие переключателя происходит. | |
Один: обнаружить, когда условие случая соблюдают. | |
Один: Если порт Triggered в блоке Subsystem, он предусматривает возможность обнаружить нулевые пересечения. Смотрите Инициированный блок Subsystem для деталей: Используя Инициированные Подсистемы. | |
Два: один для разрешать порта и один для триггерного порта. Смотрите блок Enabled and Triggered Subsystem для деталей: Используя Enabled и Triggered подсистемы |
Обнаружение пересечения нулем также доступно для графика Stateflow®, который использует непрерывно-разовый режим. Смотрите Конфигурируют диаграмму Stateflow для Непрерывно-разовой Симуляции (Stateflow) для получения дополнительной информации.
Примером блока Simulink, который указывает нулевые пересечения, является блок Saturation. Обнаружение пересечения нулем идентифицирует эти события состояния в блоке Saturation:
Входной сигнал достигает верхнего предела.
Входной сигнал оставляет верхний предел.
Входной сигнал достигает нижнего предела.
Входной сигнал оставляет нижний предел.
Блоки Simulink, которые задают их собственные события состояния, как рассматривается, имеют внутренние нулевые пересечения. Используйте блок Hit Crossing, чтобы получить явное уведомление о событии пересечения нулем. Смотрите Блоки, Что Нулевые Пересечения Регистра для списка блоков, которые включают нулевые пересечения.
Обнаружение события состояния зависит от конструкции внутреннего сигнала пересечения нулем. Этот сигнал не доступен блок-схемой. Для блока Saturation сигналом, который используется, чтобы обнаружить нулевые пересечения для верхнего предела, является zcSignal = UpperLimit
- u
, где u
является входным сигналом.
Сигналы пересечения нулем имеют атрибут направления, который может иметь эти значения:
при повышении — происходит нулевое пересечение, когда сигнал повышается до или через нуль, или когда сигнал оставляет нуль и становится положительным.
при падении — происходит нулевое пересечение, когда сигнал падает на или через нуль, или когда сигнал оставляет нуль и становится отрицательным.
также — Нулевое пересечение происходит, если или повышение или падающее условие происходят.
Для верхнего предела блока Saturation направление нулевого пересечения также. Это позволяет вводу и отъезду событий насыщения быть обнаруженным с помощью того же сигнала пересечения нулем.
Алгебраические Концепции цикла | Моделирование динамических систем | Решатели