Как маятник учит вас дифференциальным уравнениям
Вам не нужна математическая степень, чтобы понять 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 году Карл Рунге и Мартин Кутта опубликовали новый метод. Вместо того, чтобы смотреть на скорость изменения один раз за шаг, посмотрите на нее четыре раза:
- Измерить наклон в начале шага → k1
- Шаг на полпути с помощью k1, измерить наклон там → k2
- Шаг на полпути с использованием k2, измерение снова → k3
- Шаг до конца с помощью k3, измерение еще раз → k4
- Комбинат: средневзвешенный (к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 делает его видимым.
Ссылки
- Мясник, 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