Простого использования формулы Де Мойвра достаточно, чтобы показать, что корень куба значения, независимо от знака, является многозначной функцией. Это означает, что для любого входного значения будет три решения. Большинство представленных решений пока только возвращают принцип root. Решение, которое возвращает все действительные корни и явно тестирует для несложных особых случаев, показано ниже.
import numpy
import math
def cuberoot( z ):
z = complex(z)
x = z.real
y = z.imag
mag = abs(z)
arg = math.atan2(y,x)
return [ mag**(1./3) * numpy.exp( 1j*(arg+2*n*math.pi)/3 ) for n in range(1,4) ]
Редактировать: По запросу, в тех случаях, когда неуместно зависеть от numpy, следующий код делает то же самое.
def cuberoot( z ):
z = complex(z)
x = z.real
y = z.imag
mag = abs(z)
arg = math.atan2(y,x)
resMag = mag**(1./3)
resArg = [ (arg+2*math.pi*n)/3. for n in range(1,4) ]
return [ resMag*(math.cos(a) + math.sin(a)*1j) for a in resArg ]