Построить функцию корневого куба с помощью SymPy, включая отрицательные аргументы - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь построить функцию корня куба с помощью SymPy. Я знаю, как это должно выглядеть, но я вижу только значения для x> = 0, а не для отрицательных чисел. Я пробовал два подхода.

cbrt:

from sympy import symbols, plot
from sympy.functions.elementary.miscellaneous import cbrt

x    = symbols('x')
eqn  = cbrt(x)
p    = plot(eqn)

nthroot:

from sympy import symbols, plot
from sympy.simplify.simplify import nthroot

x    = symbols('x')
eqn  = nthroot(x, 3)
p    = plot(eqn)

1 Ответ

0 голосов
/ 08 сентября 2018

Функции 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)

plot

Примечание: функция nthroot из модуля simplify предназначена не для вычисления n-го корня, а для упрощения выражений с помощью радикалов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...