Этот пример показывает поведение решателей переменного шага в модели маятника Фуко. Решатели Simulink® ode45
, ode15s
, ode23
и ode23t
используются в качестве тестов. Жесткие дифференциальные уравнения используются, чтобы решить эту проблему. Нет никакого точного определения жесткости для уравнений. Некоторые численные методы нестабильны, когда используется решить жесткие уравнения, и очень размеры небольшого шага требуются, чтобы получать численно стабильное решение жесткой проблемы. Жесткая проблема может иметь быстро изменяющийся компонент и медленно изменяющийся компонент.
Маятник Фуко является примером жесткой проблемы. Маятник завершает колебание за несколько секунд (быстро изменяющийся компонент), тогда как Земля завершает вращение вокруг своей оси за день (медленно изменяющийся компонент). Плоскость колебания маятника медленно вращается из-за осевого вращения Земли. Читайте больше о физике маятника Фуко в Моделировании Маятника Фуко.
Симуляция вычисляет, положение маятника входят в x-y плоскость, как просматривается наблюдателем на поверхности Земли. Полная энергия маятника затем вычисляется и используется, чтобы оценить производительность различных решателей Simulink.
Маятник Фуко описан системой двойных приведенных ниже дифференциальных уравнений. Трение и аэродинамическое сопротивление не учтены (это значительно упрощает уравнения). Полная деривация этих уравнений дана в примере Маятника Фуко.
Модель, показанная в рисунке 1, используется, чтобы решить дифференциальные уравнения, описывающие маятник Фуко. Введите sldemo_solvers
в Командном окне MATLAB®, чтобы открыть модель. Пример моделирует маятник Фуко в течение 86 400 секунд. Константы и начальные условия сохранены рабочее пространство модели.
Рисунок 1: модель маятника Фуко используемая верхняя часть оценивает производительность решателя
Этот пример исследует производительность ode45
, ode15s
, ode23
и решателей переменного шага ode23t
. Читать больше о конкретном решателе, например, ode45
, help ode45
типа в Окне Команды MATLAB.
Рисунок 2: Список решателей переменного шага, доступных в Simulink
Существуют различные способы оценить производительность решателя. Если проблема имеет закрытое решение для формы, вы могли бы сравнить результаты решателя с ожидаемым теоретическим результатом. Вы могли также контролировать время, которое требуется, чтобы моделировать модель с помощью конкретного решателя.
К сожалению, нет никакого точного теоретического решения для проблемы Маятника Фуко. Существует аппроксимированное закрытое решение для формы, однако оно не может использоваться, чтобы оценить производительность решателя (см. пример маятника Фуко).
Этот пример оценивает производительность решателя путем проверки закона об энергосбережении. В лишенной трения среде полная энергия маятника должна остаться постоянной. Расчетная энергия маятника, однако, не останется постоянной в результате ограниченной числовой точности.
Этот пример вычисляет нормированную полную энергию маятника в каждый такт. Относительная погрешность в энергии равняется изменению в полной энергии в течение симуляции. Идеально, относительная погрешность в энергии должна быть нулем, потому что энергия сохраняется. Полная энергия является суммой потенциальной и кинетической энергии. Блок "NormalizeEnergy" вычисляет нормированную энергию маятника с помощью приведенных ниже выражений.
Рисунок 3: Нормированная энергия по сравнению со временем
Рисунок 3 показывает график нормированной энергии по сравнению со временем, как вычислено использование ode23
и ode23t
. Ясно, что в этой конкретной проблеме ode23t
намного более точен, чем ode23
. В симуляции, которая использовала ode23
, нормированная энергия маятника, уменьшенная больше чем на 60%. Маятник с более низкой энергией имеет более низкую амплитуду колебания. Вы видите этот эффект в рисунке 4, где амплитуда маятника, вычисленного уменьшениями ode23
как плоскость колебания, вращается.
Рисунок 4: положение Маятника, как вычислено использование ode23
и ode23t
Рисунок 4 иллюстрирует различие между жестким и нежестким решателем. Каждый график показывает положение боба маятника в течение дня (каждая 15-я точка данных построена как синяя точка). Черная точка отмечает исходное положение боба маятника, и черная линия отмечает начальную плоскость колебания маятника. Красная линия указывает на плоскость колебания после дня. Желтая строка показывает плоскость колебания в некотором промежуточном моменте времени. Обратите внимание на то, что плоскость колебания маятника не завершает полное вращение в течение дня. То, как быстро плоскость колебания вращается, зависит от географической широты (см. детали в примере маятника Фуко). Заметьте, что амплитуда маятника в левом графике уменьшается, тогда как амплитуда в правильном графике остается постоянной. Для того же относительного допуска, RelTol=1e-5
, жесткий решатель дает более точный результат, но требует большего количества времени выполнения.
Рисунок 5 показывает более подробное исследование качества работы решателей Simulink. Четыре решателя были выбраны, чтобы проиллюстрировать, как относительная погрешность и время выполнения симуляции отличается как функция относительного допуска. Можно использовать скрипт sldemo_solvers_mcode.m
для более обширных тестов решателя. Этот скрипт генерирует код С из модели, чтобы ускорить симуляции. Обратите внимание на то, что скрипт может занять несколько минут, чтобы выполниться.
Рисунок 5: Относительная погрешность и время выполнения для различных настроек решателя. AbsTol = '1e-7'
для всех симуляций.
Заметьте, что в этой относительной погрешности в качестве примера не уменьшается очень значительно для относительных допусков ниже 1e-6. Это - числовое ограничение решателя, которое зависит от конкретной модели. Сокращение допуска родственника решателя не обязательно улучшает точность. Необходимо оценить минимальную точность, которая требуется для проблемы, и выберите решатель соответственно, чтобы минимизировать затраты на симуляцию. Например, можно хотеть знать положение боба маятника Фуко в нескольких сантиметрах. Является ненужным вычислить положение маятника в нескольких микронах, потому что вы не можете измерить положение настолько точно.
Числовые результаты симуляции могут вести себя по-другому в зависимости от настроек решателя. Это крайне важно в случае жестких проблем. При работе с жесткими моделями выберите решатель, который даст точный результат по минимальной цене. Относительный допуск (решатели переменного шага) или размер шага (решатели фиксированного шага) должен быть достаточно маленьким, что результат численно стабилен. Несмотря на то, что некоторые решатели более эффективны, чем другие, жесткие решатели лучше подходят для решения жестких проблем. Переменные решатели шага более устойчивы, чем решатели фиксированного шага.