首页 > 解决方案 > python中复数的立方根

问题描述

如何在python中计算复数的立方根?目前,我发现这样做的唯一方法是根据这个答案,但我正在尝试import从我的代码中删除任何和所有语句。


当前方法,在此处转载:

import math
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 ]

标签: pythonmathcomplex-numbers

解决方案


计算一并乘以 1 的立方根?

cuberoots_of_1 = 1, complex(-.5, .75**.5), complex(-.5, -.75**.5)

def cuberoot(z):
    cuberoot = complex(z)**(1/3)
    return [cuberoot * cr1 for cr1 in cuberoots_of_1]

测试:

>>> cuberoot(-2 + 3j)
[(1.1532283040274223+1.0106429470939737j),
 (-1.4518566183526649+0.49340353410400484j),
 (0.2986283143252425-1.5040464811979786j)]

>>> for z in cuberoot(-2 + 3j):
        print(z**3, abs(z**3 - (-2 + 3j)))

(-1.999999999999999+3j) 1.1102230246251565e-15
(-1.999999999999999+3j) 1.1102230246251565e-15
(-1.9999999999999982+2.9999999999999996j) 1.831026719408895e-15

对你做同样的事情不太准确:

(-1.999999999999996+3.000000000000002j) 4.572178254219406e-15
(-1.9999999999999933+3.000000000000004j) 7.768388458966724e-15
(-1.9999999999999956+3.0000000000000013j) 4.636427468134552e-15

推荐阅读