Асимптотика

Символы Ландау

Допустим, нам нужно приближённо оценить какую-то величину. Мы можем просто записать знак \approx.

k=1n1klnn+γ\sum\limits_{k=1}^n \frac{1}{k} \approx \ln n + \gamma

Поль Бахман в книге Analytische Zahlentheorie (1894) ввёл очень удобное обозначение OO, которое позволило заменить знак \approx на знак == и количественно выразить точность оценки.

k=1n1k=lnn+γ+O(1n)\sum\limits_{k=1}^n \frac{1}{k} = \ln n + \gamma + O \left( \frac{1}{n} \right)

Позже идеи Поля Бахмана развивались другими математиками, и в итоге был разработан очень мощный математический аппарат, позволяющий производить самые разные вычисления: от оценки примерного времени работы алгоритма без привязки к временной сложности базовых операций до вычисления сложных сумм и интегралов.

Сейчас мы имеем аж целых 55 символов для работы. Называются эти символы символами Ландау, в честь Эдмурда Ландау, который ввёл два символа OO и oo 1909 году. Позже математическое сообщество расширило обозначения, добавив Ω\Omega, ω\omega и Θ\Theta, а благодаря Дональду Кнуту обозначения Θ\Theta и Ω\Omega добрались и до информатиков.

О-большое

O(f(x))O \bigl( f(x) \bigr) — класс функций, которых функция ff асимптотически ограничивает сверху.

O(f(x))={g(x):c>0δ>0xU˚(a,δ)g(x)cf(x)}при xaO(f(x))={g(x):c>0x0>0x>x0g(x)cf(x)}при x\alignat{2}{ O \bigl( f(x) \bigr) &= \bigl\{ g(x) : \exists\, c > 0 \? && \exists\, \delta > 0 \? \forall\, x \in \osuburb(a, \delta) \\ &&& |g(x)| \le c \cdot |f(x)| \bigr\} \quad \text{при}~ x \to a\\[0.4em]O \bigl( f(x) \bigr) &= \bigl\{ g(x) : \exists\, c > 0 \? && \exists\, x_0 > 0 \? \forall\, x > x_0 \\ &&& |g(x)| \le c \cdot |f(x)| \bigr\} \quad \text{при}~ x \to \oo }

Омега-большое

Ω(f(x))\Omega \bigl( f(x) \bigr) — класс функций, которых функция ff асимптотически ограничивает снизу.

Ω(f(x))={g(x):c>0δ>0xU˚(a,δ)g(x)cf(x)}при xaΩ(f(x))={g(x):c>0x0>0x>x0g(x)cf(x)}при x\alignat{2}{ \Omega \bigl( f(x) \bigr) &= \bigl\{ g(x) : \exists\, c > 0 \? && \exists\, \delta > 0 \? \forall\, x \in \osuburb(a, \delta) \\ &&& |g(x)| \ge c \cdot |f(x)| \bigr\} \quad \text{при}~ x \to a\\[0.4em]\Omega \bigl( f(x) \bigr) &= \bigl\{ g(x) : \exists\, c > 0 \? && \exists\, x_0 > 0 \? \forall\, x > x_0 \\ &&& |g(x)| \ge c \cdot |f(x)| \bigr\} \quad \text{при}~ x \to \oo }

Тета-большое

Θ(f(x))\Theta \bigl( f(x) \bigr) — класс функций, которых функция ff асимптотически ограничивает.

Θ(f(x))={g(x):c1,c2>0δ>0xU˚(a,δ)c1f(x)g(x)c2f(x)}при xaΘ(f(x))={g(x):c1,c2>0x0>0x>x0c1f(x)g(x)c2f(x)}при x\alignat{2}{ \Theta \bigl( f(x) \bigr) &= \bigl\{ g(x) : \exists\, c_1, c_2 > 0 \? && \exists\, \delta > 0 \? \forall\, x \in \osuburb(a, \delta) \\ &&& c_1 \cdot |f(x)| \le |g(x)| \le c_2 \cdot |f(x)| \bigr\} \quad \text{при}~ x \to a\\[0.4em]\Theta \bigl( f(x) \bigr) &= \bigl\{ g(x) : \exists\, c_1, c_2 > 0 \? && \exists\, x_0 > 0 \? \forall\, x > x_0 \\ &&& c_1 \cdot |f(x)| \le |g(x)| \le c_2 \cdot |f(x)| \bigr\} \quad \text{при}~ x \to \oo }

о-малое

o(f(x))o \bigl( f(x) \bigr) — класс функций, которые растут намного медленнее, чем ff.

o(f(x))={g(x):c>0δ>0xU˚(a,δ)g(x)cf(x)}при xao(f(x))={g(x):c>0x0>0x>x0g(x)cf(x)}при x\alignat{2}{ o \bigl( f(x) \bigr) &= \bigl\{ g(x) : \forall\, c > 0 \? && \exists\, \delta > 0 \? \forall\, x \in \osuburb(a, \delta) \\ &&& |g(x)| \le c \cdot |f(x)| \bigr\} \quad \text{при}~ x \to a\\[0.4em]o \bigl( f(x) \bigr) &= \bigl\{ g(x) : \forall\, c > 0 \? && \exists\, x_0 > 0 \? \forall\, x > x_0 \\ &&& |g(x)| \le c \cdot |f(x)| \bigr\} \quad \text{при}~ x \to \oo }

Об обозначениях

Поскольку O(f(x))O \bigl( f(x) \bigr) (можно любой символ Ландау вставить) формально является множеством, корректно было бы говорить о принадлежности функций классу, то есть писать g(x)O(f(x))g(x) \in O \bigl( f(x) \bigr) вместо g(x)=O(f(x))g(x) = O \bigl( f(x) \bigr).

Никто не пишет \in, если речь идет о символах Ландау. Ну так исторически сложилось. Но вот

g(x)=O(f(x))всегда означаетg(x)O(f(x))g(x) = O \bigl( f(x) \bigr) \quad\text{всегда означает}\quad g(x) \in O \bigl( f(x) \bigr)

Свойства символов Ландау

Функция принадлежит своему OO-большому. Также работает для остальных символов, кроме oo-малого.

f(x)=O(f(x))f(x) = O \big( f(x) \bigr)

Константы, как внутренние, так и внешние, не влияют на класс. Работает для всех символов.

O(af(x))=O(f(x))иaO(f(x))=O(f(x))при a0O \bigl( a \cdot f(x) \bigr) = O \bigl( f(x) \bigr) \quad\text{и}\quad a \cdot O \bigl( f(x) \bigr) = O \bigl( f(x) \bigr) \qquad\text{при}~ a \neq 0

При сложении результат не выходит из класса. Также работает для Θ\Theta и oo, но не работает для Ω\Omega.

O(f(x))+O(f(x))=O(f(x))O \bigl( f(x) \bigr) + O \bigl( f(x) \bigr) = O \bigl( f(x) \bigr)

Операция взятия OO-большого идемпотентна. Аналогично для остальных.

O(O(f(x)))=O(f(x))O \Bigl( O \bigl( f(x) \bigr) \Bigr) = O \bigl( f(x) \bigr)

Функции-множители можно безболезненно вносить и выносить из знака OO-большого, oo-малого, Θ\Theta, но не всегда из Ω\Omega.

f(x)O(g(x))=O(f(x)g(x))=O(f(x))O(g(x))f(x) \cdot O \bigl( g(x) \bigr) = O \bigl( f(x) \cdot g(x) \bigr) = O \bigl( f(x) \bigr) \cdot O \bigl( g(x) \bigr)

Как следствие, любой класс выразим через O(1)O(1).

O(f(x))=f(x)O(1)O \bigl( f(x) \bigr) = f(x) \cdot O(1)

Операция взятия OO-большого транзитивна. Выполняется и для остальных, но для Ω\Omega зависит от знака.

f(x)=O(g(x)),g(x)=O(h(x))    f(x)=O(h(x))f(x) = O\bigl(g(x)\bigr), g(x) = O\bigl(h(x)\bigr) \implies f(x) = O\bigl(h(x)\bigr)

Применение символов Ландау

Из асимптотической формулы не следует сходимость (ряда или интеграла).

Например, асимптотические формулы, выражающие восходящую и нисходящую степени числа nn

nr=k=0m[rrk]nrk+O(nrm1)nr=k=0m(1)k[rrk]nrk+O(nrm1)\align{ n^{\overline{r}} &= \sum\limits_{k=0}^m \stirlI{r}{r-k} \, n^{r-k} + O (n^{r-m-1}) \\ n^{\underline{r}} &= \sum\limits_{k=0}^m (-1)^k \, \stirlI{r}{r-k} \, n^{r-k} + O (n^{r-m-1}) \\ }

Обе асимптотические формулы верны для любого действительного rr и любого фиксированного целого m>0m > 0. Однако, сумма

k=0[1/21/2k]n1/2k\sum\limits_{k=0}^\oo \stirlI{1/2}{1/2 - k} \, n^{1/2 - k}

расходится для всех nn несмотря на то, что n1/2m10n^{1/2-m-1} \to 0 при mm \to \oo.

Так что нельзя путать аппроксимацию с пределом. Асимптотический ряд — это не бесконечная сумма, стремящаяся к точному значению, а последовательность всё более точных приближений.

Символы Ландау можно использовать также и для вывода каких-то соотношений. Например, используя формулу Тейлора для exe^x, можем провести следующие интересные манипуляции

nn=elnn/n=1+lnn/n+O((lnn/n)2)\sqrt[n]{n} = e^{\ln n / n} = 1 + \ln n / n + O \bigl( (\ln n / n)^2 \bigr)

Формулу Тейлора мы имели право применить потому что lnn/n0\ln n / n \to 0 при nn \to \oo.

Из этого равенства можно вывести, например, что n(nn1)lnnn \cdot \bigl( \sqrt[n]{n} - 1 \bigr) \approx \ln n:

n(nn1)=n(lnn/n+O((lnn/n)2))=lnn+O((lnn)2/n)n \cdot \bigl( \sqrt[n]{n} - 1 \bigr) = n \cdot \Bigl( \ln n / n + O \bigl( (\ln n / n)^2 \bigr) \Bigr) = \ln n + O \bigl( (\ln n)^2 / n \bigr)

Иерархия

Доминирование

Говорят "Функция ff доминирует над функцией gg" и обозначают f(x)g(x)f(x) \succ g(x), если

f(x)g(x)    limxag(x)f(x)=0    g(x)=o(f(x))f(x) \succ g(x) \iff \lim\limits_{x \to a} \frac{g(x)}{f(x)} = 0 \iff g(x) = o\bigl(f(x)\bigr)

Здесь выполняется транзитивность, а значит мы можем расставить множество функций по порядку их роста. Например:

1loglogxlogxxcxlogxcxxx1 \prec \log\log x \prec \log x \prec x^c \prec x^{\log x} \prec c^x \prec x^x

Эквивалентность

Функции ff и gg называют эквивалентными и обозначают f(x)g(x)f(x) \sim g(x), если

f(x)g(x)    limxaf(x)g(x)=1    f(x)=g(x)+o(g(x))f(x) \sim g(x) \iff \lim\limits_{x \to a} \frac{f(x)}{g(x)} = 1 \iff f(x) = g(x) + o\bigl(g(x)\bigr)

Это очень помогает нам при подсчёте пределов, так как эквивалентные функции можно заменять друг на друга без потери точности.

Таковыми являются, например, sin(x)sin(x) и xx при очень маленьких xx.

Асимптотика в анализе алгоритмов

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

Намного лучше мы поступим, если посмотрим на код программы и посчитаем, сколько раз будет выполняться основная операция (В сортировках — сравнения, в вычислениях — арифметические операции и т.д.). Но тут можно сильно закопаться, так как зачастую количество сильно зависит от входных данных, а они бывают очень разными. Тогда придётся смотреть на их распределение, находить самый лучший случай, самый худший, средний, отклонение от среднего. Это полезно и даже необходимо, когда нам нужно сравнить два алгоритма примерно одинаковой сложности, но не всегда нужно и не всегда стоит затраченных усилий.

Тут нам на выручку приходят символы Ландау. Они дают понимание того, как алгоритм поведёт себя при росте размерности данных и позволяют описывать алгоритм не в терминах точного количества операций, а в терминах класса роста этого количества.

Асимптотика в анализе рядов и интегралов

Допустим нам нужно посчитать какой-то интеграл, но функция внутри нам очень очень не нравится. Мы можем ассимптотически свести к чему-то попроще и посчитать с какой-то точностью.

Ассимптотические оценки интегралов

Пусть функции f(x)f(x) и g(x)g(x) непрерывны, g(x)>0g(x) > 0 при a<x<ba < x < b и

x0bg(x)dx=+\int\limits_{x_0}^b g(x)dx = +\oo
где a<x0<ba < x_0 < b. Тогда если f(x)=O(g(x))f(x) = O\bigl(g(x)\bigr) при xbx \to b, то

xbf(x)dx=O(xbg(x)dx)при xb\int\limits_x^b f(x)dx = O\left(\int\limits_x^b g(x)dx\right) \quad \text{при}~ x \to b

Для f(x)=o(g(x))f(x) = o\bigl(g(x)\bigr) при xbx \to b рассуждения аналогичны, но символ OO заменяется на oo.

В случае, если f(x)g(x)f(x) \sim g(x), можно сказать

xbf(x)dx xbg(x)dxпри xb\int\limits_x^b f(x)dx~ \sim \int\limits_x^b g(x)dx \quad \text{при}~ x \to b

А что, если нам известна только асимтотическая оценка функции на бесконечности? Можем асимптотически оценить её интеграл.

Асимтотическая оценка интеграла по асимптотике функции

Если f(x)=O(xa)f(x) = O(x^a) при x+x \to +\oo, то

0xf(t)dt={O(xa+1)при a>1O(lnx)при a=1\int\limits_0^x f(t)dt = \cases{O\left(x^{a+1}\right) \quad \text{при}~ a > -1 \\ O\left(\ln x\right) \quad \text{при}~ a = -1 }

Если f(x)xaf(x) \sim x^a при x+x \to +\oo, то

0xf(t)dt{xa+1/a+1при a>1lnxпри a=1\int\limits_0^x f(t)dt \sim \cases{x^{a+1}/a+1 \quad \text{при}~ a > -1 \\ \ln x \quad \text{при}~ a = -1 }
xf(t)dtxa+1a+1при a<1\int\limits_{\oo}^x f(t)dt \sim \frac{x^{a+1}}{a+1} \quad \text{при}~ a < -1

Например для f(x)=x+1/x=O(x1/2)f(x) = \sqrt{x} + 1/x = O\left(x^{1/2}\right) будем иметь 0xf(t)dt=O(x3/2)\int\limits_0^x f(t) \, dt = O\left(x^{3/2}\right)

Бывают также и ситуации, когда мы хотим уточнить асимптотику сходящегося интеграла или оценить сумму ряда. Для такого существуют асимптотические выражения, позволяющие перейти от суммы к интегралу и от интеграла к сумме.

Переход от суммы к интегралу и наоборот

Пусть f(x)=k=2nakxk+O(xn1)f(x) = \sum\limits_{k=2}^n a_k \, x^{-k} + O\left(x^{-n-1}\right) при x+x \to +\oo, тогда

xf(t)dt=k=2nak(k1)xk1+O(xn)\int\limits_x^{\oo}f(t) \, dt = \sum\limits_{k=2}^n \frac{a_k}{(k-1) \, x^{k-1}} + O\left(x^{-n}\right)

Пусть f(x)f(x) непрерывна, положительна и монотонна при x0x \ge 0, тогда

k=0nf(k)=0nf(x)dx+O(f(n+1))+O(1)при x\sum\limits_{k=0}^n f(k) = \int\limits_0^n f(x) \, dx + O\bigl(f(n+1)\bigr) + O(1) \quad \text{при}~ x \to \oo

Например, пусть

f(x)=1/x22/x3+O(1/x4)f(x) = 1/x^2 - 2/x^3 + O\left(1/x^4\right)

тогда

xf(t)dt=1x1x2+O(1x3)\int\limits_x^{\oo} f(t) \, dt = \frac{1}{x} - \frac{1}{x^2} + O\left(\frac{1}{x^3}\right)

Или другой пример, который был упомянут в самом начале.

Пусть

f(x)=1xf(x) = \frac{1}{x}

Тогда

k=1n1k=lnn+O(1n)+O(1)=lnn+γ+O(1n)\sum\limits_{k=1}^n \frac{1}{k} = \ln n + O\left(\frac{1}{n}\right) + O(1) = \ln n + \gamma + O\left(\frac{1}{n}\right)

Реккурентные соотношения

В анализе асимптотики многих алгоритмов возникают реккурентные соотношения. Например, в бинарном поиске на отсортированном массиве общее время работы будет зависеть от времени работы поиска в половине массива T(n)=T(n/2)+O(1)T(n) = T(n/2) + O(1), которое, в свою очередь, будет зависеть от времени работы в четверти массива и так далее. Чтобы выяснить, какую асимптотику имеет время работы такого алгоритма, нам нужно уметь решать реккурентные соотношения.

Основная теорема о реккурентных соотношениях

Пусть

T(n)=aT(nb)+O(nc)T(n) = a \, T\Bigl(\frac{n}{b}\Bigr) + O(n^c)
где aNa \in \NN, bRb \in \RR, b>1b > 1, c0c \ge 0. Тогда
T(n)={O(nc)приc>logbaO(nclogn)приc=logbaO(nlogba)приc<logbaT(n) = \cases{ O(n^c) \? \text{при} \? c > \log_b a \\ O(n^c \, \log n) \? \text{при} \? c = \log_b a \\ O(n^{\log_b a}) \? \text{при} \? c < \log_b a }

Посмотрим на изначальное соотношение. Если будем расписывать его дерево рекурсии, то в нём будет logbn\log_b n уровней. На каждом уровне количество вершин в дереве будет умножаться на aa, так на уровне ii будет aia^i детей. Известно, что каждый ребёнок ii будет размера n/bin/b^i и потребует O((n/bi)c)O\left((n/b^i)^c\right) дополнительных действий. Следовательно, общее количество операций на уровне ii равно

O(ai(nbi)c)=O(nc(abc)i)O\biggl(a^i \, \Bigl(\frac{n}{b^i}\Bigr)^c\biggr) = O\biggl(n^c \, \Bigl(\frac{a}{b^c}\Bigr)^i\biggr)

Заметим, что количество операций на уровне зависит от величины a/bca/b^c. Если эта величина больше единицы, то количество операций растёт, если меньше — убывает, а если равно единице — остаётся постоянным.

Поэтому рассмотрим три случая: a/bc>1a/b^c > 1, a/bc=1a/b^c = 1 и a/bc<1a/b^c < 1. Из второго получаем: logba=c\log_b a = c.

Общее число операций складывается из числа операций на каждом уровне рекурсии:

T(n)=i=0logbnO(nc(abc)i)+O(1)=O(nci=0logbn(abc)i)T(n) = \sum\limits_{i=0}^{\log_b n} O\left(n^c \, \left(\frac{a}{b^c}\right)^i\right) + O(1) = O\left(n^c \, \sum\limits_{i=0}^{\log_b n} \left(\frac{a}{b^c}\right)^i\right)

Из этого получаем три случая.

Случай c>logbac > \log_b a. Тогда a/bc<1a/b^c < 1, и геометрическая прогрессия убывает:

T(n)=O(nc)T(n) = O(n^c)

Случай c=logbac = \log_b a. Тогда a/bc=1a/b^c = 1, и сумма превращается в logbn\log_b n одинаковых слагаемых:

T(n)=nci=0logbn1=nc+nclogbn=O(nclogn)T(n) = n^c \, \sum\limits_{i=0}^{\log_b n} 1 = n^c + n^c \, \log_b n = O(n^c \, \log n)

Случай c<logbac < \log_b a. Тогда a/bc>1a/b^c > 1, и геометрическая прогрессия растёт:

T(n)=O(nc(abc)logbn)=O(nlogba)T(n) = O\left(n^c \, \left(\frac{a}{b^c}\right )^{\log_b n}\right) = O\left(n^{\log_b a}\right)

Исчисление сумм

Метод суммирования Эйлера

Одним из самых крутых, методов получение приближённых значений сумм является метод суммирования Эйлера. Идея метода — аппроксимировать сумму интегралом.

Вот пусть нам надо найти значение суммы k=1n1f(k)\sum\limits_{k=1}^{n-1} f(k). Попытаемся аппроксимировать эту сумму интегралом 1nf(x)dx\int\limits_1^n f(x) \, dx.

kk+1(xmod11/2)f(x)dx=f(k+1)f(k)2kk+1f(x)dx\int\limits_k^{k+1} (x \bmod 1 - 1/2) \, f'(x) \, dx = \frac{f(k+1) - f(k)}{2} - \int\limits_{k}^{k+1} f(x) \, dx

Сложим это равенство при всех kk от 11 до n1n-1. Получим

1n(xmod11/2)f(x)dx=1   ⁣   ⁣k<nf(k)+f(n)f(1)21nf(x)dx\int\limits_1^n (x \bmod 1 - 1/2) \, f'(x) \, dx = \sum\limits_{1 \;\! \le \;\! k < n} f(k) + \frac{f(n) - f(1)}{2} - \int\limits_{1}^n f(x) \, dx

Теперь мы можем выразить сумму

k=1n1f(k)=1nf(x)dxf(n)f(1)2+1nB1(xmod1)f(x)dx\sum\limits_{k=1}^{n-1} f(k) = \int\limits_1^n f(x) \, dx - \frac{f(n) - f(1)}{2} + \int\limits_1^n B_1(x \bmod 1) \, f'(x) \, dx

где B1(y)B_1(y) — многочлен B1(y)=y1/2B_1(y) = y - 1/2. В обозначениях спойлер: тут появятся многочлены Бернулли.

Продолжая интегрировать по частям мы будем получать всё более и более точные формулы.

Посмотрим на многочлены Бернулли. Вспомним рекуррентное дифференциальное соотношение

Bm(x)=mBm1(x)B_m'(x) = m \cdot B_{m-1} (x)

Используя это свойство получим полезную формулу для того оценочного интеграла, проинтегрировав по частям

1m!1nBm(xmod1)f(m)(x)dx=1(m+1)!(Bm+1(1)f(m)(n)Bm+1(0)f(m)(1))1(m+1)!1nBm+1(xmod1)f(m+1)(x)dx\align{ \frac{1}{m!} \int\limits_1^n B_m (x \bmod 1) \, f^{(m)}(x) \, dx &= \frac{1}{(m+1)!} \bigl( B_{m+1} (1) \, f^{(m)}(n) - B_{m+1} (0) \, f^{(m)}(1) \bigr) - \\ & - \frac{1}{(m+1)!} \int\limits_1^n B_{m+1} (x \bmod 1) \, f^{(m+1)} (x) \, dx }

Используя эту формулу мы можем улучшить оценку суммы, и делать это до такого порядка, до какого захотим.

k=1n1f(k)=1nf(x)dx12(f(n)f(1))+B22!(f(n)f(1))+B44!(f(3)(n)f(3)(1))+++(1)mBmm!(f(m1)(n)f(m1)(1))+Rm, n==1nf(x)dx+j=1mBjj!(f(j1)(n)f(j1)(1))+Rm, n\align{ \sum\limits_{k=1}^{n-1} f(k) &= \int\limits_1^n f(x) \, dx - \frac{1}{2} \bigl( f(n) - f(1) \bigr) + \frac{B_2}{2!} \bigl( f'(n) - f'(1) \bigr) + \frac{B_4}{4!} \bigl( f^{(3)}(n) - f^{(3)}(1) \bigr) + \dotsb + \\ &+ \frac{(-1)^m \, B_m}{m!} \bigl( f^{(m-1)} (n) - f^{(m-1)} (1) \bigr) + R_{m,~ n} = \\ &= \int\limits_1^n f(x) \, dx + \sum\limits_{j=1}^m \frac{B_j}{j!} \bigl( f^{(j-1)} (n) - f^{(j-1)} (1) \bigr) + R_{m,~ n} }

где Rm, nR_{m,~ n} — остаточный член, представимый как поправка

Rm, n=(1)m+1m!1nBm(xmod1)f(m)(x)dxR_{m,~ n} = \frac{(-1)^{m+1}}{m!} \int\limits_1^n B_m( x \bmod 1 ) \, f^{(m)} (x) \, dx

Этот остаточный член мал при очень маленьких значениях Bm(xmod1)f(m)(x)/m!B_m (x \bmod 1) \, f^{(m)} (x) / m!. Фактически, для чётного mm

Bm(xmod1)m!Bmm!<4(2π)m\left| \frac{B_m (x \bmod 1)}{m!} \right| \le \frac{|B_m|}{m!} < \frac{4}{(2\pi)^m}

К сожалению, часто бывает, что при увеличении mm функция f(m)(x)f^{(m)} (x) возрастает по модулю. Существует «наилучшее» значение mm, при котором Rm, n|R_{m,~ n}| минимален, то есть такое mm, при котором неприятный остаточный член вносит минимум путаниц в формулу суммы. Оценивать остаток можно следующим методом:

При чётном mm и при условии, что f(m)(x)f^{(m)} (x) имеет постоянный знак для всех 1<x<n1 < x < n, значение остаточного члена по модулю не превосходит значения последнего вычисленного члена, то есть

Rm, n   ⁣   ⁣(1)mBmm!(f(m1)(n)f(m1)(1))|R_{m,~ n}| \;\! \le \;\! \left| \frac{(-1)^m \, B_m}{m!} \bigl( f^{(m-1)} (n) - f^{(m-1)} (1) \bigr) \right|

Существует и более мощное утверждение, накладывающее не такие сильные ограничения на функцию. При чётном mm и при условии, что f(m+2)(x)f(m+4)(x)>0f^{(m+2)} (x) \, f^{(m+4)} (x) > 0 для всех 1<x<n1 < x < n, существует такая константа 0<θ<10 < \theta < 1, что

Rm, n=θBm+2(m+2)!(f(m+1)(n)f(m+1)(1))R_{m,~ n} = \theta \cdot \frac{B_{m+2}}{(m+2)!} \, \bigl( f^{(m+1)} (n) - f^{(m+1)} (1) \bigr)

Тогда получаем

Rm, n   ⁣   ⁣Bm+2(m+2)!f(m+1)(n)f(m+1)(1)|R_{m,~ n}| \;\! \le \;\! \frac{|B_{m+2}|}{(m+2)!} \, \left| f^{(m+1)} (n) - f^{(m+1)} (1) \right|

Формула суммирования Эйлера

...

Получение формулы Стирлинга

Применим метод суммирования Эйлера для получение приближённой формулы Стирлинга. Пусть f(x)=lnxf(x) = \ln x. Применим формулу суммирования Эйлера, получим

ln (n1)!=nlnnn+112lnn+k   ⁣=   ⁣2m(1)kBkk(k1)(1nk11)+Rm, n\ln~ (n-1)! = n \ln n - n + 1 - \frac{1}{2} \ln n + \sum\limits_{k \;\! = \;\! 2}^{m} \frac{(-1)^k \, B_k}{k \, (k-1)} \cdot \left( \frac{1}{n^{k-1}} - 1 \right) + R_{m,~ n}

Обратите внимание: мы аппроксимировали сумму k=1n1lnk=ln (n1)!\sum\limits_{k=1}^{n-1} \ln k = \ln~ (n-1)! интегралом 1nlnxdx=nlnnn+1\int\limits_1^n \ln x \, dx = n \ln n - n + 1.

Раскрывая скобки в сумме получаем, два ряда, один из которых сходится к какой-то константе σ\sigma:

limn(ln (n1)!nlnnn12lnn)=1+k=2m(1)kBkk(k1)+limnRm, n=σ\lim\limits_{n \to \oo} \left( \ln~ (n-1)! - n \ln n - n - \frac{1}{2} \ln n \right) = 1 + \sum\limits_{k=2}^m \frac{(-1)^k \, B_k}{k \, (k-1)} + \lim\limits_{n \to \oo} R_{m,~ n} = \sigma

Подставив этот результат в исходную формулу, получим логарифм формулы Стирлинга

ln (n1)!=(n12)lnnn+σ+k   ⁣=   ⁣2m(1)kBkk(k1)nk1+O(1nm)\ln~ (n-1)! = \left( n - \frac{1}{2} \right) \cdot \ln n - n + \sigma + \sum\limits_{k \;\! = \;\! 2}^{m} \frac{(-1)^k \, B_k}{k \, (k-1) \, n^{k-1}} + O \left( \frac{1}{n^m} \right)

Потенцируя, и используя то, что eσ=2πe^\sigma = \sqrt{2\pi}, получаем формулу Стирлинга

n!=2πn(ne)nexp(k   ⁣=   ⁣2m(1)kBkk(k1)nk1+O(1nm))n! = \sqrt{2\pi} \, \sqrt{n} \, \left( \frac{n}{e} \right)^n \cdot \exp \left( \sum\limits_{k \;\! = \;\! 2}^{m} \frac{(-1)^k \, B_k}{k \, (k-1) \, n^{k-1}} + O \left( \frac{1}{n^m} \right) \right)

Обрубив ряд где нам нужно и разложив экспоненту в ряд, мы сможем добиться любой желаемой точности.

Факториальные суммы

Исследуем следующие суммы

P(n)=k=0n(nk)k(nk)!n!=1+n1n+(n2)2n(n1)+(n3)3n(n1)(n2)+Q(n)=k=1nn!(nk)!nk=1+n1n+n1nn2n+R(n)=k=0n!nk(n+k)!=1+nn+1+nn+1nn+2+\alignat{2}{ P(n) &= \sum\limits_{k=0}^n \frac{(n-k)^k \, (n-k)!}{n!} &&= 1 + \frac{n-1}{n} + \frac{(n-2)^2}{n \, (n-1)} + \frac{(n-3)^3}{n \, (n-1) \, (n-2)} + \dotsb \\ Q(n) &= \sum\limits_{k=1}^n \frac{n!}{(n-k)! \, n^k} &&= 1 + \frac{n-1}{n} + \frac{n-1}{n} \frac{n-2}{n} + \dotsb \\ R(n) &= \sum\limits_{k=0}^\oo \frac{n! \, n^k}{(n+k)!} &&= 1 + \frac{n}{n+1} + \frac{n}{n+1} \frac{n}{n+2} + \dotsb }

Начнём с важной связи между Q(n)Q(n) и R(n)R(n)

Q(n)+R(n)=n!nn((1+n+n22++nn1(n1)!)+(nnn!+nn+1(n+1)!+))=n!ennnQ(n) + R(n) = \frac{n!}{n^n} \Biggl( \left( 1 + n + \frac{n^2}{2} + \dotsb + \frac{n^{n-1}}{(n-1)!} \right) + \left( \frac{n^n}{n!} + \frac{n^{n+1}}{(n+1)!} + \dotsb \right) \Biggr) = \frac{n! \, e^n}{n^n}

Вспомним формулу Тейлора с остаточным членом в интегральной форме

f(x)=f(0)+f(0)x+f(0)2x2++f(n)n!xn+0xf(n+1)(0)n!tn(xt)dtf(x) = f(0) + f'(0) \cdot x + \frac{f''(0)}{2} \cdot x^2 + \dotsb + \frac{f^{(n)}}{n!} \cdot x^n + \int\limits_0^x \frac{f^{(n+1)}(0)}{n!} \cdot t^n \, (x-t) \, dt

Посмотрим на неполную гамма-функцию и её свойства, связанные с P(n)P(n), Q(n)Q(n) и R(n)R(n). Напомню, что неполная гамма-функция это

γ(a,x)=0xetta1dtпри a>0\gamma(a, x) = \int\limits_0^x e^{-t} \, t^{a-1} \, dt \quad\text{при}~ a > 0

Мы будем часто использовать то, что γ(a,)=Γ(a)\gamma(a, \oo) = \Gamma(a).

Для неполной гамма-функции существует два полезных разложения в ряд по степеням xx

γ(a,x)=k=0(1)kxk+ak!(k+a)=xaaxa+1a+1+xa+22!(a+2)xa+33!(a+3)+exγ(a,x)=k=0xa+kak+1=xaa+xa+1a(a+1)+xa+2a(a+1)(a+2)+xa+3a(a+1)(a+2)(a+3)+\alignat{2}{ \gamma(a, x) &= \sum\limits_{k=0}^\oo \frac{(-1)^k \, x^{k+a}}{k! \, (k+a)} &&= \frac{x^a}{a} - \frac{x^{a+1}}{a+1} + \frac{x^{a+2}}{2! \, (a+2)} - \frac{x^{a+3}}{3! \, (a+3)} + \dotsb \\ e^x \cdot \gamma(a, x) &= \sum\limits_{k=0}^\oo \frac{x^{a+k}}{a^{\overline{k+1}}} &&= \frac{x^a}{a} + \frac{x^{a+1}}{a \, (a+1)} + \frac{x^{a+2}}{a \, (a+1) \, (a+2)} + \frac{x^{a+3}}{a \, (a+1) \, (a+2) \, (a+3)} + \cdots }

Из второй формулы видна связь с R(n)R(n):

R(n)=n!ennnγ(n,n)(n1)!R(n) = \frac{n! \, e^n}{n^n} \cdot \frac{\gamma(n, n)}{(n-1)!}

Данное равенство специально было записано в более сложном виде, чем это необходимо, так как неполная гамма-функция γ(n,n)\gamma(n, n) является частью полной гамма-функции γ(n,)=Γ(n)=(n1)!\gamma(n, \oo) = \Gamma(n) = (n-1)!, а n!en/nnn! \, e^n / n^n — величина R(n)+Q(n)R(n) + Q(n).

Получается, задача анализа сумм P(n)P(n), Q(n)Q(n) и R(n)R(n) сводится к нахождению хороших оценок для γ(n,n)/(n1)!\gamma(n, n)/(n-1)!.

Определим приближённое значение γ(x+1,x+y)/Γ(x+1)\gamma(x+1, x+y)/\Gamma(x+1) для фиксированного yy и больших xx. По определению имеем

γ(x+1,x+y)Γ(x+1)=1Γ(x+1)0x+yettxdt=11Γ(x+1)xettxdt+1Γ(x+1)xx+yettxdt\frac{\gamma(x+1, x+y)}{\Gamma(x+1)} = \frac{1}{\Gamma(x+1)} \int\limits_0^{x+y} e^{-t} \, t^x \, dt = 1 - \frac{1}{\Gamma(x+1)} \int\limits_x^\oo e^{-t} \, t^x \, dt + \frac{1}{\Gamma(x+1)} \int\limits_x^{x+y} e^{-t} \, t^x \, dt

Оценим оба интеграла.

Начнём с первого. Выполним замену t=(1+x)ut = (1+x) \, u, тогда пределы интегрирования станут [0,+)[0, +\oo)

Асимптотическое поведение неполной гамма-функции

Для фиксированного yy и больших значений xx имеем

γ(x+1,x+y)Γ(x+1)=12+(y2/32π)x1/2+12π(23270y12y36)x3/2+O(x5/2)\frac{\gamma(x+1, x+y)}{\Gamma(x+1)} = \frac{1}{2} + \left( \frac{y - 2/3}{\sqrt{2\pi}} \right) \cdot x^{-1/2} + \frac{1}{\sqrt{2\pi}} \cdot \left( \frac{23}{270} - \frac{y}{12} - \frac{y^3}{6} \right) \cdot x^{-3/2} + O (x^{-5/2})

Упражнения

    1

    Какая из функций растет быстрее:

    • nlnnn^{\ln n} или (lnn)n(\ln n)^n?

    • nlnlnlnnn^{\ln \ln \ln n} или (lnn)n!(\ln n)^{n!}?

    2

    Вычислите (lnn+γ+O(1/n))(n+O(n))\bigl( \ln n + \gamma + O(1/n) \bigr) \cdot \bigl( n + O(\sqrt{n}) \bigr)

    3

    Докажите, что cosO(x)1+O(x2)\cos O(x) \subset 1 + O \bigl( x^2 \bigr) для всех xRx \in \RR

    4

    Докажите, что Hn=lnn+γ+1/2n+O(1/n2)H_n = \ln n + \gamma + 1/2n + O \bigl( 1/n^2 \bigr) при nn \to \oo

    5

    Пусть an=O(na)a_n = O \bigl( n^{-a} \bigr) и bn=O(na)b_n = O \bigl( n^{-a} \bigr) при a>1a > 1. Докажите, что свёртка k=0nakbnk=O(na)\sum\limits_{k=0}^n a_k \cdot b_{n-k} = O \bigl( n^{-a} \bigr).

    6

    Чему равно приближённое значение 112233nn1^1 \cdot 2^2 \cdot 3^3 \dotsm n^n?