Вопрос

У меня есть эта проблема

>>> 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 Не будет реальным числом, таким образом, ошибка домена математики.

Если вам нужен сложный номер,преступность должен быть переписан в Eb 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)

Другие советы

Не используйте POW и делайте комплекс показателя (добавьте 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 вы используете?

Неотъемлемые силы сложных (и отрицательных) чисел включают важную тонкость. Экспоненциальная функция инъективна на реальной линии; т.е. exp (a) = exp (b) подразумевает a = b. Это не так на сложной плоскости. Поскольку Exp (2 * Pi * I) = 1, экспоненциальная функция 2 * Pi * i-периодическая.

Это приводит к проблеме: какую отрасль функции журнала мы используем? Указанный вопрос - один из центральных вопросов сложного анализа.

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