8

私はPythonで次の関数を評価しようとしています:

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


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

なぜいつも私を返すのです1か?Right積分のと近似を計算しようとしていますがLeft、後者が適用されます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 )
4

5 に答える 5

18

浮動小数点演算を使用します(1/3はゼロに切り捨てられます)。また、math.pow(べき乗の場合は**)は必要ありません...

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

またmin、、maxおよびevalは組み込み関数です-あなたはそれらをシャドウイングしています。

また、関数呼び出し引数に追加する余分なスペースは、PEP-8(Pythonスタイルガイド)に反します。具体的にはこの段落:

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

于 2012-09-09T00:34:31.433 に答える
10

使用する

1/3.0

それ以外の

1/3

あなたのコードで。それ以外の場合、指数は常に0整数の切り捨てによるものになります。

**使用するかmath.pow()、好みに応じて使用するかどうかにかかわらず、ほとんどの場合、を使用するだけ**です。

eval()はPythonで組み込み関数としてすでに使用されているため、という名前の関数を定義することはおそらくお勧めできません。eval

バックグラウンド:

除算のオペランドの1つが結果である限り、1.0 / 3 または..を実行することもできます 。結果は。になります。1.0 / 3.0floatfloat

ただし、これ float(1/3)は整数除算の結果を除法の原理に変換するため、機能しません。01/3float0.0

Python 3.xでは、除算演算子/は期待どおりに機能していました(つまりfloat、2つの整数オペランドでも値が得られます)。整数除算を取得するには、を使用する必要があります//

したがって、Python 3.xでこれを実行した場合、この特定の問題は発生しませんでした。

于 2012-09-09T00:33:47.520 に答える
1

Python3.11の新機能

mathモジュールにcbrtは立方根の組み込みが含まれているため、関数は次のように実装できます。

def f(x):
    return math.cbrt(1 + math.cos(x))
于 2021-07-26T08:17:48.123 に答える
0

1/3は整数除算で、0と評価されます。1/3を試してください

于 2012-09-09T00:35:09.253 に答える
0

これは、実際に浮動小数点演算を実行する予定の整数演算を実行しているためだと思います。[秒] 11.0に変更してみてください:

def eval( i ):
    return math.pow( (1 + math.cos( i )), 1.0/3)
于 2012-09-09T00:36:01.023 に答える