· 5 min read

Как маятник учит вас дифференциальным уравнениям

Вам не нужна математическая степень, чтобы понять ODE-решатели. Вам нужен маятник, экран и 20 минут. Вот как на самом деле работают Euler, RK4 и адаптивные методы — с реальным кодом.

Начните с того, что вы можете увидеть

Подвесить вес от струны. Отодвиньте его в сторону. Отпусти. Качается.

Вы только что создали систему, управляемую дифференциальным уравнением:

dθ/dt = ω dω/dt = -(g/L) · sin(θ)

θ - угол. ω - угловая скорость. g - гравитация (9,81 м/с2). L - длина струны. Эти две линии говорят: угол изменяется со скоростью, равной скорости, а скорость изменяется со скоростью, которая зависит от силы тяжести, длины и текущего угла.

Проблема: мы не можем точно решить это уравнение. sin(θ) делает его нелинейным. Нет формулы, которая дает вам θ в любое время t. Так что мы приблизились — мы шагаем вперед небольшими шагами, вычисляя следующее состояние из текущего.

Это то, что делает ODE-решитель. Есть лучшие и худшие способы сделать это.

Метод Эйлера: очевидный, но ошибочный

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

next_angle = current_angle + velocity × dt
next_velocity = current_velocity + acceleration × dt

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

function euler(f, t, y, dt) {
  const dy = f(t, y);
  return [
    y[0] + dt * dy[0],
    y[1] + dt * dy[1]
  ];
}

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

RK4: Рабочая лошадка

В 1901 году Карл Рунге и Мартин Кутта опубликовали новый метод. Вместо того, чтобы смотреть на скорость изменения один раз за шаг, посмотрите на нее четыре раза:

  1. Измерить наклон в начале шага → k1
  2. Шаг на полпути с помощью k1, измерить наклон там → k2
  3. Шаг на полпути с использованием k2, измерение снова → k3
  4. Шаг до конца с помощью k3, измерение еще раз → k4
  5. Комбинат: средневзвешенный (к1 + 2к2 + 2к3 + к4) / 6

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

function rk4(f, t, y, dt) {
  const k1 = f(t, y);
  const k2 = f(t + dt/2, [y[0] + dt/2 * k1[0], y[1] + dt/2 * k1[1]]);
  const k3 = f(t + dt/2, [y[0] + dt/2 * k2[0], y[1] + dt/2 * k2[1]]);
  const k4 = f(t + dt,   [y[0] + dt   * k3[0], y[1] + dt   * k3[1]]);
  return [
    y[0] + (dt/6) * (k1[0] + 2*k2[0] + 2*k3[0] + k4[0]),
    y[1] + (dt/6) * (k1[1] + 2*k2[1] + 2*k3[1] + k4[1])
  ];
}

Это метод, который PinePaper использует для моделирования маятника, весенней массы и Ван-дер-Пола. Это тот же метод, который используется в аэрокосмических траекториях. 22 строки кода.

Почему это важно вне физики

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

  • ** Рост населения**: dx/dt = r·x·(1 - x/K). Логистический рост с пропускной способностью. Тот же растворитель.
  • Химические реакции: концентрации изменяются со скоростью, пропорциональной текущим концентрациям. Тот же растворитель.
  • ** Нейронные сети**: градиентный спуск представляет собой дискретизированный ОДЭ. Каждый тренировочный шаг — это шаг Эйлера вдоль поверхности потерь.
  • Экономика: процентные соединения непрерывно через dy/dt = r·y. Экспоненциальный рост — самая простая ОДА.
  • ** Время анимации**: кривые смягчения являются решениями для пружинных демпферных ОД. «Упругое» и «отскок» смягчения в CSS являются физическим моделированием.

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

Попробуйте сами

Откройте PinePaper и выберите генератор динамической системы. Выберите «Маятник». Боб качается. Теперь измените параметры:

  • Увеличение гравитации → более быстрый качели (короткий период)
  • Увеличение длины стержня → более медленные колебания (более длительный период)
  • Начните с большего угла → посмотрите, как увеличивается период (нелинейный эффект, который упускает аппроксимация небольшого угла учебника)

Каждое изменение, которое вы делаете, является мерой. Вы изменили параметр и наблюдали результат. Решитель RK4 вычислил 30 кадров в секунду, и маятник показал вам, что предсказывает уравнение.

В этом весь смысл. Математика — это измерение. PinePaper делает его видимым.

Interactive demo — open in editor pp:PinePaper

Ссылки

  • Мясник, J.C. (2016). Численные методы обычных дифференциальных уравнений (3-е изд.). Уайли.
  • Dormand, J.R. & Prince, P.J. (1980). Семейство встроенных формул Рунге-Кутта. * Журнал вычислительной и прикладной математики*, 6(1), 19-26.
  • Эйлер Л. (1768). Institutionum calculi integralis, Vol. 1. Impensis Academiae Imperialis Scientiarum.
  • Hairer, E., Nørsett, S.P., & Wanner, G. (1993). Решение обычных дифференциальных уравнений I: нежесткие задачи (2-е изд.). Спрингер.
  • Кутта, В. (1901). Beitrag zur näherungsweisen Integration totaler Differentialgleichungen. Zeitschrift für Mathematik und Physik*, 46, 435-453.
  • Ньютон, И. (1687). Philosophiæ Naturalis Principia Mathematica. Лондон: Джозеф Стертер.
  • Runge, C. (1895). Uber die numerische Auflösung von Differentialgleichungen. Математическая Анналена, 46(2), 167-178.
  • Strogatz, S.H. (2015). Нелинейная динамика и хаос (2-е изд.). Вествью Пресс.

Растворитель PinePaper ODE охватывает Euler, RK4 и адаптивный Dormand-Prince RK45 примерно в 200 строках. Попробуйте симуляцию маятника бесплатно на [pinepaper.studio/editor] (/editor).*

Ready to create?

Start making animated GIFs, videos, and graphics — free, no signup.

Open PinePaper Editor