22Формула Тейлора с остаточным членом в форме Лагранжа
22.1Приближение значений функций с помощью тейлоровских многочленов
Формула Тейлора с остаточным членом в форме Пеано, которую мы обсуждали на
прошлой лекции — мощный результат про локальное поведение функций. Однако, он
записывается в терминах o-малых, то есть утверждает что-то про поведение
функции при x→x0. Если мы зафиксируем конкретный x, эта формула не
говорит ничего. В частности, она не позволяет сделать никакого утверждения о
том, что тейлоровские многочлены приближают значения соответствующих функций с
ростом степени. Однако зачастую это является правдой.
Пример 1. Рассмотрим функцию f(x)=sinx. Найдём её производные:
f′(x)=cosx,f′′(x)=−sinx,f′′′(x)=−cosx,f(4)(x)=sinx,f(5)(x)=cosx,
дальше процесс зацикливается. Пусть x0=0. Тогда производные в точке x0
образуют периодическую последовательность (начиная с нулевой производной, то
есть со значения функции): 0,1,0,−1,0,1,0,−1,…. Тейлоровский
многочлен степени n=2k+1 в окрестности точки 0 для синуса имеет вид:
T2k+1(x)=x−x33!+x55!−x77!+…+(−1)kx2k+1(2k+1)!.
T2k+1(x)=x−x33!+x55!−x77!+…++(−1)kx2k+1(2k+1)!.
Возьмём несколько тейлоровских многочленов разных степеней и построим их
графики вместе с графиком синуса, см. рис. 22.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 np.sin(x)
def T(x, k):
return sum((-1) ** i * x ** (2 * i + 1) /
np.math.factorial(2 * i + 1) for i in range(0, k + 1))
x = np.linspace(-5, 5, 211)
plt.figure(figsize=(6, 5))
plt.plot(x, f(x), label='$y=f(x)$', lw=2)
plt.plot(x, T(x, 0), label='$y=T_1(x)$', lw=1)
plt.plot(x, T(x, 1), label='$y=T_3(x)$', lw=1)
plt.plot(x, T(x, 2), label='$y=T_5(x)$', lw=1)
plt.plot(x, T(x, 3), label='$y=T_7(x)$', lw=1)
plt.plot(x, T(x, 4), label='$y=T_9(x)$', lw=1)
plt.legend(loc=4)
ob.center_spines(grid=False, minor_ticks=False)
ob.settle_axes(xmin=-5.3, xmax=5.3, ymin=-2.5, ymax=2.5,
xlabel="x", ylabel="y")
plt.xticks([-np.pi / 2, np.pi / 2], [r'$-\pi / 2$', r'$\pi / 2$'])
plt.yticks([])
На графике мы видим, что каждый следующий тейлоровский многочлен приближает
синус всё лучше и лучше, причём на всё большем и большем промежутке.
Например, если бы я захотел посчитать значение sin(π/2) (мы знаем, что
это 1, но вдруг забыли), используя для этого тейлоровские многочлены,
многочлен первой степени (линейное приближение) никуда бы не годился,
многочлен третьей степени дал бы ощутимую погрешность, пятой — погрешность,
не видимую на графике, а девятый — ошибку в шестом знаке после запятой.
import numpy as np
def T(x, k):
return sum((-1) ** i * x ** (2 * i + 1) /
np.math.factorial(2 * i + 1) for i in range(0, k + 1))
print("n\tT_n(pi/2)")
for k in range(0, 5):
print(f"{2 * k + 1}\t{T(np.pi / 2, k):0.7f}")
Итак, в случае синуса, логично было бы предположить, что верно утверждение:
limn→∞Tn(x)=sinx
для любых x. Заметим, что это утверждение никак не следует из формулы
Тейлора с остаточным членом в форме Пеано — там речь про предел при x→x0, а здесь мы взяли конкретный x, зафиксировали его и рассматриваем
предел при n→∞.
Пример 2. Повторим предыдущий пример для функции f(x)=ln(x). Будем записывать
тейлоровские многочлены в окрестности точки 1. Имеем:
f′(x)=1/x=x−1,f′′(x)=−x−2,f′′′(x)=2x−3,f(4)(x)=−6x−4.
При каждом дифференцировании степень уменьшается на 1 и сносится в виде
коэффициента. Значит, f(n)(x)=(−1)n+1(n−1)!x−n и тейлоровский
многочлен степени n имеет вид:
Мы видим, что с ростом n приближение становится всё лучше и лучше — но
только на множестве (0,2]. Если x>2, приближение становится, наоборот,
всё хуже и хуже!
Докажем, что она дифференцируема сколько угодно раз в нуле и найдём её
тейлоровские многочлены в окрестности нуля.
Чтобы найти первую производную в нуле, нам придётся воспользоваться
определением — просто так применить стандартные правила дифференцирования не
получится, т.к. функция по-разному опрделена в нуле и вне нуля.
f′(0)=limΔx→0e−1/Δx2−0Δx.
Когда Δx→0 выражение 1/Δx2→+∞ и можно сделать замену
t=1/Δx2:
f′(0)=limt→+∞e−t√1/t=limt→+∞√tet.
(На самом деле, если Δx→0−, перед корнем будет минус, но это
ни на что не влияет.)
Мы знаем, что экспонента стремится к бесконечности быстрее, чем любая
степенная функция, и значит этот предел равен нулю. (Можно воспользоваться,
например, правилом Лопиталя.)
Вторую производную тоже нужно находить по определению:
f′′(0)=limΔx→0f′(Δx)−f′(0)Δx.(22.1)
Мы знаем, что f′(0)=0. Однако чтобы найти этот предел, нам нужно знать,
чему равняется f′ и в точках, отличных от нуля. Для этих точек мы можем
найти f′ по стандартным правилам — если x≠0, то f(x)=e−1/x2 и
эту функцию можно просто продифферецировать:
Аналогично предыдущему, экспонента стремится к нулю быстрее любой степени, и
значит этот предел тоже равен нулю.
Дальше можно продолжать в том же духе. Каждый раз будет получаться 0.
(Докажите, что это действительно так!)
Итак, мы получаем, что все производные f в нуле равны нулю.
Это означает, что тейлоровский многочлен этой функции тождественно нулевой:
для всякого n, Tn(x)=0 для всех x.
Функция f при этом принимает ненулевые значения при всех x≠0. То есть
о стремлении Tn(x) к f(x) при n→∞ нет и речи.
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 np.exp(-1 / x**2)
x = np.linspace(-2, 2, 211)
plt.figure(figsize=(6, 5))
plt.plot(x, f(x), label='$y=f(x)$', lw=2)
ob.center_spines(grid=False, minor_ticks=False)
ob.settle_axes(xmin=-2, xmax=2, ymin=-0.1, ymax=1.1,
xlabel="x", ylabel="y")
plt.xticks([-1, 1])
plt.yticks([1])
Рис. 22.3: Функция с нулевыми производными. Кажется, что вблизи нуля у неё
целый отрезок нулевых значений, но это иллюзия: f(x)≠0 при
x≠0. Просто она стремится к нулю о-о-очень быстро.
Подведём промежуточный итог. Тейлоровские многочлены приближают функцию, по
которой они построены, вблизи точки x0, то есть когда x→x0. Но это не
означает, что для фиксированного значения x, Tn(x) будет приближаться к
f(x) при больших значениях n. Хотя часто это верно. Когда именно? Об этом —
следующая теорема.
Мы сформулируем теорему, которая позволяет доказывать оценки на остаточный член,
то есть разницу между значением функции и значением её тейлоровского многочлена,
при фиксированных x.
Теорема 1. Пусть функция f определена в окрестности точки a. Пусть точка b
принадлежит этой окрестности и для определенности b>a. Предположим также,
что функция f имеет (n+1) производную на интервале (a,b) и n производных на
отрезке [a,b], причём f(n) непрерывна на [a,b]. Обозначим
через Tn тейлоровский многочлен функции f в окрестности точки a.
Тогда найдётся такая точка c∈(a,b), что
f(b)=Tn(b)+f(n+1)(c)(n+1)!(b−a)n+1.(22.2)
f(b)=Tn(b)++f(n+1)(c)(n+1)!(b−a)n+1.(22.2)
Замечание 1. Если n=0, Tn(b)=f(a) и формула (22.2) превращается
в формулу (17.3) из лекции 17,
то есть наша теорема — это обобщение теоремы Лагранжа о конечных
приращениях.
Замечание 2. Прежде, чем доказывать эту теорему, покажем, как мы её будем применять.
Вернёмся к примеру 1. Пусть f(x)=sinx, a=0. Поскольку
любая производная синуса это либо сам синус, либо косинус (со знаком плюс или
минус), для любого c,
|f(n+1)(c)|≤1.
Значит остаточный член в формуле (22.2) оценивается
таким образом:
∣∣
∣∣f(n+1)(c)(n+1)!(b−0)n+1∣∣
∣∣≤|b|n+1(n+1)!.
При фиксированном значении b, степенная функция |b|n+1 растёт
медленнее, чем (n+1)!, и
limn→∞|b|n+1(n+1)!→0.
Значит для любого фиксированного b,
limn→∞Tn(b)=sinb,
то есть тейлоровские многочлены синуса сходятся к синусу. Иными словами,
синус можно разложить в ряд:
sinx=∞∑k=0(−1)kx2k+1(2k+1)!.
Это уже точное и честное равенство, здесь нет никаких остаточных членов
(поскольку взята бесконечная сумма).
Этот результат очень важен для практики. Собственно, когда вы просите
компьютер посчитать значение синуса в какой-то точке, вместо синуса он
вычисляет значение соответствующего тейлоровского многочлена достаточно
большой степени.
Доказательство. Теперь можно перейти к доказательству. Оно будет очень похоже на
доказательство теоремы Лагранжа о конечных приращениях.
Для начала, обозначим остаточный член (каким бы он ни был) через Rn(x):
Rn(x):=f(x)−Tn(x).
Заметим, что для всех k=0,…,n:
R(k)n(a)=0,
поскольку многочлен Тейлора Tn(x) строился по функции f в окрестности
точки a, и значит его значение, а также первые n производных в точке a
совпадают со значениями и производными функции f.
Рассмотрим функцию
H(x):=Rn(x)−q⋅(x−a)n+1,
где q — некоторая константа, которую мы выберем позже. Заметим, что для
всех k=0,…,n
H(k)(a)=0.
Действительно, для Rn это верно, а первые n производных добавки
q(x−a)n+1 в точке x=a равны нулю (продифференцируйте и подставьте!).
Выберем теперь q таким образом, чтобы H(b)=0. В этом случае
Rn(b)−q(b−a)n+1=0,
то есть
q=Rn(b)(b−a)n+1.(22.3)
Теперь заметим, что функция H удовлетворяет условиям теоремы
Ролля на отрезке [a,b]. Действительно, f
дифференцируема на отрезке [a,b], а значит и непрерывна на нём, а Tn и
q(x−a)n+1 — многочлены, они дифференцируемы где угодно сколько угодно
раз. Значит, H также дифференцируема и непрерывна на отрезке [a,b].
Дополнительно по построению H(a)=H(b)=0. Следовательно существует такая
точка c1∈(a,b), что
H′(c1)=0.
Теперь рассмотрим функцию H′(x) на отрезке [a,c1]. Она снова
удовлетворяет условию теоремы Ролля! Действительно, H′(a)=0 и H′(c1)=0.
Функция H′ непрерывна на отрезке [a,b] и значит на [a,c1].
(Если n=1, непрерывность первой производной f на всём отрезке [a,b]
явно сформулирована в условии теоремы, а если n>1, то она следует из
существования второй производной на всём отрезке, и значит
дифференцируемости первой производной.)
Значит существует такая точка c2∈(a,c1), что H′′(c2)=0.
Продолжая в том же духе, мы будем строить последовательность точек ck,
удовлетворяющих условиям ck∈(a,ck−1) и H(k)(ck)=0.
Сколько шагов так можно сделать? Заметим, что условия теоремы Ролля будут
выполняться для всех производных функции H вплоть до H(n). В
частности, мы явно потребовали, чтобы f(n) была непрерывна на
отрезке [a,b], а значит и H(n) тоже будет непрерывной на этом
отрезке, и, следовательно, и на отрезке [a,cn]. Значит в нашем
алгоритме мы дойдём до k=n+1, то есть найдётся такая точка cn+1∈(a,cn)⊂(a,b), что
H(n+1)(cn+1)=0.
Покажем, что cn+1 — это и есть искомая точка c, существование которой
утверждается в теореме. Для этого нужно найти
(n+1)-ю произодную H:
Действительно, Tn — это многочлен степени n, при (n+1)-кратном
дифференцировании он обнуляется, а q(x−a)n+1 превращается в константу.
Значит в точке x=cn+1 имеем:
0=H(n+1)(cn+1)=f(n+1)(cn+1)−q⋅(n+1)!.
Теперь нужно вспомнить, чему равняется q, см. (22.3). Получается
такая штука:
Rn(b)(b−a)n+1(n+1)!=f(n+1)(cn+1)
или
Rn(b)=f(n+1)(cn+1)(n+1)!(b−a)n+1.
То есть если положить c:=cn+1, получится ровно то, что мы обещали.
Доказательство завершено.∎
22.2.1Бонус: формула Тейлора и равноускоренное движение
Приведенное выше доказательство — самое простое из всех, что я знаю. Но у меня
всегда есть ощущение, что я достаю кролика из шляпы, когда я его завершаю, и
после его прочтения всё равно нет ощущения, что становится понятно, почему
формула именно такая. Возможно, следующая интерпретация прольёт на неё чуть
больше света.
Рассмотрим движение с постоянным ускорением. Пусть в момент времени x=a мы
находились в точке y0 и в этот момент скорость движения составляла v0.
Пусть также на всём промежутке времени, который нас интересует, ускорение
равнялось A. Тогда закон движения задаётся следующим образом:
y=y0+v0(x−a)+A2(x−a)2.(22.4)
Действительно, если продифференцировать правую часть и подставить x=a,
получим, что положение и скорость в начальный момент времени совпадают с
искомыми, а если продифференцировать дважды, то мы получим константу A.
Слагаемое A2(x−a)2 показывает, насколько сильно мы отклоняемся
от движения с постоянной скоростью v0 к моменту времени x.
Рассмотрим теперь некоторый другой закон движения y=f(x), уже не
обязательно происходящий с равномерным ускорением. Мы приближаем его
движением с постоянной скоростью:
y=T1(x)=f(a)+f′(a)(x−a)
и интересуемся, насколько сильно реальное движение уходит от этого движения
с постоянной скоростью к моменту времени x=b. Это и есть остаточный член
f(b)−T1(b).
Пусть ускорение непрерывно, то есть f′′ непрерывно на всём отрезке [a,b]. В каких-то точках оно достигает своего максимума Amax и минимума
Amin, а также принимает все значения из отрезка [Amax,Amin].
Если я стартую в точке f(a) с начальной скоростью f′(a) и всю дорогу буду
двигаться с максимально возможным ускорением Amax, к моменту b я попаду
в точку
fmax(b):=T1(b)+Amax2(b−a)2,
а если с минимально возможным ускорением Amin — то в точку
fmin(b):=T1(b)+Amin2(b−a)2.
Реальное положение f(b) находится где-то между этими двумя крайностями.
(Это утверждение кажется очевидным; его аккуратное обоснование несложно и
опирается на теорему Лагранжа.)
T1(x)+Amin2(b−a)2≤f(b)≤T1(x)+Amax2(b−a)2.
T1(x)+Amin2(b−a)2≤f(b)≤≤T1(x)+Amax2(b−a)2.
Пусть A непрерывно меняется от Amin до Amax. Тогда для
какого-то значения A=A∗,
f(b)=T1(b)+A∗2(b−a)2.
Но с другой стороны если A∗∈[Amin,Amax], это какое-то
значение ускорения между минимальным и максимальным. Из непрерывности
ускорения, найдётся момент времени x=c, при котором f′′(c)=A∗. В этом
случае
f(b)=T1(b)+f′′(c)2(b−a)2,
а это и есть формула Тейлора с остаточным членом в форме Лагранжа (для
n=1).
Аналогичным образом можно доказать эту формулу для любого n — только
вместо ускорения нужно будет брать (n+1)-ю производную f. Заметим, что наше
доказательство использует схожие идеи: функцию H можно записать в виде
H(x)=f(x)−(Tn(x)+q(x−a)n)
и из такого представления видно, что она показывает, насколько движение по
закону y=f(x) отличается от движения с постоянной (n+1)-й производной, и мы
специально так подбираем эту производную (константу q), чтобы оказаться в той
же точке, в которой мы оказались при движении по закону y=f(x). Это
соответствует выбору A∗ в рассуждении выше.
Формула Тейлора с остаточным членом в форме Лагранжа позволяет доказывать, что
некоторые функции представляются в виде бесконечных сумм — рядов Тейлора.
Трудно переоценить значение этого факта для развития математики: ведь что может
быть проще, чем степенной ряд — прямое обобщение многочлена, простейшего класса
математических функций? Анализ функций, представимых в виде своих рядов Тейлора
(они называюется аналитическими) — большая и красивая область математики.
Однако, как показывает пример 3, не все функции являются
аналитическими. И у этого факта есть важные следствия — в частности, можно
склеивать гладкие функции из кусочков, сохраняя их гладкость.