質問

この問題があります

>>> import math
>>> math.pow(-1.07,1.3)  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
ValueError: math domain error

なにか提案を ?

役に立ちましたか?

解決

(-1.07)1.3 実数ではないため、数学ドメインエラーになります。

複雑な数字が必要な場合、ab eに書き直す必要がありますb ln a, 、例:

>>> import cmath
>>> cmath.exp(1.3 * cmath.log(-1.07))
(-0.6418264288034731-0.8833982926856789j)

NANを返したい場合は、その例外をキャッチしてください。

>>> import math
>>> def pow_with_nan(x, y):
...   try:
...     return math.pow(x, y)
...   except ValueError:
...     return float('nan')
...
>>> pow_with_nan(1.3, -1.07)   # 1.3 ** -1.07
0.755232399659047
>>> pow_with_nan(-1.07, 1.3)   # (-1.07) ** 1.3
nan

ところで、Pythonでは通常組み込みです a ** b 電力を高めるために使用されます math.pow(a, b).

>>> 1.3 ** -1.07
0.755232399659047
>>> (-1.07) ** 1.3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power
>>> (-1.07+0j) ** 1.3
(-0.6418264288034731-0.8833982926856789j)

他のヒント

捕虜を使用しないで、指数複合体を作らないでください(追加 0j それに)。これが例です:

In [15]: (-1.07)**(1.3+0j)
Out[15]: (-0.64182642880347307-0.88339829268567893j)

数学機能は必要ありません:)

私はPython 2.5.4を使用しています、そして私はこれを取得します:

>>> import math
>>> math.pow(-1.07,1.3)  
nan

どのPythonバージョンを使用していますか?

複雑な(および負の)数の非整数の力には、重要な微妙さが含まれます。指数関数は、実際のラインでは無視です。 IE exp(a)= exp(b)はa = bを意味します。これは複雑な平面ではそうではありません。 exp(2*pi*i)= 1であるため、指数関数は2*pi*iperiodicです。

これは問題につながります:ログ関数のどのブランチを使用しますか?上記の質問は、複雑な分析の中心的な質問の1つです。

Pythonはこの状況に賢く応答しています。複雑な番号コンストラクターを明示的に使用しない限り、実際には人身売買されます。ネガティブの部分的なパワーは決して現実的ではないため、Pythonは適切に例外を投げかけています。

この投稿のタイトルから パワー ネガティブです、あなたが実際に1.3を望んでいた可能性はありますか-1.07 -1.07ではなく1.3?

負の塩基の力は複雑な数字です。これを修正する方法を説明する例は次のとおりです。

from numpy import *
t  = arange(-3, 3, 0.1)

for n in range(0,len(t)):
    T = t[n]
    x = (complex(-0.5,0))**T
    print(T, x)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top