Численные методы
Численные методы — алгоритмы приближённого решения математических задач, когда аналитическая формула отсутствует, слишком сложна или данные зашумлены. Результат всегда сопровождается погрешностью; важны сходимость, устойчивость и стоимость вычисления.
В отличие от символьных пакетов (CAS), численные методы оперируют конкретными числами и итерациями — как процессор в игре, симуляторе или ML-тренировке. Символьные вычисления в Python — SymPy — уравнения и производные; численные массивы — NumPy — массивы и матрицы; теория стека — Анализ данных — NumPy и SciPy.
Решение уравнений f(x) = 0
Метод Ньютона (касательных)
Линеаризация в текущей точке, быстрая квадратичная сходимость при хорошем старте. Требует производную (или секущую аппроксимацию). Риск: расходимость, попадание в другой корень.
Метод бисекции (деления отрезка)
Если f(a) и f(b) разных знаков и f непрерывна — корень на [a,b]. Делим пополам, сохраняем половину с сменой знака. Гарантированная линейная сходимость, медленнее Ньютона. Часто комбинируют: бисекция локализует, Ньютон уточняет.
Интерполяция и аппроксимация
| Подход | Цель | Риск |
|---|---|---|
| Интерполяция | точно через узлы данных | феномен Рунге на равномерной сетке при высоком градусе |
| Аппроксимация | "лучшее" приближение при шуме | неверная модель → систематическая ошибка |
Полином Лагранжа — классическая интерполяция; на многих узлах осциллирует у краёв. На практике чаще сплайны (кусочно-гладкие).
Метод наименьших квадратов (МНК)
Минимизируется сумма квадратов отклонений Σ (yᵢ − ŷᵢ)². Для линейной модели по параметрам — система линейных уравнений; при нормальных независимых ошибках совпадает с оценкой максимального правдоподобия.
Основа регрессии, калибровки датчиков, обучения линейных моделей. Обобщения — взвешенный МНК, L1/L2-регуляризация (гребень, лассо).
Ключевые понятия
- Погрешность округления — ограниченная точность float.
- Погрешность метода — накапливается за итерации.
- Устойчивость — малые изменения входа не разрушают результат.
Связь с IT
- физические и инженерные симуляции;
- компьютерная графика (сплайны, поверхности);
- обработка сигналов и изображений;
- оптимизация гиперпараметров (численный градиент);
- любые задачи, где "формула есть, но её нельзя применить напрямую к миллиону точек".
Пример — бисекция и Ньютон для √2
def bisect(f, a, b, eps=1e-9):
fa, fb = f(a), f(b)
if fa * fb > 0:
raise ValueError("нет смены знака")
while b - a > eps:
m = (a + b) / 2
if f(a) * f(m) <= 0:
b = m
else:
a = m
return (a + b) / 2
def newton(f, df, x0, eps=1e-12, max_iter=50):
x = x0
for _ in range(max_iter):
fx = f(x)
if abs(fx) < eps:
return x
dfx = df(x)
if dfx == 0:
break
x -= fx / dfx
return x
f = lambda x: x * x - 2
print("бисекция:", bisect(f, 1.0, 2.0))
print("Ньютон:", newton(f, lambda x: 2 * x, 1.5))
МНК на шумных точках
import numpy as np
xs = np.linspace(0, 1, 20)
ys = 2.5 * xs + 1.0 + np.random.default_rng(0).normal(0, 0.15, size=20)
a, b = np.polyfit(xs, ys, deg=1)
print(f"оценка: y ≈ {a:.2f}·x + {b:.2f}")
Дальше: Формальные языки и автоматы.