有许多多值复杂函数 - 函数可以有多个值与其定义域中的任何点相对应。例如:根、对数、反三角函数...
这些函数之所以可以有多个值,通常是因为它们是具有多个值在定义域映射到相同值的函数的反函数。
在使用这样的函数进行计算时,总是返回所有可能的值是不切实际的。对于反三角函数,可能存在无限多个可能的值。
通常,不同的函数值可以表示为整数参数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)]
(1.0/3.0)
时的根数可能是3,也可能不是;因为1/3的浮点表示会受到一些舍入误差的影响。 - SingleNegationElimination