Когда формулы заканчиваются

Урок объясняет, зачем вообще нужны численные методы и где проходит граница между «решить формулой» и «посчитать на компьютере».

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

Аналитика против численного счёта

В школе и на первых курсах нас учат решать задачи аналитически: вывести формулу, подставить числа, получить точный ответ. Корни квадратного уравнения — через дискриминант. Площадь под параболой — через первообразную. Это красиво и точно. Но эта картина мира обманчиво узка: подавляющее большинство уравнений, которые встречаются в физике, инженерии и экономике, не имеют решения «в замкнутой форме».

Простейший пример: уравнение x = cos(x). Нарисуйте на бумаге прямую y = x и косинусоиду — они пересекаются примерно в точке 0.739. Но никакой формулы вида «x равно такому-то выражению из элементарных функций» для этого корня не существует. Доказано, что не существует. Что делать инженеру, которому это число нужно прямо сейчас? Считать приближённо.

Другой класс примеров — интегралы. Интеграл от e^(-x^2) (гауссиана, основа всей статистики) не выражается через элементарные функции. Длина дуги эллипса — не выражается. Период колебаний реального маятника при больших амплитудах — не выражается. А считать всё это нужно постоянно.

Что значит «приближённо, но управляемо»

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

Сравним способ мышления. Аналитик спрашивает: «какова формула ответа?». Вычислитель спрашивает: «какой алгоритм за конечное число шагов подберётся к ответу как угодно близко, и как быстро он это сделает?». Второй вопрос почти всегда имеет ответ, даже когда первый — нет.

import math

# Решим x = cos(x) простейшей итерацией: подставляем x в cos снова и снова
x = 0.5
for i in range(1, 11):
    x = math.cos(x)
    print(f"шаг {i:2}: x = {x:.10f}")

print("\nПроверка: cos(x) - x =", round(math.cos(x) - x, 10))

Вывод:

шаг  1: x = 0.8775825619
шаг  2: x = 0.6390124942
шаг  3: x = 0.8026851007
шаг  4: x = 0.6947780268
шаг  5: x = 0.7681958313
шаг  6: x = 0.7191654459
шаг  7: x = 0.7523557594
шаг  8: x = 0.7300810631
шаг  9: x = 0.7451203414
шаг 10: x = 0.7350063090

Проверка: cos(x) - x = 0.0068202136

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

Где это работает на практике

Численные методы — это не academic exotica, а скрытый фундамент почти всего инженерного софта. Несколько примеров того, что крутится «под капотом» привычных программ:

ПрограммаКакой численный метод внутри
Прогноз погодырешение систем дифференциальных уравнений атмосферы на сетке
SolidWorks, ANSYS (прочность)метод конечных элементов → огромные системы линейных уравнений
Google Maps (маршрут с пробками)оптимизация, решение уравнений потоков
Обучение нейросетичисленная оптимизация (градиентный спуск)
Рендеринг, физика в играхчисленное интегрирование уравнений движения
Excel «Подбор параметра»метод Ньютона или бисекция

Когда вы в Excel жмёте «Подбор параметра», чтобы найти, при какой ставке кредит сойдётся к нужной сумме — это численный метод решает за вас уравнение, у которого нет аналитической формулы.

Как работает под капотом

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

Вторая универсальная идея — итерация. Мы редко попадаем в ответ за один шаг. Чаще строим последовательность приближений x0, x1, x2, ..., каждое из которых ближе к истине, и останавливаемся, когда разница между соседними стала меньше нужного порога. Скорость, с которой эта последовательность сходится, — центральная характеристика метода (об этом будет целый раздел).

Частые ошибки

  • Думать, что «численно» значит «неточно». Численный ответ может быть точнее аналитического — формула (-b±√D)/2a при определённых данных теряет точность сильнее, чем аккуратный численный алгоритм.
  • Гнаться за «точным» ответом от компьютера. Компьютер почти всегда возвращает приближение. Вопрос не «точно ли», а «насколько велика погрешность и устраивает ли она нас».
  • Считать численные методы устаревшими, раз есть NumPy и SciPy. Эти библиотеки — и есть упакованные численные методы. Понимать их внутреннее устройство нужно, чтобы выбрать правильный инструмент и не получить мусор.

Итоги

  • Большинство практических уравнений и интегралов не решаются формулой — это норма, а не исключение.
  • Численный метод даёт приближение с управляемой точностью: точность покупается вычислениями.
  • Две сквозные идеи: заменить бесконечное конечным и итеративно приближаться к ответу.
  • Численные методы — скрытый движок инженерного, научного и финансового ПО.
Проверьте себя
1. Почему уравнение x = cos(x) решают численно?
AКосинус слишком медленно вычисляется
BДля его корня не существует формулы из элементарных функций
CАналитическое решение есть, но его трудно запомнить
DКомпьютеры не умеют работать с тригонометрией
2. Что в численных методах считается главным ресурсом, которым «платят» за точность?
AПамять
BОбъём кода
CКоличество вычислительных операций
DТочность входных данных
3. Какая идея НЕ является типовой для численных методов?
AЗамена бесконечного процесса конечным
BИтеративное приближение к ответу
CПолучение абсолютно точного ответа за один шаг
DОценка и контроль погрешности