当我在Python和NumPy中取第n个根时,我实际得到的是n个现有根中的哪一个?



由代数基本定理导出公式z^n=a存在n个复根,其中a为实数,n为正整数,z为复数。除了复数根之外,还有一些根也是实根(例如,当b=0时,a+bi)。

有多个实根的一个例子是z^2=1,我们得到z =±sqrt(1) =±1。解z = 1是直接的。解z = -1由z = sqrt(1) = sqrt(-1 * -1) = I * I = -1得到,其中I为虚单位。

在Python/NumPy(以及许多其他编程语言和包)中,只返回一个值。这里有两个5^{1/3}的例子,它有3个根。

>>> 5 ** (1 / 3)
1.7099759466766968
>>> import numpy as np
>>> np.power(5, 1/3)
1.7099759466766968

对于我的用例来说,只返回一个可能的根并不是问题,但是如果知道'哪个将是有用的。' root是在Python和NumPy上下文中系统计算的。可能有一个(ISO)标准说明应该返回哪个根,或者可能有一个常用的算法恰好返回特定的根。我想象过一个等价类,比如"实值解的最大值",但是我不知道。

:当我在Python和NumPy中取第n个根时,我实际得到的是n个现有根中的哪一个?

由于通常使用恒等式x = exp(a⋅log(x))来定义一般幂,因此您将得到与所选择的复对数分支割相对应的根。

关于这一点,numpy文档说:

对于实数输入数据类型,log总是返回实数输出。对于每个不能表示为实数或无穷大的值,它产生nan并设置无效的浮点错误标志。

对于复值输入,log是具有分支割[-inf, 0]且在其上连续的复解析函数。log将浮点负零处理为无限小的负数,符合C99标准。

例如np.power(-1 +0j, 1/3) = 0.5 + 0.866j = np.exp(np.log(-1+0j)/3)

相关内容

最新更新