Ряды Тейлора: 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. - Коэффициенты — производные/факториалы; ряд точен только вблизи точки разложения.