Производные, пределы и ряды
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)— коэффициент.