Featured image of post Ряды Тейлора и Маклорена: магия аппроксимации сложных функций полиномами

Ряды Тейлора и Маклорена: магия аппроксимации сложных функций полиномами

Подробное объяснение рядов Тейлора и Маклорена, секретов математического анализа, от интуитивных смыслов до математических выводов и применения в программировании и физике.

Введение

Многочлен Тейлора приближает функцию вблизи точки, совпадая с ней по значению и конечному числу производных в этой точке. Бесконечная сумма, построенная с этими коэффициентами, называется рядом Тейлора; если центр равен нулю, это ряд Маклорена. Сходимость ряда и равенство его суммы исходной функции нужно проверять отдельно.

На примерах показательной и тригонометрических функций разберём определение коэффициентов, условия справедливости равенств и оценку ошибки при обрыве ряда. В конце приведён учебный пример на Python для приближённого вычисления \(\sin x\) около нуля.

Зачем аппроксимировать функции полиномами?

Для начала, зачем вообще нужно представлять функцию в виде полинома ( \(a + bx + cx^2 + \dots\) )?

  flowchart LR
    A["Функция, аналитическая около центра"] -->|"Разложение Тейлора в области сходимости"| B["Степенной ряд"]
    B -->|"Усечение на конечных членах"| C["Полиномиальная аппроксимация"]
    C -->|"Только базовая арифметика"| D["Высокоскоростные вычисления"]

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

Интуитивное понимание ряда Маклорена

Начнём с разложения Маклорена, приближающего функцию вблизи \(x=0\). Предположим, что \(f\) имеет необходимые производные около нуля. Выберем конечную степень \(n\) и определим коэффициенты многочлена \(P_n\):

\[ P_n(x) = c_0 + c_1 x + c_2 x^2 + \dots + c_n x^n \]

Коэффициенты определяются совпадением значения и производных в нуле. Условие на вторую производную ниже применяется при \(n\ge2\).

  1. Условие на значение: Из \(P_n(0)=f(0)\) получаем \(c_0=f(0)\). Постоянный член обеспечивает совпадение значений в нуле.
  2. Условие на первую производную: Из \(P_n'(0)=f'(0)\) получаем \(c_1=f'(0)\). Многочлен \(P_1(x)=f(0)+f'(0)x\) задаёт приближение касательной в нуле.
  3. Условие на вторую производную: Требуем \(P_n''(0)=f''(0)\). Поскольку \(P_n''(0)=2c_2\), имеем \(c_2=f''(0)/2!\). При наличии членов более высокой степени вся производная \(P_n''(x)\) в общем случае не равна постоянной \(2c_2\).
  4. Общее условие: При \(k\le n\) равенство \(P_n^{(k)}(0)=f^{(k)}(0)\) определяет \(c_k=f^{(k)}(0)/k!\). Погрешность около центра оценивается остаточным членом, рассмотренным ниже.

Формула и вывод ряда Маклорена

Если \(f\) бесконечно дифференцируема, эти коэффициенты определяют её ряд Маклорена. Однако для записи равенства с \(f(x)\), как ниже, ряд должен сходиться к \(f(x)\) в рассматриваемой точке. Это верно в подходящей окрестности нуля, если \(f\) там аналитична. Одной бесконечной дифференцируемости недостаточно.

\[ f(x) = f(0) + f'(0)x + \frac{f''(0)}{2!}x^2 + \frac{f^{(3)}(0)}{3!}x^3 + \dots \]

Записанное с использованием обозначения сигма, это выглядит так:

\[ f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(0)}{n!} x^n \]

Здесь \(f^{(n)}(0)\) — значение, полученное путем дифференцирования функции \(f(x)\) \(n\) раз и подстановки \(x=0\), а \(n!\) обозначает факториал \(n\) ( \(n \times (n-1) \times \dots \times 1\) ).

Ряды Маклорена типовых функций

Следующие ряды показательной функции, синуса и косинуса сходятся к соответствующим функциям для всех действительных \(x\). Аргументы тригонометрических функций выражаются в радианах.

1. Показательная функция \(e^x\)

Показательная функция \(f(x)=e^x\) остаётся \(e^x\) после любого числа дифференцирований. Поэтому все её производные в нуле равны \(1\) (\(f^{(n)}(0)=1\)).

\[ e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \dots = \sum_{n=0}^{\infty} \frac{x^n}{n!} \]

2. Тригонометрические функции \(\sin x\) и \(\cos x\)

Последовательные производные \(\sin x\) образуют цикл \(\cos x, -\sin x, -\cos x, \sin x, \dots\). При \(x=0\) только производные нечётного порядка отличны от нуля; производные чётного порядка равны \(0\).

\[ \sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \dots = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n+1)!} x^{2n+1} \]

Аналогично, для \(\cos x\) остаются только члены четных порядков.

\[ \cos x = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \dots = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n)!} x^{2n} \]

Обобщение до ряда Тейлора

Перенос центра из нуля в \(a\) даёт ряд Тейлора. Если \(f\) аналитична около \(a\), следующее равенство справедливо там, где ряд представляет исходную функцию. Приближения, требующие лишь конечного числа производных, рассматриваются с помощью конечного многочлена Тейлора и остаточного члена, приведённых ниже.

\[ f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \dots = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n \]

Эта формула демонстрирует свою мощь, когда вы хотите предсказать значение функции в точке, немного удаленной от \(x=a\) ( \(x = a + \Delta x\) ).

Применение рядов Тейлора

Линейная аппроксимация в физике

В физике часто используют линейное приближение многочленом Тейлора. Для маятника выразим угол \(\theta\) в радианах и предположим \(|\theta|\ll1\). Тогда применимо приближение синуса многочленом первой степени:

\[ \sin \theta \approx \theta \quad (\text{когда } \theta \text{ достаточно мал}) \]

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

Программирование и численные вычисления

Для численного вычисления функций применяются различные методы, в том числе полиномиальные приближения. Модуль math в CPython в основном вызывает математическую библиотеку C платформы; конкретные алгоритмы зависят от реализации. Следующий учебный пример суммирует небольшое число членов около нуля, например при \(|x|\le1\), и не воспроизводит внутреннюю реализацию стандартной библиотеки.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import math

def approx_sin(x, terms=10):
    """
    Учебный пример: конечная сумма Маклорена для sin(x) около нуля
    x: Угол в радианах
    terms: Число суммируемых членов (положительное целое; здесь 10)
    """
    result = 0.0
    for n in range(terms):
        # Вычисление каждого члена: (-1)^n * x^(2n+1) / (2n+1)!
        sign = (-1) ** n
        numerator = x ** (2 * n + 1)
        denominator = math.factorial(2 * n + 1)
        result += sign * (numerator / denominator)
    return result

# Тест: x = 1.0 радиан (около 57.3 градусов)
x_val = 1.0
print(f"Приближенное значение: {approx_sin(x_val)}")
print(f"Значение math.sin (для сравнения): {math.sin(x_val)}")

Радиус сходимости и теорема Тейлора

Радиус сходимости \(R\) — число, задающее расстояние от центра \(a\), внутри которого степенной ряд сходится, то есть \(|x-a|<R\); это не название самого интервала. Возможны также \(R=0\) и \(R=\infty\). Граничные точки \(|x-a|=R\) исследуются отдельно. Например, ряд Маклорена для \(\ln(1+x)\) имеет радиус 1 и равен функции при действительных \(-1<x\le1\). При \(x=1\) он сходится условно, а при \(x=-1\) расходится.

Для конечного приближения предположим, что \(f\) принадлежит классу \(C^{n+1}\) на отрезке, соединяющем \(a\) и \(x\). Тогда теорема Тейлора даёт:

\[ f(x)=P_{n,a}(x)+R_n(x),\qquad P_{n,a}(x)=\sum_{k=0}^{n}\frac{f^{(k)}(a)}{k!}(x-a)^k \]\[ R_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1} \]

Здесь \(\xi\) находится между \(a\) и \(x\). Если на отрезке \(|f^{(n+1)}|\le M\), то \(|R_n(x)|\le M|x-a|^{n+1}/(n+1)!\). Чтобы установить равенство функции её бесконечному ряду Тейлора, можно показать, что этот остаток стремится к нулю при \(n\to\infty\).

Приведённый код суммирует 10 членов, до \(x^{19}\) включительно. Коэффициент при степени 20 у синуса равен нулю, поэтому теорема Тейлора ограничивает погрешность усечения при \(x=1\) величиной \(1/21!\), примерно \(1.96\times10^{-20}\). Эта оценка относится к конечной сумме, вычисленной точно в действительных числах; погрешности округления арифметики Python с плавающей точкой рассматриваются отдельно. Результат math.sin также является значением с плавающей точкой для сравнения, а не точным математическим значением.

Гладкая функция, не представимая своим рядом Тейлора

\[ g(x)=\begin{cases}e^{-1/x},&x>0,\\0,&x\le0.\end{cases} \]

Эта функция бесконечно дифференцируема, и все её производные в нуле равны нулю. Поэтому её ряд Тейлора в нуле тождественно нулевой и сходится при всех \(x\). Но при \(x>0\) имеем \(g(x)>0\), так что сумма ряда не совпадает с исходной функцией. Этот пример различает сходимость ряда и равенство его суммы функции.

Заключение

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

Источники

comments powered by Disqus