Производная: скорость изменения и наклон касательной

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

Производная f'(x) — мгновенная скорость изменения функции в точке x. Геометрически это наклон касательной к графику в этой точке.

От средней скорости к мгновенной

Представьте машину: средняя скорость — это путь, делённый на время. Чтобы узнать скорость прямо сейчас, берём всё меньший интервал времени. Производная — это «скорость прямо сейчас» для любой функции. Формально: берём приращение h, считаем, насколько изменилась функция, (f(x+h) − f(x)) / h, и устремляем h к нулю. В коде мы не можем взять «ноль», но можем взять очень маленькое h — получится численная производная.

# Численная производная: симметричная разность (точнее обычной)
def derivative(f, x, h=1e-5):
    return (f(x + h) - f(x - h)) / (2 * h)

def f(x):
    return x * x          # производная по формуле: 2x

for x in [0, 1, 2, 3]:
    approx = derivative(f, x)
    print(f"x={x}: численно f'(x) = {round(approx, 5)}, точно 2x = {2 * x}")

Вывод:

x=0: численно f'(x) = 0.0, точно 2x = 0
x=1: численно f'(x) = 2.0, точно 2x = 2
x=2: численно f'(x) = 4.0, точно 2x = 4
x=3: численно f'(x) = 6.0, точно 2x = 6

Численная производная совпала с формулой (x²)' = 2x. Мы получили правило дифференцирования экспериментально, не зная его заранее.

Знак и величина производной

Производная несёт два сигнала, и оба критичны для оптимизации:

  • Знак: положительная производная → функция растёт (идём вверх по склону), отрицательная → убывает (вниз).
  • Величина: большая по модулю → крутой склон, функция меняется быстро; около нуля → почти плоско.

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

import math

def derivative(f, x, h=1e-5):
    return (f(x + h) - f(x - h)) / (2 * h)

# Проверим производные известных функций
print("d/dx sin(x) при x=0  =", round(derivative(math.sin, 0), 5), " (cos 0 = 1)")
print("d/dx sin(x) при x=pi =", round(derivative(math.sin, math.pi), 5), " (cos pi = -1)")
print("d/dx exp(x) при x=0  =", round(derivative(math.exp, 0), 5), " (exp 0 = 1)")

def cube(x): return x ** 3
print("d/dx x^3 при x=2     =", round(derivative(cube, 2), 4), " (3·2^2 = 12)")

Вывод:

d/dx sin(x) при x=0  = 1.0  (cos 0 = 1)
d/dx sin(x) при x=pi = -1.0  (cos pi = -1)
d/dx exp(x) при x=0  = 1.0  (exp 0 = 1)
d/dx x^3 при x=2     = 12.0  (3·2^2 = 12)

Наклон касательной наглядно

Касательная — прямая, которая в точке x0 «прислоняется» к графику с тем же наклоном. Её уравнение: y = f(x0) + f'(x0)·(x − x0). Вблизи x0 касательная почти совпадает с функцией — на этом основана вся идея «линейного приближения», которым пользуется оптимизация.

def derivative(f, x, h=1e-5):
    return (f(x + h) - f(x - h)) / (2 * h)

def f(x): return x * x

x0 = 3
slope = derivative(f, x0)          # ~6
def tangent(x): return f(x0) + slope * (x - x0)

# Около x0 касательная близка к функции
for x in [2.9, 3.0, 3.1]:
    print(f"x={x}: f(x)={round(f(x), 4)}, касательная={round(tangent(x), 4)}")

Вывод:

x=2.9: f(x)=8.41, касательная=8.4
x=3.0: f(x)=9.0, касательная=9.0
x=3.1: f(x)=9.61, касательная=9.6

Итог

  • Производная — мгновенная скорость изменения функции, наклон касательной.
  • Численно её считают через малое приращение: (f(x+h) − f(x−h)) / (2h).
  • Знак говорит, растёт функция или убывает; модуль — насколько круто.
  • Чтобы минимизировать функцию, идут против знака производной — это основа градиентного спуска.
Проверьте себя
1. Что геометрически означает производная функции в точке?
AПлощадь под графиком
BНаклон касательной к графику в этой точке
CЗначение функции в этой точке
DРасстояние до оси x
2. Как численно оценить производную в коде?
AПоделить f(x) на x
BВзять (f(x+h) − f(x−h)) / (2h) при малом h
CВозвести f(x) в квадрат
DСложить значения функции в нескольких точках
3. Производная функции в точке отрицательна. Что это значит?
AФункция в этой точке убывает
BФункция в этой точке растёт
CЭто точка минимума
DФункция равна нулю
Поддержать проект