Я получаю ошибки при попытке возвести отрицательное число в десятичную степень. Например, я хочу посчитать это
(-2)^(4.8)
что должно привести к выводу действительных действительных чисел (27,85 из моего TI-89).
Я пробовал использовать numpy.power(), но согласно их документации «Отрицательные значения, увеличенные до нецелого значения, вернут Nan», если вы не укажете, что тип должен быть сложным.
np.power(-2.0,4.8)
<ipython-input-3-8fe5c2443c98>:1: RuntimeWarning: invalid value encountered in power
np.power(-2.0,4.8)
nan
np.power((-2),4.8, dtype = complex)
(-22.53728640541592+16.374297039371754j)
То же самое происходит и при использовании math.pow(), в результате чего получается Nan.
Я мог бы обойти это, используя закон экспонент (учитывая, что числитель четный):
#(-2)^(4.8) == (-2)^(48/10) --> (-2)^(24/5) num = np.power(-2.0, 24)
np.power(num,1/5)
27.85761802547598
Но существует ли способ вычислить отрицательное основание десятичной степени? Или это единственный способ?
Что ваш TI-89 говорит о (-1)^(0,5)?
Если вы не верите np.power
с dtype='complex'
, используйте numpy.emath, «Математические функции с автоматическим доменом».
import numpy as np
np.emath.power(-2, 4.8)
Это дает правильный результат, который сложен: (-22.53728640541592+16.374297039371754j)
Или, поскольку вы знаете, что результат сложен, просто используйте встроенную сложную математику, сделав хотя бы один из аргументов сложным.
(-2+0j)**4.8
(-22.537286405415916+16.37429703937175j)
Ваш TI дает вам величину комплексного числа.
abs((-2+0j)**4.8)
27.85761802547597
(-2)^4,8 не является действительным числом. NumPy правильный. Ваш обходной путь недействителен, поскольку тождество a^(bc)=(a^b)^c не сохраняется, когда a отрицательно. Если бы ваш обходной путь был действительным, то (-1)^(2/4) было бы равно ((-1)^2)^(1/4), что равно 1^(1/4) или 1, но (- 1)^(2/4) — это я.