>>> 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は単なる一例です。
他の多くの関数、たとえば逆sin(arcsin)についても同じ苦情を申し立てることができます。sin(x)=0.5となる"x"の値は何ですか?+/- 180度(+/- pi)のスパンのみを考慮した場合でも、x=30度とx=150度の2つの解決策があります。しかし、逆罪の実装は常に30度(pi / 6)しか返しません。「他の逆関数」が必要な場合は、通常、特定の関数の知識を使用してそれを取得します。
逆二乗(sqrt)の場合、その前に単項マイナスをたたくのと同じくらい簡単です。逆sinの場合、補助角度を取ります。たとえば、pi-arcsin(0.5)です。