3
>>> import math
>>> math.sqrt(4)
2.0

为什么 Python 不给出负平方根(因为 -2 也是 4 的平方根)?
我怎样才能让 Python 给出负平方根?

4

3 回答 3

10

如果你需要一个数字的所有根,你可以使用numpy.root

>>> import numpy
>>> def root(n, r):
    p = [1] + [0] * (r - 1) + [-n]
    return numpy.roots(p)

>>> root(4, 2)
array([ 2., -2.])
>>> root(-4, 2)
array([ 0.+2.j,  0.-2.j])
>>> root(1, 3)
array([-0.5+0.8660254j, -0.5-0.8660254j,  1.0+0.j       ])

另一种选择是使用Sympy 多项式模块

>>> from sympy import symbols, solve
>>> solve(x**2 - 4)
[-2, 2]
>>> from sympy import symbols, solve
>>> solve(x**2 - 4)
[-2, 2]
>>> solve(x**3 - 1)
[1, -1/2 - sqrt(3)*I/2, -1/2 + sqrt(3)*I/2]
>>> solve(x**2 + 4)
[-2*I, 2*I]
于 2013-03-13T17:18:53.260 回答
9

怎么样:

def my_sqrt(x):
    root1 = math.sqrt(x)
    root2 = -root1
    return root1,root2
于 2013-03-13T17:04:13.770 回答
4

这不是 Python 或平方根函数所独有的。每当我们处理非“内射”函数的逆时,就会出现这个问题。见http://en.wikipedia.org/wiki/Injective_function

即,任何函数的逆函数,其中 x 的多个值映射到 y 的相同值,y=x**2 只是一个示例。

您可以对许多其他函数提出同样的抱怨,例如逆正弦 (arcsin)。使 sin(x)=0.5 的“x”的值是多少?即使我们只考虑 +/- 180 度 (+/- pi) 的跨度,也有两种解决方案,x=30 度和 x=150 度。但是逆正弦的实现总是只返回 30 度 (pi/6)。如果我们想要“其他逆”,那么我们通常只使用我们对特定函数的了解来获得它。

对于反平方(sqrt),它就像在它前面拍一个一元减号一样简单。对于逆sin,取补角,例如pi-arcsin(0.5)。

于 2013-03-13T17:31:34.220 回答