</>
Topic 3 of 5

Course materials are currently available in Russian only.

Производные, пределы и ряды

SymPy умеет то, что проходят в курсе математического анализа: находить производные, пределы и ряды — в точном виде.

Производные: diff

from sympy import symbols, diff, sin, exp

x, y = symbols("x y")
print(diff(x ** 4, x))              # 4*x**3
print(diff(sin(x) * exp(x), x))     # exp(x)*sin(x) + exp(x)*cos(x)
print(diff(x ** 4, x, 2))           # 12*x**2 — вторая производная
print(diff(x ** 2 * y ** 3, y))     # 3*x**2*y**2 — частная производная по y

Третий аргумент — порядок производной. Функции sin, cos, exp, log, sqrt нужно брать из SymPy, а не из math: math.sin умеет работать только с числами.

Значение производной в точке: сначала продифференцировать, потом подставить:

d = diff(x ** 3, x)
print(d.subs(x, 2))     # 12

Если поменять порядок — подставить точку и потом дифференцировать — получится производная числа, то есть 0.

Пределы: limit

from sympy import limit, oo

print(limit(sin(x) / x, x, 0))           # 1
print(limit((1 + 1 / x) ** x, x, oo))    # E — число e
print(limit(1 / x, x, 0, "-"))           # -oo
  • oo (две буквы «о») — бесконечность, -oo — минус бесконечность;
  • четвёртый аргумент — направление: "+" справа (по умолчанию) или "-" слева. Пределы справа и слева могут различаться;
  • "+-" — двусторонний предел; если односторонние не совпадают, будет ошибка.

Подстановка subs не заменяет предел: (sin(x) / x).subs(x, 0) даёт nan — «не число».

Ряды Тейлора: series

Около точки функцию можно приблизить многочленом — рядом Тейлора:

from sympy import series, cos

s = series(cos(x), x, 0, 6)
print(s)               # 1 - x**2/2 + x**4/24 + O(x**6)
print(s.removeO())     # x**4/24 - x**2/2 + 1
  • series(f, x, x0, n) — разложение около x0 до степени xn-1 включительно;
  • O(x**6) означает «и ещё слагаемые степени 6 и выше»; removeO() их отбрасывает и оставляет многочлен;
  • коэффициент при xk многочлена берут методом coeff: s.removeO().coeff(x, 4) → 1/24. При k = 0 это свободный член.

Коэффициенты ряда в нуле — это f(k)(0) / k!, поэтому в ряду у ex стоят 1, 1, 1/2, 1/6, …

Итог

  • diff(f, x, k) — k-я производная; значение в точке — .subs после дифференцирования;
  • limit(f, x, x0, "+" или "-") — односторонний предел; oo — бесконечность;
  • series(f, x, 0, n).removeO() — многочлен Тейлора; .coeff(x, k) — коэффициент.