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 ]
只要简单地使用De Moivre's formula,就足以表明值的立方根(不管符号是什么)是一个多值函数。这意味着,对于任何输入值,都有三种解决方案。提出的大多数解决方案只返回原理根。返回所有有效根并显式测试非复杂特殊情况的解决方案如下所示。
编辑:根据请求,在不适合依赖numpy的情况下,以下代码也会执行相同的操作。
您可以使用:
或者更普遍地说:
相关问题 更多 >
编程相关推荐