计算python中的立方根

时间:2012-09-09 00:32:30

标签: python

我正在尝试在python中评估以下函数:

f(x) = (1 + cos(x))^(1/3)


def eval( i ):
   return math.pow( (1 + math.cos( i )), 1/3)

为什么它总是归还给我1? 我正在尝试计算积分的RightLeft近似值,后者应用Simpson's Rule,但Python似乎不喜欢该表达式。 救命? *完整代码*

import math

min = 0
max = math.pi / 2
n = 4
delta  = ( min + max ) / n

def eval( i ):
   return math.pow( (1 + math.cos( i )), 1/3)

def right( ):
   R = 0
   for i in range(1, n+1):
        R += eval( i )

   return R

def left():
   L = 0
   for i in range(0, n):
        print eval( i )
        L += eval( i )

5 个答案:

答案 0 :(得分:17)

使用浮点数学运算(1/3截断为零)。此外,不需要math.pow(**用于取幂)......

(1 + math.cos(i)) ** (1 / 3.0)

此外,minmaxeval是内置函数 - 您正在隐藏它们。

此外,您在函数调用参数中添加的额外空格是针对PEP-8(Python样式指南)。特别是这一段:

http://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements

答案 1 :(得分:10)

使用

1/3.0

而不是

1/3
你的代码中的

。否则,由于整数截断,您的指数始终为0

是否使用**math.pow()取决于您的偏好,大多数人可能只使用**

定义名为eval的函数可能是一个好主意,因为eval()已经被Python用作内置函数。

背景:

请注意,您也可以执行1.0 / 31.0 / 3.0 ..只要一个分部中的操作数为float,结果就会是float一个float(1/3)

但是,此0 不会工作,因为它会将整数除1/3产生的float转换为0.0给您/

Python 3.x 下,除法运算符float将按预期工作(即,即使有两个整数操作数,它也会为您提供//值。要获得整数除法,您必须使用{{1}}。

所以你在Python 3.x下运行它,你不会遇到这个特殊的问题。

答案 2 :(得分:1)

Python 3.11 中的新功能

math 模块现在包含一个用于立方根的内置 cbrt,因此您的函数可以实现为:

def f(x):
    return math.cbrt(1 + math.cos(x))

答案 3 :(得分:0)

1/3是整数除数,评估为0.尝试1./3

答案 4 :(得分:0)

我认为这是因为您正在执行整数运算,而您确实打算执行浮点运算。尝试将[second] 1 更改为 1.0

def eval( i ):
    return math.pow( (1 + math.cos( i )), 1.0/3)