加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:56:58 所属栏目:Python 来源:网络整理
导读:我喜欢在我的函数探索中加入 Python,但是我遇到了一些我没想到或想要进行这些评估的行为. def h(x):... return -1 / x**(1/3)... h(-343)(-0.07142857142857145 + 0.12371791482634838j) 我想要一个真正的反函数: def f(x):... return x**3... f(-7)-343 这
我喜欢在我的函数探索中加入 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()时,结果通常是一个复数 – 这不是你所希望的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读