Мы используем в выражениях разные математические функции: \(\sin(x)\), \(\arccos(x)\), \(\ln(x)\), \(e^x\) и так далее. При этом всегда подразумевается, что при необходимости мы всегда сможем их вычислить. А что тут сложного? Берешь калькулятор и считаешь. Но не всегда калькулятор сможет ответить всем запросам, да и само по себе определение функций не всегда позволяет делать все что захочется.
Так как производная несет о функции определенную информацию, то с ее помощью оказывается возможным представлять функцию в окрестности нужной нам точки.
Сначала рассмотрим многочлен \[f(x) = a_n
x^n + a_{n-1} x^{n-1} + \ldots + a_1 x + a_0\] Если вычислить все
его производные, то получится выразить его коэффициенты:
\(f'(0) = a_1\),
\(f''(0) = 2 \cdot a_2\),
\(f'''(0) = 2 \cdot 3 \cdot
a_3\), …
\(f^{(n-1)}(0) = 2 \cdot 3 \cdot \ldots \cdot
(n-1) \cdot a_{n-1}\),
\(f^{(n)}(0) = 2 \cdot 3 \cdot \ldots \cdot
(n-1) \cdot n \cdot a_n\).
Отсюда \[a_k = \frac{f^{(k)}(0)}{k!}\]
где \(f^{(k)}(0)\) - \(k\)-ая производная \(f\) в точке \(x=0\): \[f(x) =
f(0) + f'(0)x + \frac{f''(0)}{2!}x^2 + \ldots +
\frac{f^{(n)}(0)}{n!}x^n\]
Если перейти в этой записи к другой переменной \(t = x + x_0\), то можно записать это
выражение в более общем виде:
подставляем \(x = t - x_0\) и учитываем
\(f'(t) = f'(x)\), \[f(t) = f(x_0) + f'(x_0)(t-x_0) +
\frac{f''(x_0)}{2!}(t-x_0)^2 + \ldots +
\frac{f^{(n)}(x_0)}{n!}(t-x_0)^n\] (но вместо \(t\) дальше используем старое обозначение
\(x\))
В случае когда \(f\) - произвольная функция, имеющая нужное количество производных в точке, эта запись дает многочлен, который в точке \(x_0\) имеет те же значения производных и то же значение, что и сама функция \(f\).
\[P_n(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 + \ldots + \frac{f^{(n)}(x_0)}{n!}(x-x_0)^n\]
Это выражение называется формулой Тейлора для функции \(f\) в точке \(x_0\).
Формула Тейлора \(P_n\) в близи точки \(x_0\) обладает похожим с функцией \(f\) поведением (в частности, имеет такие же производные).
Чтобы это показать, рассмотрим разность \(R(x) = f(x) - P_n(x)\), которая называется остаточным членом для этой формулы.
Говорят, что функция \(u(x)\) является в точке \(x_0\) бесконечно малой по сравнению с функцией \(v(x)\), когда \(\lim\limits_{x \to x_0} \frac{u(x)}{v(x)} = 0\); записывают это так: \(u(x) = o(v(x))\) при \(x \to x_0\).
Так вот, утверждается, что остаточный член \(R(x)\) формулы Тейлора есть \(o((x-x_0)^n)\), то есть бесконечно малая более высокого порядка по отношению к \((x-x_0)^n\) (которая в свою очередь стремится к нулю быстрее чем \((x-x_0)\)).
Действительно, по условию равенства производных в точке \(x_0\): \(R(x_0) = R'(x_0) = R''(x_0) = \ldots = R^{(n)}(x_0) = 0\).
Поэтому сразу имеем \(\lim\limits_{x \to x_0} \frac{R(x)}{x-x_0} = \lim\limits_{x \to x_0} \frac{R(x)-R(x_0)}{x-x_0} = R'(x_0) = 0\) или \(R(x) = o(x-x_0)\). Кроме того, аналогично, \(\lim\limits_{x \to x_0} \frac{R^{(k)}(x)}{x-x_0} = \lim\limits_{x \to x_0} \frac{R^{(k)}(x)-R^{(k)}(x_0)}{x-x_0} = R^{(k+1)}(x_0) = 0\) или \(R^{(k)}(x) = o(x-x_0)\) для всех порядков \(k < n\).
Теперь будем рассматривать производные \(R\) от порядка \(n-2\) до нулевого (самой \(R\)). По теореме о среднем значении производной \[R^{(n-2)}(x) = R^{(n-2)}(x) - R^{(n-2)}(x_0) = R^{(n-1)}(c)(x-x_0)\] для некоторой точки \(c\) (лежащей между \(x\) и \(x_0\) и зависящей от \(x\), т.е. \(c=c(x)\) и \(|c-x_0| < |x-x_0|\)). Но \(R^{(n-1)}(c) = o(c-x_0) = o(x-x_0)\), и значит \[R^{(n-2)}(x) = o(x-x_0) \cdot (x-x_0) = o((x-x_0)^2)\] По аналогии, рассматривая \(R^{(n-3)}(x)\) получим \(o((x-x_0)^3)\). И так далее, вплоть до \(R(x) = o((x-x_0)^n)\), что и требовалось.
Теперь формулу Тейлора можно выписать с остаточным членом: \[P_n(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 + \ldots + \frac{f^{(n)}(x_0)}{n!}(x-x_0)^n + o((x-x_0)^n)\] при \(x \to x_0\).
Остаточный член для формулы Тейлора может быть записан и в более подробной форме; а вид \(o((x-x_0)^n)\) называется остаточным членом в форме Пеано.
При \(k=2m\): \(f^{(2m)}(0) = 0\); при \(k=2m-1\): \(f^{(2m-1)}(0) = (-1)^{m-1}\). Получаем \[\sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \ldots + (-1)^{m-1} \frac{x^{2m-1}}{(2m-1)!} + o(x^{2m})\]
При \(k=2m\): \(f^{(2m)}(0) = (-1)^{m}\); при \(k=2m-1\): \(f^{(2m-1)}(0) = 0\). Получаем \[\cos(x) = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \ldots + (-1)^{m} \frac{x^{2m}}{(2m)!} + o(x^{2m+1})\]
Программные компьютерные реализации могут использовать формулу Тейлора. Тем временем при необходимости низкоуровневой реализации быстрых вычислений применяется другой подход.
Простым и быстрым алгоритмом вычисления является метод CORDIC (coordinate rotation digital computer).
В основе метода лежит следующая идея. При вычислении функции \(f(x)\) ее аргумент \(x\) будет изменяться с помощью небольших заранее выбранных констант, для которых нам будет известно как меняется значение функции. Цель таких изменений - приблизить аргумент к “хорошему” значению (0 или 1, например): \(f(x) = f(x \cdot c_1) \cdot c_1' = f(x \cdot c_1 \cdot c_2) \cdot c_1' \cdot c_2' = \ldots = f(0) \cdot c_1' \cdot \ldots \cdot c_n'\).