如何在Python中计算-1 /(-343)^(1/3)为1/7?

我喜欢在我的函数探索中加入
Python,但是我遇到了一些我没想到或想要进行这些评估的行为.

>>> def h(x):
...     return -1 / x**(1/3)
...
>>> h(-343)
(-0.07142857142857145 + 0.12371791482634838j)

我想要一个真正的反函数:

>>> def f(x):
...     return x**3
...
>>> f(-7)
-343

这样:

>>> def h(x):
...     return -1/inverse_f(x)
...
>>> h(-343)
0.14285714285714285

是否有Pythonic方法来获得这种行为?

最佳答案 你遇到了问题,因为提升到分数幂的负数可能是
complex number.

解决方案是应用数学标识.我们知道如果x是负的,则x1 / 3等于 – (( – x)1/3).换句话说,我们将x转换为正数,取立方根,然后再将其否定.以下是执行此操作的Python代码:

def h(x):
    if x >= 0:
        return -1.0 / x**(1.0/3.0)
    else:  # x < 0
        return -h(-x)

为了解释为什么你首先要解决问题,有助于查看x ** y(幂运算符)的实现.关键的数学标识是xy = exp(log(x)·y).这个标识使得处理权力变得更容易,因为指数被视为常规数并且不需要被分析(它是一个整数吗?它是一个分数吗?它是负数吗?等等).

当x是正数时,log(x)是实数.只要y也是实数,exp(log(x)·y)将是实数.

但是当x是负数时,log(x)是一个复数.具体而言,它等于[log(-x)π·i].当我们将这样一个复数乘以y然后应用exp()时,结果通常是一个复数 – 这不是你所希望的.

点赞