15Производная функции

Исторически математический анализ произошёл из задач механики, из необходимости описывать движение физических тел, их скорости и ускорения. Со временем оказалось, что в тех же терминах можно говорить о множестве разных процессов и объектов. В этой лекции мы введём понятие производной, формализующее идею о скорости какого-либо изменения.

15.1Определение производной

15.1.1Функции как динамические процессы

Рассмотрим функцию и пусть — это время, а — результат измерения какой-то величины в момент времени . Это может быть артериальное давление у пациента, или популяция некоторого вида, или количество людей, зараженных вирусом — что угодно. Но проще всего про это думать так: есть точка, которая может двигаться вверх и вниз, — это вертикальная координата (то есть просто высота) этой точки в момент времени . Тогда про эту функцию можно думать в динамических терминах. Например, рассмотрим функцию, заданную графиком на рис. 15.1.
import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

x = np.linspace(-4, 4, 200)
plt.plot(x, (x ** 3  - 12 * x) / 16 * 2 + 1)

ob.center_spines(grid=False, minor_ticks=False)
ob.settle_axes(xmin=-4.2, xmax=4.2, ymin=-2.3 + 1, ymax=2.3 + 1, 
              xlabel="x", ylabel="y", axlabelshift=1.3) 
plt.grid()
plt.yticks([-1, 1, 2, 3])
Рис. 15.1: График функции
Этот график можно интерпретировать следующим образом. В момент времени точка находилась на высоте . Она сразу стала двигаться вверх, и спустя две единицы времени, в момент достигла высоты . Тут она на мгновение остановилась (перестала двигаться вверх) и изменила направление движения. Далее она двигалась вниз на протяжении четырёх единиц времени, до момента . Тут она снова на мгновение остановилась, и стала двигаться вверх, вплоть до момента времени (точка достигла высоты ). Дальнейшая её судьба неизвестна.

import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

def f(x):
    return (x ** 3  - 12 * x) / 16 * 2 + 1

x = np.linspace(-4, 4, 200)

fig = plt.figure()
camera = Camera(fig)

ax1 = plt.subplot2grid((1, 6), (0, 1), colspan=5, label='ax1')
ax2 = plt.subplot2grid((1, 6), (0, 0), sharey=ax1, label='ax2')
for x0 in np.linspace(-4, 4, 51):
    ax1.plot(x, f(x), color='C0')
    ax1.plot([x0], [f(x0)], 'o', color='C1')
    ax1.set_yticks([-1, 1, 2, 3])
    ob.center_spines(grid=False, minor_ticks=False, ax=ax1)
    ob.settle_axes(xmin=-4.2, xmax=4.2, ymin=-2.3 + 1, ymax=2.3 + 1, 
                  xlabel="x", ylabel="y", axlabelshift=1.3, ax=ax1) 
    ax1.grid()

    ob.center_spines(grid=False, minor_ticks=False, axes=('y',), ax=ax2)
    ax2.plot([0], [f(x0)], 'o', color='C1')
    ax2.axes.get_xaxis().set_visible(False)
    ob.settle_axes(xmin=-1, xmax=1, ymin=-2.3 + 1, ymax=2.3 + 1,
        xlabel="", ylabel="y", axlabelshift=1.3, ax=ax2)
    ax2.set_yticks([-1, 0, 1, 2, 3])
    ax2.set_yticklabels(['$-1$', '', '$1$', '$2$', '$3$'])
    ax2.set_xticks([0])
    ax2.set_xticklabels([''])

    camera.snap()
animation = camera.animate()