如何在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()时,结果通常是一个复数 – 这不是你所希望的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |