Bilim.techО проекте

Численные методы: считаем шаг за шагом

Как посчитать остывание масла и разгон самосвала, если формулы нет? Меняй шаг метода Эйлера, сравнивай с точным ответом и ищи корень уравнения половинным делением.

01 Что это такое

Численный метод решает задачу, у которой нет готовой формулы: компьютер идет маленькими шагами и на каждом шаге считает по простому правилу.

Как остывает масло в картере после остановки? Мы знаем только правило: чем горячее масло по сравнению с воздухом, тем быстрее оно остывает. Это скорость изменения, производная. Метод Эйлера делает так: сейчас температура такая-то, скорость остывания такая-то, значит через минуту температура станет меньше на скорость, умноженную на минуту. И так шаг за шагом. Чем мельче шаг, тем точнее ответ, но тем больше вычислений. Другой метод, половинное деление, ищет число, при котором уравнение обращается в ноль, деля отрезок пополам, пока он не станет совсем узким.

ошибка шагаT₀ = 90 °Cточная криваяшаги Эйлера, dt = 10 минвремя, минT, °C
Каждый шаг идет по касательной к кривой в начале шага. Касательная круче, чем кривая дальше, поэтому Эйлер немного «проскакивает» вниз. Чем мельче шаг, тем ближе ломаная к кривой.
dt
Шаг. На сколько вперед по времени прыгает расчет за один круг цикла. Мелкий шаг точнее, крупный быстрее.
dT/dt
Скорость изменения. Производная: на сколько градусов в минуту меняется температура прямо сейчас.
ε
Точность. Когда остановиться: отрезок с корнем стал уже ε, или поправка стала меньше ε.
02 Опыт
Меняй шаг. Сравнивай с точным ответом. Ищи корень. ШАГ ЗА ШАГОМ
ЧИСЛЕННЫЙ РАСЧЕТ

Ломаная Эйлера против точного решения

Рис. 12.5
ГОТОВЫЕ ЗАДАЧИ
Шаг dt
Наибольшая ошибка
Шагов расчета
03 Код по строкам

Три строки, которые заменяют формулу

Производная превращается в строку «скорость = …», интеграл в цикл с шагом, а решение уравнения в деление отрезка пополам. Числа ниже берутся из опыта.

С какой скоростью меняется?

скорость = -k * (T - Tв)

Это дифференциальное уравнение dT/dt = −k(T − Tв), записанное строкой кода. Чем больше разница с воздухом, тем быстрее остывание. Минус значит, что температура падает.

T
температура масла сейчас, °C
Tв
температура воздуха, °C
k
коэффициент остывания, 1/мин: зависит от массы масла и обдува картера
скорость
dT/dt, °C в минуту

Как сделать шаг?

T = T + скорость * dt

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

dt
шаг по времени, мин или с
скорость · dt
на сколько изменится T за шаг
ошибка
на шаге растет как dt², за весь расчет как dt: вдвое мельче шаг, вдвое меньше ошибка

Где f(v) = 0?

середина = (лево + право) / 2

Если на концах отрезка f разного знака, корень внутри. Смотрим знак в середине и оставляем ту половину, где знак меняется. После n делений отрезок сужается в 2ⁿ раз.

f(v)
тяга минус сопротивление, Н. Ноль значит равновесие: скорость больше не растет
лево, право
концы отрезка, где сидит корень, м/с
n
число делений: n = log₂((право − лево) / ε)

Тот же код на настоящем Python

Справа программа опыта на Python. Функции шаг_dt(), точность(), точка() и отрезок() это ползунки и график опыта; в обычной программе вместо них стоят число и список, куда складывают результаты. В Python для таких задач есть готовые решатели: scipy.integrate.solve_ivp для уравнений движения и scipy.optimize.brentq для корней. Внутри у них те же идеи, только шаг выбирается сам.

Откуда берется правило Эйлера, разобрано в математике: Метод Эйлера, Производная и Ряд Тейлора (ошибка шага это отброшенный член с dt²). Быстрее половинного деления корень находит Метод Ньютона, а сложение маленьких кусочков по шагам разобрано в теме Численное интегрирование. Силы при разгоне: Законы Ньютона.

Перевод делается автоматически из кода в опыте.
04 Где и зачем это применяют

Почти все инженерные расчеты сегодня численные

Допущения модели+

Остывание масла описано законом Ньютона dT/dt = −k(T − Tв) с постоянным k, точное решение T = Tв + (T₀ − Tв)·e−kt. Самосвал: масса 380 т с грузом, мощность на колесах 1580 кВт, тяга не больше 600 кН по сцеплению, сопротивление качению 3 % и подъем 8 %, воздух 6 · v² Н; точной формулы нет, эталон считается в браузере методом Рунге–Кутты с шагом 0,01 с. График ошибки от шага считается тем же методом Эйлера отдельно на JavaScript по числам из кода, точка текущего шага берется из расчета программы. Половинное деление требует, чтобы на концах отрезка функция имела разные знаки; программа это не проверяет.

Еще в направлении «Инженерия»

Все темы направления «Инженерия» →