МатВектор

Command Palette

Search for a command to run...

🌊 Диффуры🔢 Численные методы

Жёсткие и нежёсткие ОДУ: почему явный метод Эйлера ломается

Жёсткие ОДУНежёсткие ОДУ

Коротко: Жёсткость — свойство задачи, а не метода; лечится переходом на неявные схемы. Явный берёт шаг из устойчивости (h < 2/|λ_макс|), неявный — из точности: A-устойчивость снимает запрет на шаг, L-устойчивость — следы быстрых мод. Быстрый диагноз: два метода, один шаг, разные ответы — задача жёсткая.

План на семестр Вердикт: с чего начать

Задача одной строкой: , . Решение образцово-приличное: за первые несколько тысячных секунды оно прилипает к квазистационарной кривой и дальше просто следит за косинусом с микроскопическим запаздыванием. А теперь явный Эйлер с шагом : на первой секунде лёгкая рябь, к пятой — числа порядка . Уравнение не меняли, метод не меняли — шаг перевалил через , и вычисление сгорело.

Это и есть жёсткость: в задаче смешаны процессы сильно разных скоростей, и самый быстрый из них, давно умерев в решении, продолжает диктовать шаг явному методу. Ниже — вывод границы , определение жёсткости через собственные значения якобиана, честный эксперимент с двумя методами на двух шагах и практическая диагностика. Механика явного метода — в уроке метод Эйлера, фон по устойчивости — в уроке устойчивость решений, вычислительная кухня — в уроке численное решение ОДУ.

КритерийЖёсткие ОДУНежёсткие ОДУ
Собственные значения якобиана — сотни и тысячиодин порядок величин
Масштабы временибыстрая мода умирает за , но навязывает шаг всему счётуодно характерное время жизни
Явный Эйлершаг — доли миллисекундышаг диктуется точностью
Неявный Эйлерработает при любом (A-устойчивость)тоже работает, но Ньютон не окупается
Симптом поломки явного методапила или взрыв при формально разумном просто крупная ошибка при крупном
Лечениенеявные схемы, L-устойчивые методы Гира/BDFявные методы Рунге—Кутты
Жёсткость — это разделение масштабов времени, а не свойство алгоритма

Почему явный Эйлер взрывается уже при h = 0,0021?#

Достаточно посмотреть на тестовое уравнение с . Один шаг явного Эйлера умножает отклонение от равновесия на фиксированный множитель — и ошибка обязана гаснуть, а не расти:

множитель шага : при ошибка растёт геометрически, при — гаснет
условие устойчивости явного Эйлера: для получаем — шаг, продиктованный не точностью, а выживанием

Проверяем на нашем уравнении (), интегрируя до : при множитель — решение ограничено; при множитель ровно — незатухающая пила; при множитель , и максимум решения за пять секунд достигает порядка . Двухпроцентное превышение шага — девяносто порядков на выходе. При этом неявный Эйлер на том же отрезке спокойно работает хоть с : его множитель по модулю всегда меньше единицы.

Как определить жёсткость через собственные значения якобиана?#

Для системы матрица частных производных — якобиан — несёт собственные значения ; как их находят — в уроке собственные значения и собственные векторы. Задача жёсткая, если все лежат в левой полуплоскости, а их модули разделены в разы:

показатель жёсткости: для системы с и получаем : быстрая мода затухает в тысячу раз быстрее медленной

Физика за формулой: каждой моде отвечает своя постоянная времени — время затухания в раз (см. термин постоянная времени). Быстрая мода умирает за пять тысячных секунды и дальше невооружённым глазом не видна, но явному методу она выставляет счёт за шаг на всём интервале. Решение тем временем прилипает к медленной траектории: во вступительной задаче медленный процесс — косинус, а быстрый — релаксация с ; частное решение вида для таких линейных уравнений строится в уроке линейные неоднородные ДУ.

Что показывают числа: как ведут себя оба метода на двух шагах?#

Эксперимент: , — сознательно стартуем не на квазистационарной кривой, даём начальный толчок величиной около единицы. Точное решение известно: . Гоняем явный и неявный Эйлер и меряем максимальную ошибку против него:

МетодШаг $h$Множитель шагаmax|ошибка| на $[0{,}5;\, 5]$Что видит глаз
явный Эйлер0,05≈ 0,001толчок убит за один шаг, решение гладкое
явный Эйлер0,1≈ 1,0пила: ошибка не гаснет, решение дёргается с размахом около 2
явный Эйлер0,11≈ 3 700ошибка умножается на 1,2 за шаг:
неявный Эйлер0,1≈ 0,006толчок гаснет втрое за шаг, дальше гладко
неявный Эйлер0,05≈ 0,002то же, вдвое точнее
Сетка ; значения экспериментальные и зависят от сетки и начального условия, но картина воспроизводится всегда

Три симптома в одной таблице. Шаг : множитель нулевой — начальный толчок истреблён мгновенно, живёт только ошибка аппроксимации. Шаг : ровно граница устойчивости, — толчок вспоминается бесконечно пилой, хотя за 0,5 секунды он в решении давно умер. Шаг : рост в 1,2 раза за шаг, и через 45 шагов ошибка — тысячи. Неявный метод при любом из этих шагов спокоен: его множитель по модулю меньше единицы всегда, а при большом близок к нулю — сверхбыстрые моды он не гасит, а хоронит.

Тот же счёт для вступительной задачи с : явный жив при , у границы пилит, за границей улетает в ; неявный при ведёт решение с максимальной ошибкой порядка — шаг в пять раз крупнее всего допустимого бюджета явного метода. Вот цена вопроса: не «точнее/грубее», а «возможно/невозможно».

Чем неявная схема платит за устойчивость: что такое A- и L-устойчивость?#

Неявный Эйлер подставляет правую часть в неизвестную точку:

сидит в обеих частях уравнения — за устойчивость платят решением уравнения на каждом шаге

Для нашей задачи уравнение линейное, и шаг сводится к одной строке: . Для общей нелинейной на каждом шаге решают нелинейное уравнение методом Ньютона — итерационным методом с двумя–пятью вычислениями и якобиана, а для систем — ещё и системой линейных уравнений (техника — в уроке численные методы для СЛАУ). Шаг дорожает в разы; окупается тем, что шаг можно поднять на порядки.

Классификация устойчивости короткая. A-устойчивость: область устойчивости содержит всю левую полуплоскость — любой шаг годится, пока ; неявный Эйлер ею обладает. L-устойчивость — усиление: множитель метода стремится к нулю при , то есть бесконечно быстрые моды уничтожаются за один шаг:

функция устойчивости неявного Эйлера: A-устойчив и L-устойчив; у метода трапеций — A-устойчив, но пилу быстрых мод не хоронит

Разница между A и L не академична: трапеции (Кранк—Николсон) при крупном шаге на жёсткой задаче дают незатухающую рябь с множителем — устойчиво по букве закона и некрасиво по существу. Поэтому в жёстких решателях стоят именно L-устойчивые схемы: неявный Эйлер, методы Гира (BDF), неявные Рунге—Кутты типа Radau.

Как диагностировать жёсткость на практике?#

  1. Шаг 1: решите задачу двумя методами с одинаковым шагом — явным и неявным. Явный взорвался или зашёлся пилой, а неявный спокоен? Перед вами жёсткая задача.
  2. Шаг 2: выпишите якобиан и посчитайте собственные значения: отношение максимального модуля к минимальному больше сотни — готовьтесь к неявным схемам.
  3. Шаг 3: оцените бюджет явного счёта: сколько шагов продиктует условие на всём интервале. Миллионы однотипных шагов — время менять метод.
  4. Шаг 4: проверьте, нужна ли быстрая мода вообще: если процесс умирает за и дальше не виден, L-устойчивая схема похоронит его честно.
  5. Шаг 5: в готовых пакетах жёсткость включается выбором решателя (ode15s, Radau, BDF) — но диагноз «жёсткая/нежёсткая» всё равно остаётся за вами: пакет угадает не всегда.
СвойствоЯвный ЭйлерНеявный Эйлер
Формула шага
Устойчивость при — шаг под диктовку быстрой модыA-устойчив: любой при
Быстрые модынавязывают шаг всему счётуL-устойчивость: гасятся за один шаг
Стоимость шагаодно вычисление линейно — одна формула; в общем случае Ньютон: , якобиан, СЛАУ
Шаг ограниченустойчивостьютолько точностью
Когда применятьнежёсткие задачи, дешёвая , короткие интервалыжёсткие задачи, длинные интервалы, кинетика, цепи
Явный и неявный Эйлер: цена шага против цены устойчивости
Проверь себя+15 XP

. При каких шагах явный Эйлер останется устойчивым?

Проверь себя+15 XP

На задаче , : явный Эйлер при выдаёт пилу с размахом около 2, неявный при том же шаге — гладкое решение. Диагноз?

Частые вопросы

Как распознать жёсткую задачу, не решая её?

Посмотрите на якобиан правой части: если собственные значения лежат в левой полуплоскости, а их модули различаются в сотни раз, задача жёсткая. Косвенный тест дешевле счёта: решите задачу двумя методами с одинаковым шагом. Явный взорвался или зашёлся пилой, неявный спокоен — перед вами жёсткость, и лечится она переходом на неявные схемы.

Почему неявные методы считаются дороже явных?

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

Нужны ли жёсткие решатели всегда?

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

Как связаны шаг и точность при решении жёстких задач?

У неявного метода шаг ограничен только точностью, поэтому его выбирает контроль локальной ошибки: погрешность шага Эйлера порядка . Рабочий приём — считать с шагом и и сравнивать решения: разность прикидывает ошибку. Если при укрупнении шага решение не портится, устойчивость вас больше не диктует — счёт вышел на точностный режим.

Следующий шаг: прогоните эксперимент из таблицы руками — пять строк кода на явный и неявный Эйлер, и граница устойчивости перестанет быть абстракцией. Порядок действий при решении уравнений — в разборе, как решать ДУ, задачи для тренировки — в задачах по дифференциальным уравнениям, счёт — в тренажёре по дифурам; формулы под рукой — в шпаргалке по ДУ. Ошибки аппроксимации и округления, которые добавляются поверх устойчивости, разобраны в уроке источники погрешностей; сравнение двух явных методов — в сравнении РК4 против Эйлера, а исходные определения — в терминах дифференциальное уравнение и в уроке системы ДУ.