Ряды Тейлора: series раскладывает функции

Любую гладкую функцию можно приблизить многочленом — рядом Тейлора. Это то, как калькулятор считает синус, и SymPy строит такие ряды одной командой.

Ряд Тейлора — представление функции в виде суммы степеней (многочлена бесконечной длины), точно приближающее функцию вблизи выбранной точки.

Зачем раскладывать в ряд

Компьютер не умеет считать sin или e^x «напрямую» — он умеет только складывать и умножать. Ряд Тейлора превращает сложную функцию в многочлен, который как раз и состоит из сложений и умножений. Так калькуляторы и процессоры считают тригонометрию, экспоненту, логарифм. А ещё ряды нужны в физике (малые колебания: sin(x) ≈ x), для упрощения уравнений и анализа поведения функций.

Ряд для экспоненты «руками»

Экспонента раскладывается в особенно красивый ряд: e^x = 1 + x + x²/2! + x³/3! + .... Соберём его на чистом Python и сравним с точным значением:

import math

def exp_series(x, terms):
    total = 0.0
    factorial = 1
    power = 1.0
    for n in range(terms):
        if n > 0:
            factorial *= n        # n!
            power *= x            # x^n
        total += power / factorial
    return total

x = 1.0   # считаем e^1 = e
for t in [2, 4, 6, 10]:
    print(f"{t:>2} членов ->", round(exp_series(x, t), 8))
print("Точное e    ->", round(math.e, 8))

Вывод:

 2 членов -> 2.0
 4 членов -> 2.66666667
 6 членов -> 2.71666667
10 членов -> 2.71828153
Точное e    -> 2.71828183

С каждым новым членом приближение к числу e улучшается — ряд сходится. Уже 10 членов дают 7 верных цифр.

Ряды в SymPy

SymPy строит ряд Тейлора любой функции командой series:

import sympy as sp
x = sp.symbols("x")

print(sp.series(sp.exp(x), x, 0, 5))   # 1 + x + x**2/2 + x**3/6 + x**4/24 + O(x**5)
print(sp.series(sp.sin(x), x, 0, 8))   # x - x**3/6 + x**5/120 - x**7/5040 + O(x**8)
print(sp.series(sp.cos(x), x, 0, 6))   # 1 - x**2/2 + x**4/24 + O(x**6)
print(sp.series(sp.log(1 + x), x, 0, 5)) # x - x**2/2 + x**3/3 - x**4/4 + O(x**5)

Третий аргумент (0) — точка разложения, четвёртый (5) — до какой степени. O(x**5) в конце — «хвост»: всё, что меньше x⁵, отброшено.

Малые колебания: почему sin(x) ≈ x

Из ряда sin(x) = x − x³/6 + ... видно: при маленьких x кубический член ничтожен, и sin(x) ≈ x. Это приближение — основа всей теории малых колебаний (маятник, пружина) в физике. Ряд Тейлора объясняет, почему оно работает и насколько точно.

Как работает под капотом

Коэффициенты ряда Тейлора в точке a — это производные функции в этой точке, делённые на факториал: n-й коэффициент равен f⁽ⁿ⁾(a)/n!. SymPy умеет дифференцировать символьно (мы видели это раньше), поэтому построение ряда для него естественно: бери производные, дели на факториалы. Но напрямую так считать дорого (нужно много производных), поэтому SymPy использует более эффективную арифметику рядов: складывает, умножает и подставляет ряды как многочлены с отслеживанием порядка O(). Символ O(x**n) — это строгая запись «остатка», гарантирующая, сколько членов достоверны.

Частые ошибки

  • Применять ряд далеко от точки разложения. Ряд Тейлора точен вблизи точки a; вдали приближение разваливается (или ряд вовсе расходится).
  • Забыть про радиус сходимости. Ряд для log(1+x) сходится лишь при |x| < 1; вне — бессмыслица.
  • Путать число членов и точность. Больше членов — точнее около точки, но не спасёт вдали от неё.

Итог

  • Ряд Тейлора приближает функцию многочленом — так считают sin, exp, log процессоры.
  • series(f, x, a, n) строит разложение в точке a до степени n с остатком O().
  • Из ряда видны приближения вроде sin(x) ≈ x для малых x.
  • Коэффициенты — производные/факториалы; ряд точен только вблизи точки разложения.
Проверьте себя
1. Зачем функции раскладывают в ряд Тейлора на практике?
AЧтобы усложнить вычисления
BЧтобы приблизить функцию многочленом — так процессоры считают sin, exp, log через сложения и умножения
CЧтобы найти корни
DТолько для красоты
2. Чему равен n-й коэффициент ряда Тейлора функции f в точке a?
Af(a)·n
Bf⁽ⁿ⁾(a)/n! — n-я производная в точке, делённая на факториал
Ca^n
D1/n
3. Почему приближение sin(x) ≈ x работает только для малых x?
AЭто произвольное правило
BВ ряду sin(x)=x − x³/6 + … при малом x кубический и старшие члены ничтожны, но при больших x они становятся значимыми
Csin вообще не раскладывается
Dx всегда равен sin(x)