Python-如何计算一个数字的所有n次根?

Python-如何计算一个数字的所有n次根?,python,math,Python,Math,是否可以使用Python计算给定数字的n个复数根?我很快就检查过了,Python似乎给了我错误/不完整的答案: (-27.0j)**(1.0/3.0)产生(2.598076211353316-1.4999999998j) 但适当的根应该是3个复数,因为每个非零数都有n个不同的复数n个根。在Python中可能吗?我认为标准Python不会做到这一点,除非您为其编写函数,但您可以使用Numpy: 如果您想在干净的python上获得所有根目录,可以创建简单的函数来实现这一点: import math

是否可以使用Python计算给定数字的n个复数根?我很快就检查过了,Python似乎给了我错误/不完整的答案:

(-27.0j)**(1.0/3.0)
产生
(2.598076211353316-1.4999999998j)


但适当的根应该是3个复数,因为每个非零数都有n个不同的复数n个根。在Python中可能吗?

我认为标准Python不会做到这一点,除非您为其编写函数,但您可以使用Numpy:


如果您想在干净的python上获得所有根目录,可以创建简单的函数来实现这一点:

import math

def root(num, r):
    base = num ** (1.0/r)
    roots = [base]
    for i in range(1, r):
        roots.append(complex(base * math.cos(2*math.pi * i / r), base * math.sin(2*math.pi * i / r)))
    return roots

有许多多值复函数-函数可以有多个值对应于其域中的任何点。例如:根、对数、反三角函数

这些函数可以具有多个值的原因通常是因为它们是域映射中具有多个值的函数的逆函数

使用此类函数进行计算时,始终返回所有可能的值是不切实际的。对于反三角函数,有无限多个可能值

通常,不同的函数值可以表示为整数参数k的函数。例如,带有
z=r*(cos t+i*sin t
logz
的值是带有k任意整数的
logr+i*(t+k*2*pi)
的值。对于第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)]

相关:[不是重复,因为在这个问题中OP不需要整数,而是任何数字]实际上,零也有n个根-它们都一样:)@amit:这绝对是另一个问题,关键字是“所有根”@psihodelia:我没有投重复票,我只是认为对你的问题感兴趣的你/未来读者可能也会对另一个问题感兴趣。@amit:一点也不密切相关。