-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathchapter15.qq
executable file
·798 lines (677 loc) · 51.5 KB
/
chapter15.qq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
\chapter \label chap:15:derivative
Производная функции
Исторически математический анализ произошёл из задач механики, из необходимости
описывать движение физических тел, их скорости и ускорения. Со временем
оказалось, что в тех же терминах можно говорить о множестве разных процессов и
объектов. В этой лекции мы введём понятие производной, формализующее идею о
скорости какого-либо изменения.
\section Определение производной
\subsection Функции как динамические процессы
Рассмотрим функцию $y=f(x)$ и пусть $x$ — это время, а $y$ — результат измерения
какой-то величины в момент времени $x$. Это может быть артериальное давление у
пациента, или популяция некоторого вида, или количество людей, зараженных вирусом
— что угодно. Но проще всего про это думать так: есть точка, которая может
двигаться вверх и вниз, $f(x)$ — это вертикальная координата (то есть просто
высота) этой точки в момент времени $x$. Тогда про эту функцию можно думать в
динамических терминах. Например, рассмотрим функцию, заданную графиком на
\ref[рис.][fig:15:graph].
\figure \showcode \collapsed
\pythonfigure \style max-width: 500px;
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])
\caption График функции
\label fig:15:graph
Этот график можно интерпретировать следующим образом. В момент времени $x=-4$
точка находилась на высоте $y=-1$. Она сразу стала двигаться вверх, и спустя две
единицы времени, в момент $x=-2$ достигла высоты $y=3$. Тут она на мгновение
остановилась (перестала двигаться вверх) и изменила направление движения. Далее
она двигалась вниз на протяжении четырёх единиц времени, до момента $x=2$. Тут
она снова на мгновение остановилась, и стала двигаться вверх, вплоть до момента
времени $x=4$ (точка достигла высоты $y=3$). Дальнейшая её судьба неизвестна.
\figure \showcode \collapsed
\pythonvideo \jsanimate \style max-width: 500px;
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()
\caption График функции и движение точки
\label fig:15:graph-ani
Именно такую интерпретацию функций мы будем использовать в дальнейшем в этой
лекции.
\subsection Производная как мгновенная скорость
Рассмотрим функцию, заданную графиком на \ref[рис.][fig:15:deriv]. Пусть нас
интересует скорость движения точки в какой-то момент времени $x_0$.
\figure
\img
\style
padding: 4em; max-width:500px;
\src derivative-1.svg
\alt
Нарисован график функции, на горизонтальной оси отмечены точки x_0
и x_0 + Delta x, на вертикальной — f(x_0) и f(x_0 + Delta x)
\caption
Вычисление средней скорости движения на интервале времени от $x_0$ до
$x_0 + \Delta x$.
\label fig:15:deriv
В школе нас учат, что чтобы найти скорость, нужно поделить расстояние на время.
Рассмотрим период от момента $x_0$ до момента $x_0+\Delta x$, где
$\Delta x$ — какое-то небольшое число. (Выражение $\Delta x$ нужно воспринимать
как неделимый символ, читается «дельта-икс».) В начале периода точка имела
высоту $f(x_0)$, а в конце — $f(x_0 + \Delta x)$. Пройденное расстояние между
двумя моментами равно разности этих двух значений:
\eq
\text{расстояние} = f(x_0 + \Delta x) - f(x_0)
Тут нужно иметь в виду, что нас интересует «чистое расстояние», вычисляемое с
учётом знака — не «сколько мы проехали», а «на сколько поднялись». Например,
если в течение этого промежутка точка в какой-то момент двигалась вниз, в это
время «пройденное расстояние» уменьшалось, а не увеличивалось. Также
«расстояние» может быть отрицательным, если новое значение высоты $f(x_0 +
\Delta x)$ окажется меньше исходного (то есть в итоге точка опустилась ниже, чем
была).
Вернёмся к вычислению скорости. Время движения равно просто $\Delta x$. Значит,
скорость движения — вернее, \emph{средняя скорость движения} на интервале от
$x_0$ до $x_0 + \Delta x$ находится по формуле:
\eq
\text{средняя скорость} = \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x}
Однако, нужно иметь в виду, что на промежутке от $x_0$ до $x_0+\Delta x$
движение не обязано быть равномерным — в какие-то моменты точка могла двигаться
быстрее, в какие-то медленнее. Нас же интересует, что происходит в сам момент
времени $x_0$, интересует \emph{мгновенная скорость} в этот момент. Чтобы
изменение скорости на промежутке длиной $\Delta x$ не влияло на оценку скорости
в момент $x_0$, нужно сделать длину этого промежутка как можно меньше. Иными
словами, перейти к пределу при $\Delta x \to 0$. Так мы и получим производную.
\snippet \flabel определение производной \label snip:deriv
\definition \label def:15:deriv
\emph{Производная} функции $f$ в точке $x_0$ равна мгновенной скорости
изменения функции в этой точке. Она обозначается через $f'(x_0)$ и
определяется следующим образом:
\align
\item \label eq:15:deriv-def
& f'(x_0)=
\splitem \splonly{&=}
\lim_{\Delta x \to 0} \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x}.
Также можно обозначить $x:=x_0 + \Delta x$ и записать тот же предел следующим
образом:
\equation
f'(x_0) = \lim_{x\to x_0} \frac{f(x) - f(x_0)}{x-x_0}.
\remark \label rem:15:positive
Мы раньше рисовали картинки, на которых $\Delta x$ была положительна. В
определении производной этого на самом деле не требуется: используется
предел при $\Delta x\to 0$, а не односторонний предел.
\section Интерпретация производной
\subsection Линейная функция и равномерное движение
Рассмотрим функцию $f(x)=kx+b$. Это хорошо известная \emph{линейная функция} (по
крайней мере, в матанализе её называют именно так, хотя специалисты по линейной
алгебре с этим могли бы и поспорить). Возьмём произвольный начальный момент
$x_0$, произвольный промежуток длины $\Delta x$ и посчитаем среднюю скорость за этот
промежуток:
\align \nonumber
\item
\text{ср. скорость} &= \frac{f(x_0+\Delta x)-f(x_0)}{\Delta
x}=
\splitem \splonly{&=}\frac{k(x_0+\Delta x) + b - (kx_0 + b)}{\Delta x}=
\item
&=\frac{kx_0 + k \Delta x
+ b - kx_0 - b}{\Delta x}=
\splitem \splonly{&=} \frac{k \Delta x}{\Delta x} = k.
Итак, каким бы ни был начальный момент и какой бы промежуток мы ни взяли,
средняя скорость будет всегда одинаковой и равной $k$. Таким образом, линейная
функция задаёт движение с постоянной скоростью. Производная линейной функции,
как следует из определения, во всех точках одинакова и равна $k$.
Коэффициент $k$ называется \emph{угловым коэффициентом} линейной функции
$f(x)=kx+b$ (или угловым коэффициентом прямой, которая является графиком этой
функции). Он показывает, на сколько позиций мы сдвинемся вверх, если подождём
одну единицу времени (то есть сдвинемся на одну единицу по горизонтали), см.
\ref[рис.][fig:15:linear].
\figure
\img
\style
padding: 2em; max-width:600px;
\src derivative-2.svg
\alt
Нарисован график функции y=kx+b, на горизонтальной оси отмечены точки x_0, x_0 + 1, x_0 + 2, не вертикальной - b, kx_0 + b, kx_0 + k + b, kx_0 + 2k + b. Отмечен угол прямой y=kx+b с горизонтальной в точке (x_0, kx_0 + b). Он обозначен alpha. Сказано, что tg alpha = k/1 = 2k/2.
\caption
Линейная функция $y=kx+b$, её график и смысл коэффициентов. Коэффициент
$b$ задаёт смещение по вертикали, а $k$ — наклон прямой.
\label fig:15:linear
Геометрически, угловой коэффициент — это тангенс угла наклона прямой, заданной
как график линейной функции, к горизонтальной оси.
\subsection Секущие и касательные
Рассмотрим теперь какую-нибудь нелинейную функцию, например, такую, график
которой изображён на \ref[рис.][fig:15:cubic]. Пусть нас интересует производная в
точке $x_0$. Рассмотрим выражение под знаком предела в определении производной
\ref{eq:15:deriv-def} и возьмём какое-то конкретное значение $\Delta x$.
Проведём прямую через точки $(x_0, f(x_0))$ и $(x+\Delta x, f(x+\Delta x))$. Она
называется \emph{секущей} для графика функции $y=f(x)$. Поскольку секущая — это
прямая, она является графиком линейной функции. Угловой коэффициент этой прямой
как раз и равен средней скорости. Иными словами, если мы хотим двигаться
равномерно (с постоянной скоростью) на промежутке времени от $x_0$ до $x_0 +
\Delta x$ и при этом пройти именно то расстояние, которое мы прошли: от $f(x_0)$ до
$f(x_0 + \Delta x)$, то нужно двигаться как раз со средней скоростью на этом
промежутке.
\figure \showcode \collapsed
\pythonfigure \style max-width: 500px;
def replace(lst, dct):
return (dct.get(x, x) for x in lst)
def draw_section(x0=1, delta_x=2.3):
X = np.linspace(-4, 4, 200)
x = x0 + delta_x
def f(x):
return ((x + 1) / 3) ** 3
k = (f(x) - f(x0)) / delta_x
plt.plot(X, f(X), color='C0', label='$y=f(x)$')
plt.plot([x0, x], [f(x0), f(x)], 'o', color='C1')
plt.plot(X, k * (X - x0) + f(x0), '-', color='C1')
plt.legend()
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.yticks([])
plt.xticks([x0, x],
['$x_0$', r'$x_0 + \Delta x$'])
draw_section()
\caption Секущая к графику функции
\label fig:15:cubic
Будем теперь уменьшать $\Delta x$. В этом случае одна точка на графике
будет неподвижной, а другая будет к ней приближаться, см. анимацию на
\ref[рис.][fig:15:sec-to-tang]. Секущая при этом может
поворачиваться вокруг точки $(x_0, f(x_0))$. Однако если существует
предел в определении производной, то у секущей будет существовать предельный
угловой коэффициент, и значит предельное положение — она будет «стремиться» (в
кавычках — потому что мы не определяли, что может значить «стремиться» для
прямых) к прямой, проходящей через точку $(x_0, f(x_0))$ с угловым коэффициентом
$k=f'(x_0)$. У этой прямой есть специальное название: касательная.
\definition
\emph{Касательная} к графику функции $y=f(x)$ в точке $x_0$ — это прямая,
проходящая через точку $(x_0, f(x_0))$ и имеющая угловой коэффициент
$k=f'(x_0)$.
\figure \showcode \collapsed
\pythonvideo \jsanimate \style max-width: 500px;
def replace(lst, dct):
return (dct.get(x, x) for x in lst)
def draw_section(x0=1, delta_x=2.3):
X = np.linspace(-4, 4, 200)
x = x0 + delta_x
def f(x):
return ((x + 1) / 3) ** 3
k = (f(x) - f(x0)) / delta_x
plt.plot(X, f(X), color='C0', label='$y=f(x)$')
plt.plot([x0, x], [f(x0), f(x)], 'o', color='C1')
plt.plot(X, k * (X - x0) + f(x0), '-', color='C1')
plt.yticks([0], [''])
plt.xticks([0], [''])
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)
fig = plt.figure()
camera = Camera(fig)
for delta_x in np.linspace(2.3, 0, 20, endpoint=False):
draw_section(delta_x=delta_x)
camera.snap()
draw_section(delta_x=1e-7)
camera.snap()
animation = camera.animate()
\caption Секущая стремится к касательной
\label fig:15:sec-to-tang
Про касательную можно думать так. Представьте себе, что график на
\ref[рис.][fig:15:cubic] вблизи точки $(x_0, f(x_0))$ вырезан из фанеры —
вернее, то, что находится над графиком — это кусок фанеры, а то, что под
графиком, мы отрезали лобзиком (ровно по графику). Теперь можно взять недлинную
линейку и приложить её к графику в точке $(x_0, f(x_0))$ как можно плотнее.
Тогда линейка пройдёт ровно вдоль касательной, см. \ref[рис.][fig:15:rule].
\figure
\img
\style
padding: 2em; max-width:500px;
\src derivative-3.svg
\alt
Нарисован график функции, на горизонтальной оси отмечена точка x_0
и соответствующая точка на графике функции, вблизи точки x_0 график
похож на параболу с ветвями вверх, заштрихована область сверху от
графика, снизу в точке (x_0, f(x_0)) к графику приложена линейка
\caption
Нахождение касательной с помощью линейки.
\label fig:15:rule
\remark
На уроках геометрии в школе обсуждается касательная к окружности, и
определяется она как прямая, имеющая с окружностью единственную общую точку.
Непосредственный перенос этого определения на случай функций не работает:
касательная может пересекать график в нескольких точках, см.
\ref[рис.][fig:15:multiple-intersections], и даже в бесконечном числе точек
(такой пример будет обсуждаться на семинарах). Однако, геометрически
касательная к окружности очень похожа на касательную к графику функции, и
может быть получена схожей процедурой: если вы возьмёте две точки на
окружности и проведёте через них прямую, а потом начнёте приближать одну
точку к другой, то эта прямая будет «стремиться» к касательной.
\figure \showcode \collapsed
\pythonfigure \style max-width: 500px;
def draw_section(x0=1, delta_x=2.3):
from sympy import Symbol, lambdify, solve
X = np.linspace(-4, 4, 200)
x = Symbol('x')
x0 = -0.3
def f(x):
return (x - 1) * x * (x + 1) * (x + 2)
def deriv(f):
return lambdify(x, f(x).diff(x))
def tang(f, x0, x):
return deriv(f)(x0) * (x - x0) + f(x0)
plt.plot(X, f(X))
plt.plot(X, tang(f, x0, X))
for x_isec in solve(tang(f, x0, x) - f(x), x):
plt.plot([x_isec], [f(x_isec)], 'o', color='C1')
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)
draw_section()
\caption В отличие от касательной к окружности, касательная к графику
функции может иметь больше одной точки пересечения с графиком
\label fig:15:multiple-intersections
\subsection Производная как функция
Выбирая разные точки в качестве $x_0$ в \ref[определении
производной\nonumber][def:15:deriv], мы будем получать разное значение предела
\ref{eq:15:deriv-def}. Таким образом, производная функции — это новая функция.
Полезно представлять себе визуально, как связан график функции и график её
производной. По определению, производная — это мгновенная скорость возрастания
функции в точке. Таким образом, если по графику видно, что где-то функция
возрастает, то её производная там положительна. Если возрастает быстро, производная
большая. Если убывает, производная отрицательна, и так далее. (Аккуратные
формулировки для этих утверждений мы приведём позже, а потом их докажем.) Можно
мысленно прикладывать касательные в разных точках, прикидывать их угловые
коэффициенты и находить таким образом точки на графике производной.
Рассмотрим, например, график, изображенный на \ref[рис.][fig:15:f-to-deriv]
сверху, и прикинем, чему равна производная в отмеченных точках.
\figure
\img
\style
padding: 2em; max-width:700px;
\src derivative-4.svg
\alt
Сверху нарисовн график, похожий на стандартную параболу. Отмечены
точки x1=-2, x2=-1, x3=0, x4=1, x5=2 и проведены касательные в
соответствующих точках. Снизу нарисован график, похожий на прямую
y=2x.
\caption
Связь графика функции с графиком касательной.
\label fig:15:f-to-deriv
В точке $x_1$ функция убывает, равно как и в точке $x_2$. Но если посмотреть на
касательные в этих точках, видно, что в $x_1$ функция убывает быстрее, чем в
$x_2$ (в $x_1$ касательная ближе к вертикальной, график более крутой, чем в
$x_2$), то есть $f'(x_1) < f'(x_2) < 0$. Можно отметить на графике касательной
две точки: они обе должны быть ниже горизонтальной оси, и точка, соответствующая
$x_1$, ниже, чем та, которая соответствует $x_2$. Теперь посмотрим на точку
$x_3=0$. В ней касательная горизонтальна. Выражаясь динамическим языком, это
момент разворта: левее мы двигались вниз (функция убывала), в момент времени $0$
на мгновение остановились и потом стали двигаться вверх. Мгновенная скорость в
точке $0$ равна нулю. Это значит, что соответствующая точка на графике
касательной будет лежать на горизонтальной оси. Наконец, можно посмотреть на
точки $x_4$ и $x_5$. Мы видим, что в обоих точках функция возрастает, но в $x_5$
возрастает быстрее, чем в $x_4$ — график со временем становится начинает расти
круче. Это означает, что производная в точке $x_5$ больше производной в $x_4$, и
это также нужно отразить на графике производной. Получается кривая, похожая на
изображенную на \ref[рисунке][fig:15:f-to-deriv] внизу.
Весь этот анализ мы провели, исходя просто из формы графика, не обращаясь к
формулам. Конечно, наш результат носит качественный характер — чисто глазомерно
нельзя найти точных значений производной функции, которая задана графиком,
нарисованным от руки. Тем интереснее сравнить эти «глазомерные» результаты с
точно посчитанными.
График, который мы нарисовали, похож на параболу, график функции $f(x)=x^2$.
Давайте найдём её производную, пользуясь
\ref[опредлением\nonumber][def:15:deriv]:
\align \nonumber
\item
f'(x_0) &=\lim_{\Delta x \to 0} \frac{(x_0+\Delta x)^2 - x_0^2}{\Delta x}=
\splitem \splonly{&=}
\lim_{\Delta x \to 0}\frac{x_0^2 + 2x_0 \Delta x + \Delta x_0^2 - x_0^2}{\Delta x}=
\splitem \splonly{&=}
\lim_{\Delta x \to 0} (2x_0 + \Delta x)=2x_0.
Точка $x_0$ произвольная, можно заменить её просто на $x$ и записать $f'(x)=2x$.
Скорее всего, вы помните эту формулу из школьного курса. Таким образом, график
производной — это прямая линия. И она ведёт себя именно так, как мы нарисовали!
\section Существование производной
\subsection Дифференцируемость и непрерывность
Всякий раз, когда мы видим определение, заданное с помощью предела, мы должны
задать вопрос: а всегда ли существует этот предел? Как правило, ответ: «не
всегда». Это относится и к производной.
\snippet \flabel дифференцируема \label snip:differentiable
\definition
Если у функции $f$ существует производная в точке $x_0$, функция назыается
\emph{дифференцируемой} в этой точке.
Что может помешать функции быть дифференцируемой? Много что.
Во-первых, чтобы предел \ref{eq:15:deriv-def} в принципе имел бы смысл, функция
$f$ должна быть определена в точке $x_0$ (иначе нельзя посчитать $f(x_0)$) и
некоторой её окрестности (иначе нельзя посчитать $f(x_0 + \Delta x)$). Но этого,
конечно, мало.
Необходимым условием дифференцируемости является непрерывность. Если функция не
является непрерывной в точке, то она точно не является дифференцируемой в этой
точке. Это можно сформулировать в виде следующей теоремы.
\theorem \label thm:15:cont
Если функция $f$ дифференцируема в точке $x_0$, то она непрерывна в этой
точке.
\proof
Пусть мы знаем, что производная существует, то есть существует предел
\eq
\lim_{\Delta x \to 0} \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x} =
f'(x_0).
Чтобы доказать непрерывность функции $f$ в точке $x_0$, нужно изучить предел
$\lim_{x\to x_0} f(x)$, или, что то же самое,
\eq
\lim_{\Delta x \to 0} f(x_0 + \Delta x).
Преобразуем выражение под знаком предела. Во-первых, вычтем и добавим
$f(x_0)$:
\align \nonumber
\item
&\lim_{\Delta x \to 0} f(x_0 + \Delta x) =
\splitem \splonly{&=}
\lim_{\Delta x \to 0}(f(x_0 + \Delta x) - f(x_0) + f(x_0))=….
Теперь возьмём первые два слагаемые и умножим и поделим их на $\Delta x$
(под знаком предела $\Delta x$ не может обращаться в ноль, поэтому операция
корректна):
\eq
…=\lim_{\Delta x \to 0} \left(\frac{f(x_0 + \Delta x)-f(x_0)}{\Delta x}\cdot
\Delta x + f(x_0)\right).
Теперь заметим, что выражение $\frac{f(x_0 + \Delta x)-f(x_0)}{\Delta x}$
стремится к $f'(x_0)$ при $\Delta x \to 0$, $\Delta x$ стремится
к нулю, значит, их произведение стремится к $f'(x_0)\cdot 0=0$. Предел
второго слагаемого, числа $f(x_0)$, равен ему самому (это константа, не
зависящая от $\Delta x$). Значит, предел всего выражения равен $0+f(x_0)$,
то есть $f(x_0)$. Значит
\eq
\lim_{x\to x_0} f(x)=\lim_{\Delta x \to 0} f(x_0 + \Delta x) = f(x_0)
и функция $f$ непрерывна в точке $x_0$.
\subsection Точки изломов
Итак, чтобы быть дифференцируемой в некоторой точке, функция должна быть по
меньшей мере непрерывной в этой точке. Но достаточно ли этого? Оказывается, нет.
\example
Рассмотрим функцию $f(x)=|x|$, см. \ref[рис.][fig:15:abs].
\figure \showcode \collapsed
\pythonfigure \style max-width: 500px;
x = np.linspace(-4, 4, 200)
plt.plot(x, np.abs(x))
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)
\caption График функции $y=|x|$.
\label fig:15:abs
Есть ли у неё производная в точке $x_0=0$? Давайте найдём предел:
\eq
\lim_{\Delta x \to 0} \frac{|0 + \Delta x| - |0|}{\Delta x}=\lim_{\Delta
x \to 0} \frac{|\Delta x|}{\Delta x}.
Модуль раскрывается по-разному в зависимости от знака $\Delta x$. Как мы
обсуждали выше (см. \ref[замечание][rem:15:positive]), $\Delta x$ не обязана
быть положительной, и нужно рассмотреть два случая. Если $\Delta x > 0$,
выражение под знаком предела превращается в 1, то есть
\eq
\lim_{\Delta x \to 0^+} \frac{|\Delta x|}{\Delta x}=\lim_{\Delta x \to
0^+} 1 = 1.
Для отрицательных $\Delta x$ модуль раскрывается со знаком минус, и дробь
равна $-1$. Значит,
\eq
\lim_{\Delta x \to 0^-} \frac{|\Delta x|}{\Delta x}=\lim_{\Delta x \to
0^-} (-1) = -1.
Таким образом, при приближении к нулю с разных сторон, функция стремится к
разным значениям, и общего предела нет. Функция не дифференцируема в точке
$x=0$.
Графически, это соответствует тому, что у неё в точке $x=0$ наблюдается
излом. Если проводить секущие, то при $\Delta x>0$ они будут совпадать с
прямой $y=x$, а при $\Delta x<0$ — с прямой $y=-x$. Никакого общего
предельного положения секущей не будет, и касательной в точке $x=0$ тоже не
будет.
\subsection Вертикальные касательные
Точки изломов, как у функции $f(x)=|x|$ — один из механизмов, как непрерывная
функция может быть не дифференцируемой. Но он не единственный.
\example
Рассмотрим функцию $f(x)=\sqrt[3]{x-1}$. Попробуем построить касательную в
точке $x_0=1$. На анимации на \ref[рис.][fig:15:vertical-tangent] видно, что по
мере приближения второй точке пересечения к точке $(1, 0)$, секущая
становится всё вертикальнее и вертикальнее. Можно аккуратно доказать (вы
сделаете это на семинаре), что предел в определении производной в этом
случае равен бесконечности, то есть не существует. Касательная тоже не
существует — по крайней мере, в соответствии с нашим определением. Можно
было бы сказать, что касательная вертикальна, но вертикальная прямая не
является графиком функции $y=kx+b$, и это потребовало бы расширения нашего
определения касательной — чего мы делать не будем, поскольку в этом сейчас
нет никакой непосредственной необходимости.
\figure \showcode \collapsed
\pythonvideo \jsanimate \style max-width: 500px;
def replace(lst, dct):
return (dct.get(x, x) for x in lst)
def draw_section(x0=1, delta_x=2.3):
X = np.linspace(-5, 4, 200)
x = x0 + delta_x
def f(x):
return np.sign(x - 1) * (np.abs(x - 1) ** (1. / 3))
k = (f(x) - f(x0)) / delta_x
plt.plot(X, f(X), color='C0', label='$y=f(x)$')
plt.plot([x0, x], [f(x0), f(x)], 'o', color='C1')
plt.plot(X, k * (X - x0) + f(x0), '-', color='C1')
plt.yticks([0], [''])
plt.xticks([0], [''])
ob.center_spines(grid=False, minor_ticks=False)
ob.settle_axes(xmin=-4.2, xmax=4.2, ymin=-2.3 , ymax=2.3,
xlabel="x", ylabel="y", axlabelshift=1.3)
fig = plt.figure()
camera = Camera(fig)
for delta_x in np.linspace(2.3, 0, 20, endpoint=False):
draw_section(delta_x=delta_x)
camera.snap()
draw_section(delta_x=1e-7)
camera.snap()
animation = camera.animate()
\caption Вертикальная касательная
\label fig:15:vertical-tangent
Вертикальные касательные и изломы — не единственные причины, по которым функция
может не будет дифференцируемой — но, пожалуй, самые важные с практической точки
зрения. С некоторыми другими способами вы встретитесь на семинаре.
\section
Касательные и линейные приближения
\subsection
Формулировка и иллюстрация
По своему смыслу, касательная — это такая прямая, которая проходит вблизи
графика функции (что, собственно, и означает «касается»). Чтобы придать этому
аккуратный смысл, сформулируем такое утверждение.
\proposition \label prop:15:linear-approx
Функция $f$ дифференцируема в точке $x_0$ тогда и только тогда, когда
существует такое число $k \in \mathbb R$ и такая функция $\alpha(\Delta
x)$, определенная в проколотой окрестности нуля, и стремящаяся к нулю при
$\Delta x \to 0$, что справедливо равенство
\align
\item \label eq:15:linear
&f(x_0 + \Delta x)=
\splitem \splonly{&=} f(x_0) + k \Delta x + \alpha(\Delta x) \cdot \Delta x.
В этом случае $k=f'(x_0)$.
Прежде, чем приступить к доказательству, давайте обсудим, что всё это значит.
Что означает условие \ref{eq:15:linear}? С помощью замены $x=x_0 + \Delta x$,
его можно переписать в таком виде:
\align
\item \label eq:15:linear-nodelta
& f(x)=
\splitem \splonly{&=} f(x_0) + k (x-x_0) +
\splitem \splonly{&+} \alpha(x-x_0) \cdot (x-x_0).
Пусть $f$ дифференцируема в точке $x_0$ и $k=f'(x_0)$. Рассмотрим функцию $l$,
заданную следующим образом:
\eq
l(x)=f(x_0)+ f'(x_0)\cdot (x-x_0).
Это линейная функция, графиком которой является касательная к графику $y=f(x)$ в
точке $x_0$. Действительно, во-первых, она проходит через точку $(x_0, f(x_0))$
(подставьте $x=x_0$ и убедитесь в этом). А во-вторых, её угловой коэффициент равен
значению производной в точке $x_0$.
Таким образом, равенство \ref{eq:15:linear-nodelta} записывается в виде:
\align
\item \label eq:15:linear-approx
& f(x)=
\splitem \splonly{&=} l(x) + \alpha(x-x_0)\cdot (x-x_0).
Если бы в нём не было второго слагаемого, это бы просто означало, что функция
линейна и её график совпадает с касательной. Второе слагаемое, $\alpha(x-x_0)
\cdot (x-x_0)$ показывает, на сколько сильно график функции отклоняется от
касательной, см. \ref[рис.][fig:15:linear-approx].
\figure
\img
\style
padding: 4em; max-width:600px;
\src derivative-5.svg
\alt
Нарисован график функции, на горизонтальной оси отмечены точки x_0
и x, проведена касательная в точке x_0, она обозначена как y=l(x). На вертикальной отмечены точки f(x_0), l(x) и f(x). Отмечено, что расстояние по вертикали между f(x) и l(x) равно alpha(x-x_0) (x-x_0)
\caption
Отклонение графика функции от касательной
\label fig:15:linear-approx
Утверждение, которое мы сейчас рассматриваем, говорит, что это
отклонение становится маленьким, если $\Delta x$ маленькое — но не просто
маленьким, а «маленьким по сравнению с $\Delta x$». Действительно, если
вернуться к выражению \eqref{eq:15:linear}, в правой части мы видим три
слагаемых: $f(x_0)$, $k\Delta x$ и $\alpha(\Delta x)\Delta x$. Второе и третье
слагаемые оба становятся маленькими при маленьких $\Delta x$. Но при этом второе
слагаемое пропорционально $\Delta x$, а третье — уменьшается быстрее, чем
$\Delta x$. Например, если $k=1/10$, выражение $k\Delta x$ всегда ровно в десять
раз меньше $\Delta x$, а выражение $\alpha(\Delta x) \Delta x$ при уменьшении
$\Delta x$ становится в десять, потом в сто, потом в тысячу раз меньше $\Delta
x$ — и так во сколько угодно раз меньше.
Почему это важно? Давайте посмотрим на график какой-нибудь функции вблизи
фиксированной точки, см. \ref[рис.][fig:15:zoomin].
\figure \showcode \collapsed
\pythonfigure \style max-width: 500px;
from sympy import Symbol, lambdify, solve
from itertools import zip_longest
def f(x):
return x ** 2
def deriv(f):
return lambdify(x, f(x).diff(x))
def tang(f, x0, x):
return deriv(f)(x0) * (x - x0) + f(x0)
x = Symbol('x')
scales = [(2, 2), (1, 1), (0.5, 0.5), (0.1, 0.1), (None, None)]
x0 = 1
for i, ((deltax, deltay),
(deltax_next, deltay_next)) in enumerate(zip(scales[:-1],
scales[1:])):
plt.subplot(2, 2, i + 1)
X = np.linspace(x0 - deltax, x0 + deltax, 200)
plt.plot([x0], [f(x0)], 'o', color='C1')
plt.plot(X, f(X))
plt.plot(X, tang(f, x0, X))
if deltax_next is not None:
plt.plot([x0 - deltax_next,
x0 - deltax_next,
x0 + deltax_next,
x0 + deltax_next,
x0 - deltax_next],
[f(x0) - deltay_next,
f(x0) + deltay_next,
f(x0) + deltay_next,
f(x0) - deltay_next,
f(x0) - deltay_next])
plt.ylim(f(x0) - deltay, f(x0) + deltay)
\caption
Увеличение графика функции и касательной вблизи фиксированной точки.
На каждом графике мы выбираем область вблизи точки $(x_0, f(x_0))$ (она
нарисована зелёным) и растягиваем её на всю картинку — так получается
следующий график.
\label
fig:15:zoomin
На первом графике различие между графиком нашей функции и её касательной было
хорошо заметно, при каждом увеличении это различие становилось всё меньше и
меньше, и на последней картинке настоящий график практически не виден — его
полностью загораживает касательная, то есть две кривые почти совпадают. Почему
так происходит?
Чтобы посмотреть на график под большим увеличением вблизи точки $(x_0, f(x_0))$,
нужно выбрать на исходной картинке небольшой прямоугольник вблизи этой точки и
растянуть его на всю картинку. Пусть в качестве этого прямоугольника мы взяли
квадрат со стороной $2h$ (то есть отступили от точки $x_0$ вправо и влево на
$h$, и аналогично по вертикали отступили от $f(x_0)$ вверх и вниз на $h$). Если
мы теперь растянем этот квадратик на всю картинку (допустим, размера 1 на 1), то
все расстояния умножатся на $1/h$. (Когда $h$ маленькое, $1/h$
большое и произойдёт сильное увеличение.)
Посмотрим теперь на формулу \eqref{eq:15:linear-approx}. Она говорит, что
разница между графиком функции и касательной равна $\alpha(\Delta x) \Delta x$.
Поскольку мы рисуем только часть картинки в нашем квадратике, $|\Delta x|\le h$.
В новом масштабе, с учётом растяжения в $1/h$ раз, соответствующее расстояние
между графиками окажется равно
\eq
|\alpha(\Delta x)| \frac{|\Delta x|}{h} \le |\alpha(\Delta x)|.
Но если $h$ маленькое, то $|\Delta x|$ маленький и эта величина стремится к
нулю! Таким образом, результат, который мы видим на \ref[рис.][fig:15:zoomin],
не является чем-то удивительным — в нём вся суть понятия касательной, и на самом
деле вся суть идеи дифференцируемости: вблизи фиксированной точки
дифференцируемая функция очень близка к линейной функции, задающей касательную в
этой точке.
\subsection
Доказательство утверждения о линейном приближении
\proof \of \ref[утверждения][prop:15:linear-approx]
Нам нужно доказать эквивалентность двух утверждений:
\itemize
\item функция $f$ дифференцируема в точке $x_0$;
\item существует представление \ref{eq:15:linear}, которое говорит о
том, что функция $f$ хорошо приближается некоторой линейной
функцией в окрестности точки $x_0$.
\paragraph
Из дифференцируемости следует линейное приближение
Пусть функция $f$ дифференцируема в точке $x_0$. Положим $k=f'(x_0)$ и
\eq
\alpha(\Delta x):=\frac{f(x_0 + \Delta x)-f(x_0)}{\Delta x} - k.
В этом случае представление \ref{eq:15:linear} соблюдается (я просто выразил
$\alpha(\Delta x)$ из него), и содержательным является утверждение, что
$\alpha(\Delta x)\to 0$ при $\Delta x\to 0$.
Докажем его:
\align \nonumber
\item
&\lim_{\Delta x \to 0} \alpha(\Delta x)=
\splitem \splonly{&=}
\lim_{\Delta x \to 0} \left(\frac{f(x_0 + \Delta x)-f(x_0)}{\Delta x} - k\right)=
\splitem \splonly{&=}
f'(x_0)-k=0.
Мы воспользовались определением производной, теоремой о пределе суммы и тем
фактом, что мы сами выбрали $k=f'(x_0)$.
\paragraph Из линейного приближения следует
дифференцируемость
Наборот, пусть теперь известно, что представление \ref{eq:15:linear} верно для
какого-то $k$ и $\alpha(\Delta x)$, причём $\alpha(\Delta x)\to 0$.
Докажем, что функция $f$ дифференцируема в точке $x_0$ и $f'(x_0)=k$.
Из \ref{eq:15:linear} следует, что
\eq
\alpha(\Delta x)=\frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x} - k.
Перенесём $k$ в левую часть и перейдём к пределу при $\Delta x \to 0$. Имеем:
\align \nonumber
\item
& \lim_{\Delta x \to 0} \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x} =
\splitem \splonly{&=}
\lim_{x\to \Delta x} \alpha(\Delta x) + k = k.
Мы воспользовались тем фактом, что $\alpha(\Delta x) \to 0$ при $\Delta x
\to 0$ и пределом суммы. Теперь в левой части стоит определение производной
функции $f$ в точке $x_0$,
а справа $k$. Значит, производная существует и равна $k$.
\remark
Можно доопределить $\alpha(\Delta x)$ в нуле нулём: тогда эта функция будет
непрерывной в нуле, что полезно для некоторых приложений.
\section Заключение
Производная — мощный инструмент анализа функций. Мы аккуратно ввели это понятие
и обсудили механическую и геометрическую интуицию, которая за ним стоит. На
следующей лекции мы обсудим, как находить производные, а затем — как их
применять.