Исследование решателей Переменного Шага Используя жесткую модель

Этот пример показывает поведение решателей переменного шага в модели маятника Фуко. Решатели Simulink® ode45ode15sode23, и ode23t используются в качестве тестов. Жесткие дифференциальные уравнения используются, чтобы решить эту задачу. Нет никакого точного определения жесткости для уравнений. Некоторые численные методы нестабильны, когда используется решить жесткие уравнения, и очень размеры небольшого шага требуются, чтобы получать численно устойчивое решение жесткой проблемы. Жесткая проблема может иметь быстро изменяющийся компонент и медленно изменяющийся компонент.

Маятник Фуко является примером жесткой проблемы. Маятник завершает колебание за несколько секунд (быстро изменяющийся компонент), тогда как Земля завершает вращение вокруг своей оси за день (медленно изменяющийся компонент). Плоскость колебания маятника медленно вращается из-за осевого вращения Земли. Читайте больше о физике маятника Фуко в Моделировании Маятника Фуко.

Симуляция вычисляет, положение маятника входят в x-y плоскость, как просматривается наблюдателем на поверхности Земли. Полная энергия маятника затем вычисляется и используется, чтобы оценить эффективность различных решателей Simulink.

Модель маятника Фуко

Маятник Фуко описан системой двойных приведенных ниже дифференциальных уравнений. Трение и аэродинамическое сопротивление не учтены (это значительно упрощает уравнения). Полная деривация этих уравнений дана в примере Маятника Фуко.

$$
\ddot{x} = 2\Omega \sin{\lambda} \dot{y} - \frac{g}{L} x
$$

$$
\ddot{y} = - 2\Omega\sin{\lambda} \dot{x} - \frac{g}{L} y
$$

$$\Omega = \mbox{ Earth's angular velocity of rotation around its axis}$$

$$\lambda = \mbox{ geographic latitude}$$

$$g = \mbox{ acceleration of gravity}$$

$$x \mbox{ and } y = \mbox{ coordinates of the pendulum bob}$$

Модель, показанная в рисунке 1, используется, чтобы решить дифференциальные уравнения, описывающие маятник Фуко. Введите sldemo_solvers в Командном окне MATLAB®, чтобы открыть модель. Пример симулирует маятник Фуко в течение 86 400 секунд. Константы и начальные условия сохранены рабочее пространство модели.

Рисунок 1: модель маятника Фуко используемая верхняя часть оценивает эффективность решателя

Переменные решатели шага

Этот пример исследует эффективность ode45ode15sode23, и ode23t решатели переменного шага. Читать больше о конкретном решателе, например, ode45, введите help ode45 в командном окне MATLAB.

Рисунок 2: Список решателей переменного шага, доступных в Simulink

Оценка эффективности решателя

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

К сожалению, нет никакого точного теоретического решения для проблемы Маятника Фуко. Существует аппроксимированное закрытое решение для формы, однако оно не может использоваться, чтобы оценить эффективность решателя (см. пример маятника Фуко).

Сохранение полной энергии

Этот пример оценивает эффективность решателя путем проверки закона об энергосбережении. В лишенной трения среде полная энергия маятника должна остаться постоянной. Расчетная энергия маятника, однако, не останется постоянной в результате ограниченной числовой точности.

Этот пример вычисляет нормированную полную энергию маятника в каждый такт. Относительная погрешность энергии равняется изменению в полной энергии в течение симуляции. Идеально, относительная погрешность энергии должна быть нулем, потому что энергия сохраняется. Полная энергия является суммой потенциальной и кинетической энергии. Блок "NormalizeEnergy" вычисляет нормированную энергию маятника с помощью приведенных ниже выражений.

$$ E = \frac{v_x^2 + v_y^2}{2} + g( L - \sqrt{L^2 - x^2 - y^2} ) $$

$$E_{normalized}(t) = \frac{E(t)}{E(0)}$$

$$E(0) = \mbox{ initial total energy}$$

Рисунок 3: Нормированная энергия по сравнению со временем

Рисунок 3 показывает график нормированной энергии по сравнению со временем, как вычислено использование ode23 и ode23t. Ясно это в этой конкретной проблеме ode23t намного более точно, чем ode23. В симуляции, которая использовала ode23, нормированная энергия маятника уменьшена больше чем на 60%. Маятник с более низкой энергией имеет более низкую амплитуду колебания. Вы видите этот эффект в рисунке 4, где амплитуда маятника, вычисленного ode23 уменьшения как плоскость колебания вращаются.

Рисунок 4: положение Маятника, как вычислено использование ode23 и ode23t

Рисунок 4 иллюстрирует различие между жестким и нежестким решателем. Каждый график показывает положение боба маятника в течение дня (каждая 15-я точка данных построена как синяя точка). Черная точка отмечает исходное положение боба маятника, и черная линия отмечает начальную плоскость колебания маятника. Красная линия указывает на плоскость колебания после дня. Желтая линия показывает плоскость колебания в некотором промежуточном моменте времени. Обратите внимание на то, что плоскость колебания маятника не завершает полное вращение в течение дня. То, как быстро плоскость колебания вращается, зависит от географической широты (см. детали в примере маятника Фуко). Заметьте, что амплитуда маятника в левом графике уменьшается, тогда как амплитуда в правильном графике остается постоянной. Для той же относительной погрешности, RelTol=1e-5, жесткий решатель дает более точный результат, но требует большего количества времени выполнения.

Рисунок 5 показывает более подробное исследование качества работы решателей Simulink. Четыре решателя были выбраны, чтобы проиллюстрировать, как относительная погрешность и время выполнения симуляции варьируется как функция относительной погрешности. Можно использовать sldemo_solvers_mcode.m скрипт для более обширных тестов решателя. Этот скрипт генерирует код С из модели, чтобы ускорить симуляции. Обратите внимание на то, что скрипт может занять несколько минут, чтобы выполниться.

Building RSim executable for model..
Time taken: 15.686877 seconds.

Running generated RSim executable..
Time taken: 305.105389 seconds.

Рисунок 5: Относительная погрешность и время выполнения для различных настроек решателя. AbsTol = '1e-7' для всех симуляций.

Заметьте, что в этой относительной погрешности в качестве примера не уменьшается очень значительно для относительных погрешностей ниже 1e-6. Это - числовое ограничение решателя, которое зависит от конкретной модели. Сокращение относительной погрешности решателя не обязательно улучшает точность. Необходимо оценить минимальную точность, которая требуется для проблемы, и выберите решатель соответственно, чтобы минимизировать затраты на симуляцию. Например, можно хотеть знать положение боба маятника Фуко в нескольких сантиметрах. Является ненужным вычислить положение маятника в нескольких микронах, потому что вы не можете измерить положение настолько точно.

Заключения

Числовые результаты симуляции могут вести себя по-другому в зависимости от настроек решателя. Это крайне важно в случае жестких проблем. При работе с жесткими моделями выберите решатель, который даст точный результат по минимальной цене. Относительная погрешность (решатели переменного шага) или размер шага (решатели фиксированного шага) должна быть малой достаточно, что результат численно устойчив. Несмотря на то, что некоторые решатели более эффективны, чем другие, жесткие решатели лучше подходят для того, чтобы решить жесткие задачи. Переменные решатели шага более устойчивы, чем решатели фиксированного шага.