>>> import math
>>> math.sqrt(4)
2.0
为什么Python不给出负平方根(因为-2也是4的平方根)? 我怎样才能让Python给出负平方根?
答案 0 :(得分:9)
怎么样:
def my_sqrt(x):
root1 = math.sqrt(x)
root2 = -root1
return root1,root2
答案 1 :(得分:9)
如果您需要数字的所有根,可以使用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 Polynomial Module
>>> 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]
答案 2 :(得分:4)
这不是Python独有的,也不是平方根函数。当我们处理非“内射”函数的逆时,这是一个问题。见http://en.wikipedia.org/wiki/Injective_function
也就是说,任何函数的倒数,其中x的多个值映射到相同的y值,y = x ** 2只是一个例子。
你可以对许多其他函数提出相同的抱怨,例如反sin(arcsin)。使sin(x)= 0.5的“x”的值是多少?即使我们只考虑+/- 180度(+/- pi)的跨度,也有两个解,x = 30度,x = 150度。但是反向sin的实现总是只返回30度(pi / 6)。如果我们想要“其他逆”那么我们通常只是使用我们对特定函数的知识来获得它。
对于倒数平方(sqrt),它就像在前面打一个一元减号一样简单。对于反sin,它取辅助角度,例如pi-arcsin(0.5)。