广场根在蟒蛇

时间:2013-03-13 17:01:17

标签: python

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

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

3 个答案:

答案 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)。