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