Алгебраические циклы

Алгебраические Концепции цикла

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

Некоторые примеры блоков с прямыми входными параметрами сквозного соединения:

Непрямые блоки сквозного соединения поддерживают Переменную состояния. Двумя примерами является Интегратор и Единичная задержка.

Совет

Чтобы определить, имеет ли блок прямое сквозное соединение, считайте раздел Characteristics блочной страницы с описанием.

Данные показывают пример алгебраического цикла. Блок Sum является алгебраической переменной xa, который ограничивается равняться первому входному параметру u минус xa (например, xa = uxa).

Решение этого простого цикла является xa = u/2.

Математическая интерпретация

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

x˙=f (x, t),

где x является вектором состояния, и t является независимой переменной времени.

Некоторые системы уравнений содержат дополнительные ограничения, которые включают независимую переменную и вектор состояния, но не производную вектора состояния. Такие системы называются дифференциальными алгебраическими уравнениями (ДАУ),

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

x˙=f (x, xa, t) 0=g (x, xa, t),

где:

  • f и g может быть вектор-функциями.

  • Первое уравнение является дифференциальным уравнением.

  • Второе уравнение является алгебраическим уравнением.

  • Вектор дифференциальных переменных является x.

  • Вектор алгебраических переменных является xa.

В моделях Симулинка алгебраические циклы являются алгебраическими ограничениями. Модели с алгебраическими циклами задают систему дифференциальных алгебраических уравнений. Симулинк решает алгебраические уравнения (алгебраический цикл) численно для xa на каждом шаге решателя ОДУ.

Модель в фигуре эквивалентна этой системе уравнений в полуявной форме:

x˙=f (x, xa, t) =xa0=g (x, xa, t) = −x+u−2xa.

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

Физическая интерпретация

Алгебраические ограничения:

  • Происходите при моделировании физических систем, часто из-за законов сохранения, таких как сохранение массы и энергии

  • Происходите, когда вы выберете конкретную систему координат для модели

  • Справка налагает конструктивные ограничения на системные ответы в динамической системе

Используйте Simscape™ для образцовых систем, которые охватывают механическое устройство, электрические, гидравлические, и другие физические области как физические сети. Simscape создает ДАУ, которые характеризуют поведение модели. Программное обеспечение интегрирует эти уравнения с остальной частью модели и затем решает ДАУ непосредственно. Симулинк решает переменные для компонентов в различных физических доменах одновременно, избегая проблем с алгебраическими циклами.

Искусственные алгебраические циклы

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

Запустите с этой модели, которая представляет простое пропорциональное управление Завода, описанного.

Перезапись в форме пространства состояний:

Система не имеет ни алгебраических переменных, ни прямого сквозного соединения и не содержит алгебраический цикл.

Измените модель, как описано в следующих шагах:

  1. Заключите блоки Контроллера и Завода в подсистему.

  2. В подсистеме блокируют диалоговое окно, выбирают Treat как атомарный модуль, чтобы сделать подсистему атомарной. Для получения дополнительной информации смотрите Атомарные подсистемы

  3. В панели Диагностики Образцовых Параметров конфигурации, установленных Алгебраический параметр цикла на error.

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

Как алгебраические работы решателя цикла

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

Симулинк использует алгоритм области доверия резкого искривления, чтобы решить алгебраические циклы. Используемый допуск меньше, чем решатель ОДУ Reltol и Abstol. Это вызвано тем, что Симулинк использует “явный метод ОДУ”, чтобы решить Индексный 1 дифференциал алгебраические уравнения (ДАУ).

Для алгебраического решателя цикла, чтобы работать,

  • Должен быть один блок, где решатель цикла может повредить цикл и попытаться решить цикл.

  • Модель должна иметь действительные двойные сигналы.

  • Базовое алгебраическое ограничение должно быть сглаженной функцией

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

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

xa (t) = u (t) / 2.(1)

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

Для получения дополнительной информации см. Решение индексных 1 ДАУ в MATLAB и Simulink []1

Доверительная область и Алгоритмы поиска строки в Алгебраическом Решателе Цикла.  Алгебраический решатель цикла Simulink использует один из двух алгоритмов, чтобы решить алгебраические циклы:

  • Доверительная область

  • Поиск строки

По умолчанию алгебраический решатель цикла использует алгоритм доверительной области.

Если алгебраический решатель цикла не может решить алгебраический цикл с алгоритмом доверительной области, попытайтесь моделировать модель с помощью алгоритма поиска строки.

Чтобы переключиться на алгоритм поиска строки, в командной строке MATLAB®, войдите:

set_param(model_name, 'AlgebraicLoopSolver', 'LineSearch');

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

set_param(model_name, 'AlgebraicLoopSolver', 'TrustRegion');

Для получения дополнительной информации см.:

Ограничения Алгебраического Решателя Цикла.  Алгебраическое решение цикла является итеративным процессом. Алгебраический решатель цикла Simulink успешен, только если алгебраический цикл сходится к определенному ответу. Когда цикл не удается сходиться или сходится слишком медленно, выходы моделирования с ошибкой.

Алгебраический решатель цикла не может решить алгебраические циклы, которые содержат любое следующее:

  • Блоки с выходными параметрами с дискретным знаком

  • Блоки с недвойными или комплексными выходами

  • Разрывы

  • Графики Stateflow®

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

Если ваша модель содержит алгебраический цикл:

  • Вы не можете сгенерировать код для модели.

  • Алгебраический решатель цикла Simulink не может смочь решить алгебраический цикл.

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

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

Идентифицируйте алгебраические циклы в своей модели

Используйте эти методы, чтобы искать алгебраические циклы в вашей модели:

Как обработать алгебраические циклы в модели

Если Симулинк сообщает об алгебраическом цикле в вашей модели, алгебраический решатель цикла может смочь решить цикл. Если Симулинк не может решить цикл, существует несколько методов, чтобы устранить цикл.

Используйте этот рабочий процесс, чтобы решить, как вы хотите устранить алгебраический цикл.

Подсветите алгебраические циклы в модели

Используйте getAlgebraicLoops, чтобы идентифицировать алгебраические циклы в модели и подсветить их в Редакторе Simulink. С этим подходом:

  • Можно пересечь несколько уровней иерархии модели, чтобы определить местоположение алгебраических циклов.

  • Можно идентифицировать действительные и искусственные алгебраические циклы.

  • Можно визуализировать все циклы в модели одновременно.

  • Вы не должны развертывать в и из модели через контуры.

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

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

  1. Откройте модель.

  2. В панели Диагностики Образцовых Параметров конфигурации, набор Алгебраический цикл к none или warning. Установка этого параметра на error препятствует тому, чтобы модель компилировала.

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

  4. В подсказке команды MATLAB войдите:

    Simulink.BlockDiagram.getAlgebraicLoops(bdroot)

Функция getAlgebraicLoops подсвечивает алгебраические циклы в модели, включая алгебраические циклы в подсистемах. Это также создает отчет с информацией о каждом цикле:

  • Сплошные линии представляют действительные алгебраические циклы.

  • Пунктирные линии представляют искусственные алгебраические циклы.

  • Красная подсветка появляется вокруг блока, присвоенного с алгебраической переменной.

  • ID Цикла помогает вам идентифицировать систему, которая содержит конкретный цикл.

Настройте отчет путем выбора или снятия флажка Visible для цикла.

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

Simulink не сохраняет выделение цикла. Закрытие модели или выход из отображения удаляют выделение цикла.

Используйте алгебраическую диагностику цикла

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

В панели Диагностики Образцовых Параметров конфигурации, установленных Алгебраический параметр цикла.

Установка Ответ моделирования
'none'

Симулинк пытается решить алгебраический цикл; сообщает ошибка, только если алгебраический цикл не может быть решен.

предупреждение

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

ошибка

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

Этот пример показывает, как использовать алгебраическую диагностику цикла, чтобы подсветить алгебраические циклы в модели sldemo_hydcyl.

  1. Откройте sldemo_hydcyl модель.

  2. В панели Диагностики Образцовых Параметров конфигурации, установленных Алгебраический параметр цикла на error.

  3. Моделируйте модель.

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

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

  4. Закройте Диагностическое Средство просмотра, чтобы удалить подсветки.

  5. Закройте модель sldemo_hydcyl. Не сохраняйте изменения.

Используйте ashow Команду Отладчика

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

  1. Откройте sldemo_hydcyl модель.

    По умолчанию Алгебраический параметр цикла для этой модели устанавливается на none.

  2. Запустите отладчик Simulink. Выберите Simulation> Debug> Debug Model.

    Запустите отладчик.

  3. В подсказке команды MATLAB войдите:

    ashow

    Команда возвращает алгебраический цикл в sldemo_hydcyl и количестве блоков в цикле.

    Found 1 Algebraic loop(s): 
    System number#Algebraic loop id, number of blocks in loop
    - 0#1, 9 blocks in loop
    
  4. Чтобы перечислить блоки в этом алгебраическом цикле, в подсказке команды MATLAB, войдите:

    ashow 0#1

    Подсистема Потока Распределительного клапана в подсистеме блока Клапана/цилиндра/поршня/Spring открывается алгебраическим циклом в подсвеченной модели. Функция перечисляет девять блоков в алгебраическом цикле:

    - sldemo_hydcyl/Valve//Cylinder//Piston//Spring Assembly/Control Valve Flow/IC
    - sldemo_hydcyl/Valve//Cylinder//Piston//Spring Assembly/Control Valve Flow/signed sqrt
    - sldemo_hydcyl/Valve//Cylinder//Piston//Spring Assembly/Control Valve Flow/Product
    - sldemo_hydcyl/Valve//Cylinder//Piston//Spring Assembly/laminar flow pressure drop
    - sldemo_hydcyl/Valve//Cylinder//Piston//Spring Assembly/Sum7
    - sldemo_hydcyl/Pump/IC
    - sldemo_hydcyl/Valve//Cylinder//Piston//Spring Assembly/Control Valve Flow/
    Sum1 (algebraic variable) - sldemo_hydcyl/Pump/Sum1 - sldemo_hydcyl/Pump/leakage (algebraic variable)

Удалите алгебраические циклы

Используйте эти методы, чтобы удалить алгебраические циклы в модели.

Представьте задержку

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

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

  • BlackBox_A —> BlackBox_B —> BlackBox_C —> BlackBox_A

  • BlackBox_B —> BlackBox_C —> BlackBox_B

Когда вы обновляете эту модель, Simulink обнаруживает цикл BlackBox_A —> BlackBox_B —> BlackBox_C —> BlackBox_A.

Поскольку вы не знаете содержимое этих подсистем, повреждаете циклы путем добавления блока Unit Delay вне подсистем. Существует три способа использовать блок Unit Delay, чтобы повредить эти циклы:

  • Добавьте единичную задержку между BlackBox_A и BlackBox_C.

  • Добавьте единичную задержку между BlackBox_B и BlackBox_C.

  • Добавьте блоки Единичной задержки к обоим алгебраическим циклам.

Добавьте единичную задержку между BlackBox_A и BlackBox_C

Если вы добавляете единичную задержку на сигнале обратной связи между подсистемами BlackBox_A и BlackBox_C, вы представляете минимальный номер единичных задержек (1) к системе. Путем представления задержки перед BlackBox_A BlackBox_B и BlackBox_C используют данные от шага текущего времени.

Добавьте единичную задержку между BlackBox_B и BlackBox_C

Если вы добавляете единичную задержку между подсистемами BlackBox_B и BlackBox_C, вы повреждаете алгебраический цикл между BlackBox_B и BlackBox_C. Кроме того, вы повреждаете цикл между BlackBox_A и BlackBox_C, потому что тот сигнал завершает алгебраический цикл. Путем вставки блока Unit Delay перед BlackBox_C BlackBox_C теперь работает с данными от предыдущего временного шага только.

Добавьте единичные задержки к обоим алгебраическим циклам

В примере здесь, вы вставляете блоки Единичной задержки, чтобы повредить оба алгебраических цикла. В этой модели BlackBox_A и BlackBox_B используют данные от предыдущего временного шага. BlackBox_C использует данные от шага текущего времени.

Решите алгебраические циклы вручную

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

Создайте Исходные предположения Используя Блоки Алгебраического ограничения и IC.  Ваша сила модели содержит циклы, для которых решатель цикла не может сходиться без хорошего, исходного предположения для алгебраических состояний. Можно задать исходное предположение для алгебраических переменных состояния, но использовать этот метод только, когда вы думаете, что цикл законен.

Существует два способа задать исходное предположение:

  • Поместите блок IC в алгебраический цикл.

  • Задайте исходное предположение для сигнала в алгебраическом цикле с помощью блока Algebraic Constraint.

Как Simulink устраняет искусственные алгебраические циклы

Когда вы включаете, Минимизируют алгебраические случаи цикла, Симулинк пытается устранить искусственные алгебраические циклы. В этом примере модель содержит атомарную подсистему, которая вызывает искусственный алгебраический цикл.

Содержимое атомарной подсистемы не является прямым сквозным соединением, но Simulink идентифицирует атомарную подсистему как прямое сквозное соединение.

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

Устранить этот алгебраический цикл,

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

  2. В панели Диагностики Образцовых Параметров конфигурации, установленных Алгебраический параметр цикла на warning или none.

  3. В панели Импорта/Экспорта Данных убедитесь, что параметр журналирования Сигнала отключен. Если журналирование сигнала включено, Simulink не может устранить искусственные алгебраические циклы.

  4. Чтобы отобразить отсортированный порядок для этой модели и атомарной подсистемы, выберите Display> Blocks> Sorted Execution Order.

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

    Все блоки в подсистеме выполняются на том же уровне:1. (0 самый низкий уровень, указывая на первые блоки, которые выполнятся.)

    Примечание

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

  5. В диалоговом окне Subsystem Parameters модели верхнего уровня выберите Minimize алгебраические случаи цикла. Этот параметр направляет Simulink, чтобы попытаться устранить алгебраический цикл, который содержит атомарную подсистему, когда это моделирует модель. Сохраните изменения.

  6. Нажмите Simulation> Update Diagram, чтобы повторно вычислить отсортированный порядок.

    Теперь существует два уровня отсортированного порядка в подсистеме: 1 и 2.

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

Когда вы моделируете модель, все блоки выполняют методы в этом порядке:

  1. mdlOutputs

  2. mdlDerivatives

  3. mdlUpdate

В исходной версии этой модели выполнение метода mdlOutputs запускается с блока Plant, потому что блок Plant является непрямым сквозным соединением. Выполнение заканчивается с блоком Controller.

Примечание

Для получения дополнительной информации об этих методах, см. Блочные Методы.

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

Эти условия верны:

  • Атомарный модуль 2 не является прямым сквозным соединением.

  • Атомарный модуль 1 имеет только метод mdlOutputs.

Только mdlDerivatives или методам mdlUpdate Атомарного модуля 2 нужен вывод Атомарного модуля 1. Simulink может выполнить то, что обычно выполнялось бы во время метода mdlOutput Атомарного модуля 1 в методах mdlDerivatives Атомарного модуля 2.

Новый порядок выполнения для модели:

  1. Метод mdlOutputs модели

    1. Метод mdlOutputs Атомарного модуля 2

    2. Методы mdlOutputs других блоков

  2. Метод mdlDerivatives модели

    1. Метод mdlOutputs Атомарного модуля 1

    2. Метод mdlDerivatives Атомарного модуля 2

    3. Метод mdlDerivatives других блоков

Для Минимизирования алгебраического метода случаев цикла, чтобы быть успешными, подсистема или модель, на которую ссылаются, должны иметь блок "не прямое сквозное соединение", соединенное непосредственно с Inport. Simulink может затем установить свойство DirectFeedthrough блока Inport к false указывать, что входной порт не имеет прямого сквозного соединения.

Устраните искусственные алгебраические циклы, вызванные атомарными подсистемами

Если атомарная подсистема вызывает искусственный алгебраический цикл, преобразуйте атомарную подсистему в виртуальную подсистему. Это изменение не имеет никакого эффекта на поведение модели. Когда подсистема является атомарной, и вы моделируете модель, Simulink вызывает алгебраический решатель цикла. Решатель отключает после одной итерации. Алгебраический цикл автоматически решен, потому что нет никакой алгебраической константы. После того, как вы сделаете подсистему виртуальной, Simulink не вызывает алгебраический решатель цикла во время моделирования.

Преобразовывать атомарную подсистему в виртуальную подсистему:

  1. Откройте модель, которая содержит атомарную подсистему.

  2. Щелкните правой кнопкой по атомарной подсистеме и выберите Subsystem Parameters.

  3. Очистите Обработку как атомарный модульный параметр.

  4. Сохраните изменения.

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

  • Алгебраическое ограничение

  • Искусственный алгебраический цикл, который не был вызван этой атомарной подсистемой

Связанные сигналы, которые создают искусственные алгебраические циклы

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

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

  • Вывод q1 является уровнем потока жидкости в корпус от насоса.

  • Вывод h2 является высотой жидкости во втором корпусе.

  • Блок State-Space задает динамический ответ системы корпуса к операции насоса:

  • Вывод от блока State-Space является вектором, который содержит q1 и h2.

Если вы моделируете эту модель с Алгебраическим набором параметра цикла к warn или error, Simulink идентифицирует алгебраический цикл.

Устранить этот алгебраический цикл:

  1. Измените C и матрицы D можно следующим образом:

  2. Передайте q1 непосредственно Осциллографу вместо через блок State-Space.

    Теперь, входной параметр (q1) не передает непосредственно выводу (матрица D 0), таким образом, блок State-Space больше не имеет прямое сквозное соединение. Сигнал обратной связи имеет только один элемент теперь, таким образом, Селекторный блок более не необходим, как вы видите в следующей модели.

Модель и блочные параметры, чтобы диагностировать и устранить искусственные алгебраические циклы

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

  • Минимизируйте алгебраический параметр случаев цикла — Указывают, что Simulink пытаются устранить любые искусственные алгебраические циклы для:

    • Атомарные подсистемы — В диалоговом окне Subsystem Parameters, выберите Minimize алгебраические случаи цикла.

    • Блоки модели — Для модели, на которую ссылаются, в панели Ссылки Модели Параметров конфигурации, выбирают Minimize алгебраические случаи цикла.

  • Минимизируйте алгебраический параметр цикла — Задает, какие диагностические меры Simulink принимает, если Минимизирование алгебраического параметра случаев цикла не имеет никакого эффекта.

    Минимизирование алгебраического параметра цикла находится в панели Диагностики Параметров конфигурации. Диагностические действия для этого параметра:

    Установка Ответ моделирования
    'none'

    Simulink не принимает мер.

    предупреждение

    Simulink отображает предупреждение, что Минимизирование алгебраического параметра случаев цикла не имеет никакого эффекта.

    ошибка

    Simulink отключает моделирование и отображает ошибку, что Минимизирование алгебраического параметра случаев цикла не имеет никакого эффекта.

Блокируйте сокращение и искусственные алгебраические циклы

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

Включение блочного сокращения может также помочь Simulink решить искусственные алгебраические циклы.

Рассмотрите следующую модель в качестве примера.

Первоначально, блокируйтесь, сокращение выключено. Когда вы моделируете эту модель, Атомарную Модульную подсистему и Усиление и Выдерживаете сравнение с Постоянными блоками, часть алгебраического цикла, который не может решить Simulink.

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

Сравнивание с Постоянным и блоками Усиления было устранено из модели, таким образом, они больше не генерируют алгебраическую ошибку цикла. Атомарная Модульная подсистема генерирует предупреждение:

Warning: If the inport 'ex_aloop_block_reduction_errwarn/
Atomic Unit/In1' of subsystem 'ex_aloop_block_reduction_errwarn/
Atomic Unit' involves direct feedback, then an algebraic loop
exists, which Simulink cannot remove. Consider clearing the 
'Minimize algebraic loop occurrences' parameter to avoid this 
warning.

Совет

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

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

Установка Минимизирования алгебраического параметра случаев цикла не всегда работает. Simulink не может изменить свойство DirectFeedthrough Inport для атомарной подсистемы, если Inport соединяется с Выходным портом только через блоки прямого сквозного соединения.

В этой модели подсистема Plant+Controller вызывает алгебраический цикл, но это имеет дополнительный блок Gain и дополнительный вывод.

Simulink не может переместить метод mdlOutputs блока Controller к методу mdlDerivative Атомарного модуля 1, потому что вывод атомарной подсистемы зависит от вывода блока Controller. Вы не можете сделать подсистему "не прямым сквозным соединением".

Можно изменить эту модель, чтобы устранить искусственный алгебраический цикл путем переопределения атомарной подсистемы путем добавления дополнительных блоков Inport и Gain, как вы видите в модели здесь. Выполнение так делает In1 "не прямым сквозным соединением" и прямым сквозным соединением In2, таким образом повреждая алгебраический цикл.

Моделирование факторов с алгебраическими циклами

Большие модели управления с искусственными алгебраическими циклами

Примите эти методы проектирования для больших моделей с алгебраическими циклами:

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

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

  • Если вы планируете сгенерировать код для своей модели, включите Минимизирование алгебраического параметра случаев цикла для всех атомарных подсистем. Когда возможно, убедитесь, что входные порты для атомарных подсистем соединяются непосредственно с блоками "не прямое сквозное соединение".

  • Постарайтесь не комбинировать "не прямое сквозное соединение" и пути прямого сквозного соединения с помощью блоков Создателя или Мультиплексора Шины. Simulink не может смочь устранить любые получившиеся искусственные алгебраические циклы. Вместо этого рассмотрите кластеризацию "не прямого сквозного соединения" и объектов прямого сквозного соединения в отдельных подсистемах.

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

Блоки модели и прямое сквозное соединение

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

Прямое Сквозное соединение Блока модели, Вызванное Структурой Подмодели.  Блок модели может быть прямым каналом через блок из-за структуры модели, на которую ссылаются. Где прямой канал посредством результатов структуры подмодели и причин нежелательный алгебраический цикл, вы можете:

Прямое Сквозное соединение Блока модели, Вызванное Настройкой Модели.  Типичное Реальное время (grt) и Встроенные Оперативные основанные на (ert) цели предоставляет возможность функции вывода/обновления Single на диалоговом окне Параметров конфигурации. Эта опция управляет, имеет ли сгенерированный код отдельные функции вывода и обновления или объединенную функцию вывода/обновления. См.:

Когда функции вывода/обновления Single включают (значение по умолчанию), Блок модели имеет объединенную функцию вывода/обновления. Функция делает блок прямым каналом через блок для всего импорта, независимо от структуры модели, на которую ссылаются. Где нежелательный алгебраический цикл заканчивается, вы можете:

Изменение блочных приоритетов при использовании алгебраического решателя цикла

Во время фазы обновления моделирования Simulink определяет порядок выполнения моделирования блочных методов. Это блочное упорядоченное расположение вызова является отсортированным порядком.

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

Смотрите также

| | |


[1]  Шемпин, Лоуренс F., M.W.Reichelt и J.A.Kierzenka”. Решение индексных 1 ДАУ в MATLAB и Simulink”. Сиамский анализ. Vol.18, № 3,1999, pp.538-552.

[2]  Больше, J.J.,B.S.Garbow и K.E.Hillstrom. Руководство пользователя для MINPACK-1. Аргонн, Национальная лаборатория IL:Argonne, 1980.

[3]  Рабиновиц, Филип, Численные методы редактора для Нелинейных Алгебраических Уравнений, Нью-Йорка: Гордон и Научные Издатели Нарушения, 1970.