Variable-step solvers изменяйте размер шага во время симуляции, уменьшая размер шага, чтобы увеличить точность, когда состояния модели изменяются быстро, и увеличивая размер шага, чтобы избежать ненужных шагов, когда состояния модели изменяются медленно. Вычисление размера шага добавляет вычислительные накладные расходы на каждом шаге, но может уменьшить общее количество шагов и, следовательно, время симуляции, необходимое для поддержания заданного уровня точности для моделей с быстро изменяющимися или кусочно-непрерывными состояниями.
Когда вы устанавливаете элемент управления Type на панели Solver configuration на Variable-step
, управление Solver позволяет вам выбрать один из решателей переменного шага. Как и в случае решателей с фиксированным шагом, набор решателей с переменным шагом содержит дискретный решатель и набор непрерывных решателей. Однако, в отличие от решателей с фиксированным шагом, размер шага изменяется динамически на основе локальной ошибки.
Выбор между двумя типами решателей переменного шага зависит от того, задают ли блоки в вашей модели состояния, и, если да, то тип состояний, которые они задают. Если ваша модель не задает никаких состояний или задает только дискретные состояния, выберите дискретный решатель. Если модель имеет непрерывные состояния, непрерывные решатели используют численное интегрирование, чтобы вычислить значения непрерывных состояний на следующем временном шаге.
Примечание
Если модель не имеет состояний или только дискретных состояний, Simulink® использует дискретный решатель, чтобы симулировать модель, даже если вы задаете непрерывный решатель.
Используйте дискретный решатель с переменным шагом, когда ваша модель не содержит непрерывных состояний. Для таких моделей дискретный решатель с переменным шагом уменьшает размер шага в порядок, чтобы захватить события модели, такие как пересечения нулем, и увеличивает размер шага, когда возможно улучшить эффективность симуляции.
Модель, показанная на рисунке, содержит два сигнала дискретной синусоиды на 0,5 и 0,75 шаги расчета. На графиках ниже показаны сигналы в модели вместе с шагами решателя для дискретных и дискретных решателей с фиксированным шагом, соответственно. Вы можете увидеть, что решатель с переменным шагом принимает только шаги, необходимые для записи выходного сигнала от каждого блока. С другой стороны, решатель с фиксированным шагом должен будет моделировать с фиксированным размером шага - или основным шагом расчета - 0,25, чтобы записать все сигналы, таким образом, делая больше шагов в целом.
Решатели с переменным шагом динамически изменяют размер шага во время симуляции. Каждый из этих решателей увеличивает или уменьшает размер шага с помощью локального управления ошибками для достижения заданных вами допусков. Вычисление размера шага на каждом временном шаге добавляет к вычислительным накладным расходам. Однако это может уменьшить общее количество шагов и время симуляции, необходимое для поддержания заданного уровня точности.
Можно далее классифицировать непрерывные решатели с переменным шагом как одношаговые или многоступенчатые, одноупорядоченные или переменные и явные или неявные. Смотрите One-Step Verson Multistep Continuous Solvers для получения дополнительной информации.
Явные решатели с переменным шагом разработаны для нежестких задач. Simulink предоставляет четыре таких решателей:
ode45
ode23
ode113
odeN
Решатель ОДУ | Одношаговый метод | Многоступенчатый метод | Порядок точности | Метод |
---|---|---|---|---|
ode45 | X | Среда | Рунге-Кутта, Дорманд-Принс (4,5) пара | |
ode23 | X | Низко | Рунге-Кутта (2,3) пара Богацки и Шемпине | |
ode113 | X | Переменная, от низкого до высокого | Реализация ПЭК Адамса-Башфорта-Моултона | |
odeN | X | Смотрите порядок точности в непрерывных явных решателях с фиксированным шагом | Смотрите метод интегрирования в непрерывных явных решателях с фиксированным шагом |
Примечание
Выберите odeN
решатель, когда скорость симуляции важна, например, когда
Модель содержит много пересечений нулем и/или сбросов решателя
При профилировании модели Solver Profiler не обнаруживает никаких неудачных шагов
Если ваша задача жесткая, попробуйте использовать один из неявных решателей переменного шага:
ode15s
ode23s
ode23t
ode23tb
Решатель ОДУ | Одношаговый метод | Многоступенчатый метод | Порядок точности | Метод сброса решателя | Max. Порядок | Метод |
---|---|---|---|---|---|---|
ode15s | X | Переменная, от низкой до средней | X | X | Численные формулы дифференцирования (NDFs) | |
ode23s | X | Низко | Розенброк второго порядка | |||
ode23t | X | Низко | X | Метод трапеций с использованием интерполяции | ||
ode23tb | X | Низко | X | TR-BDF2 |
Для ode15s
, ode23t
, и ode23tb
раскрывающееся меню для Solver reset method появится в разделе Solver details на панели « Строения». Этот параметр управляет тем, как решатель обрабатывает сброс, вызванный, например, обнаружением пересечения нулем. Допустимые опции Fast
и Robust
. Fast
указывает, что решатель не пересчитывает Jacobian для сброса решателя, тогда как Robust
задает, что решатель делает. Следовательно, Fast
установка является более быстрой в вычислительном отношении, но в некоторых случаях может использоваться небольшой размер шага. Чтобы протестировать такие случаи, запустите симуляцию с каждой настройкой и сравните результаты. Если различия в результатах нет, можно смело использовать Fast
настройка и экономия времени. Если результаты значительно различаются, попробуйте уменьшить размер шага для быстрой симуляции.
Для ode15s
решатель, можно выбрать максимальный порядок числовых формул дифференцирования (NDF), которые применяет решатель. Начиная с ode15s
использует формулы первого - пятого порядка, Maximum order
параметр позволяет вам выбирать порядки 1-5. Для жесткой задачи можно хотеть начать с порядка 2.
В следующей таблице приведены советы по применению неявных решателей с переменным шагом. Для примера, сравнивающего поведение этих решателей, см. Исследование решателей переменной-шага с использованием жесткой модели.
Примечание
Для жесткой задачи решения могут изменяться на временной шкале, которая очень мала по сравнению с интервалом интегрирования, в то время как решение интереса изменяется на гораздо более длительной временной шкале. Методы, которые не предназначены для жестких задач, неэффективны на интервалах, где решение изменяется медленно, потому что эти методы используют временные шаги, достаточно маленькие, чтобы разрешить самое быстрое возможное изменение. Для получения дополнительной информации смотрите шемпин, L. F., Численное решение обыкновенных дифференциальных уравнений, Chapman & Hall, 1994.
Решатели с переменным шагом используют стандартные методы управления, чтобы контролировать локальную ошибку на каждом временном шаге. В течение каждого временного шага решатели вычисляют значения состояния в конце шага и определяют локальную ошибку - предполагаемую ошибку этих значений состояния. Затем они сравнивают локальную ошибку с приемлемой ошибкой, которая является функцией как относительной погрешности (rtol), так и абсолютной погрешности (atol). Если локальная ошибка больше, чем допустимая ошибка для любого одного состояния, решатель уменьшает размер шага и повторяет попытку.
Relative tolerance измеряет ошибку относительно размера каждого состояния. Эта относительная погрешность представляет процент от значения состояния. Значение по умолчанию 1e-3 означает, что вычисленное состояние находится в пределах 0,1%.
Absolute tolerance - пороговое значение ошибки. Этот допуск представляет приемлемую ошибку, когда значение измеренного состояния приближается к нулю.
Решатели требуют ошибки для i
второе состояние, ei, чтобы удовлетворить:
Следующий рисунок показывает график состояния и областей, в которых относительная погрешность и абсолютная погрешность определяют приемлемую ошибку.
Ваша модель имеет глобальную абсолютную погрешность, который можно задать на панели Решатель (Solver) диалогового окна Параметры конфигурации (Configuration Parameters). Этот допуск применяется ко всем состояниям в модели. Можно задать auto
или действительный скаляр. Если вы задаете auto
(по умолчанию), Simulink первоначально устанавливает абсолютную погрешность для каждого состояния на основе относительной погрешности. Если относительная погрешность больше 1e-3, abstol
инициализируется в 1e-6. Однако для reltol
меньше 1e-3, abstol
для состояния инициализировано в reltol * 1e-3
. Когда симуляция прогрессирует, абсолютная погрешность для каждого состояния сбрасывается до максимального значения, которое государство приняло до сих пор, умножает относительную погрешность для этого состояния. Таким образом, если состояние изменяется от 0 до 1 и reltol
1e-3, abstol
инициализируется в 1e-6 и к концу симуляции также достигает 1e-3. Если состояние переходит от 0 до 1000, то abstol
изменения на 1.
Теперь, если состояние изменяется с 0 на 1 и reltol
устанавливается на 1e-4, затем abstol
инициализируется в 1e-7 и к концу симуляции достигает значения 1e-4.
Если вычисленное начальное значение для абсолютной погрешности не подходит, можно самостоятельно определить соответствующее значение. Для определения соответствующего значения абсолютной погрешности может потребоваться выполнить симуляцию более одного раза. Можно также задать, должен ли абсолютная погрешность адаптироваться аналогично своему auto
установка путем включения или отключения AutoScaleAbsTol
параметр. Для получения дополнительной информации см. раздел Автоматическое масштабирование абсолютной погрешности.
Несколько блоков позволяют вам задать абсолютную погрешность значения для решения состояний модели, которые они вычисляют или которые определяют их выход:
Абсолютные погрешности, заданные для этих блоков, переопределяют глобальные настройки в диалоговом окне Параметры конфигурации (Configuration Parameters). Можно хотеть переопределить глобальный параметр, если, например, глобальный параметр не обеспечивает достаточное управление ошибками для всех состояний вашей модели, потому что они широко варьируются в величине. Можно задать абсолютную погрешность блока:
auto
– 1
(аналогично auto
)
positive scalar
real vector
(имеющий размерность, равную количеству соответствующих непрерывных состояний в блоке)
Если вы принимаете решение задать абсолютную погрешность, имейте в виду, что слишком низкое значение заставляет решатель делать слишком много шагов вблизи значений почти нулевого состояния. В результате моделирование происходитленнее.
С другой стороны, если вы задаете слишком высокую абсолютную погрешность, ваши результаты могут быть неточными, поскольку одно или несколько непрерывных состояний в вашей модели приближаются к нулю.
После завершения моделирования можно проверить точность результатов, снизив абсолютную погрешность и снова запустив симуляцию. Если результаты этих двух симуляций удовлетворительно близки, то можно почувствовать уверенность в их точности.