Существует много многозначных сложных функций - функций, которые могут иметь более одного значения, соответствующего любой точке в их области.Например: корни, логарифмы, обратные тригонометрические функции ...
Причина, по которой эти функции могут иметь несколько значений, обычно заключается в том, что они обратны функции, которая имеет несколько значений в доменной карте для одного и того же значения.
При выполнении вычислений с такими функциями было бы нецелесообразно всегда возвращать все возможные значения.Для обратных тригонометрических функций существует бесконечно много возможных значений.
Обычно различные значения функции могут быть выражены как функция целочисленного параметра k.Например, значения log z
с z = r*(cos t + i*sin t
равны log r + i*(t + k*2*pi)
с k любым целым числом.Для n-го корня это r**(1/n)*exp(i*(t+k*2*pi)/n
с k=0..n-1
включительно.
Поскольку возвращать все возможные значения непрактично, математические функции в Python и почти во всех других распространенных языках программирования возвращают то, что называется «основным значением»функция.( ссылка ) Основным значением обычно является значение функции с k = 0.Независимо от того, какой выбор сделан, это должно быть четко указано в документации.
Таким образом, чтобы получить все сложные корни комплексного числа, вы просто оцениваете функцию для всех соответствующих значений k:
def roots(z, n):
nthRootOfr = abs(z)**(1.0/n)
t = phase(z)
return map(lambda k: nthRootOfr*exp((t+2*k*pi)*1j/n), range(n))
(Вам нужно будет импортировать модуль cmath, чтобы это работало.) Это дает:
>>> roots(-27j,3)
[(2.59808-1.5j), (1.83691e-16+3j), (-2.59808-1.5j)]