Функции SymPy cbrt
и root
используют главную ветвь корня. Основная ветвь многозначной функции z->z**(1/3)
равна -1/2 + I*sqrt(3)/2
при -1. Это не реальное число, поэтому вы не видите его на графике.
Но часто желательно получить действительный корень для всех реальных входных данных, что возможно для нечетных степеней. Это обеспечивается функцией real_root
. Итак, в принципе ваш код должен быть
from sympy import symbols, plot, real_root
x = symbols('x')
eqn = real_root(x, 3)
p = plot(eqn)
Однако реализация real_root
не соответствует ожиданиям процедуры построения графиков SymPy, поэтому вышеприведенное выдает ошибку на данный момент. (Разные ошибки в разных версиях SymPy). Вместо этого постройте математически эквивалентную функцию |x|**(1/3) * sign(x)
:
from sympy import symbols, plot, root, sign, Abs
x = symbols('x')
eqn = root(Abs(x), 3)*sign(x)
p = plot(eqn)
Примечание: функция nthroot
из модуля simplify
предназначена не для вычисления n-го корня, а для упрощения выражений с помощью радикалов.