>>> import math
>>> math.sqrt(4)
2.0
为什么 Python 不给出负平方根(因为 -2 也是 4 的平方根)?
我怎样才能让 Python 给出负平方根?
>>> import math
>>> math.sqrt(4)
2.0
为什么 Python 不给出负平方根(因为 -2 也是 4 的平方根)?
我怎样才能让 Python 给出负平方根?
如果你需要一个数字的所有根,你可以使用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]
怎么样:
def my_sqrt(x):
root1 = math.sqrt(x)
root2 = -root1
return root1,root2
这不是 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)。