我正在嘗試計算第 n 項,但它給了我錯誤的答案
import math
def bernoulli(m):
if m == 0:
return 1
else:
t = 0
for k in range(0, m):
t = math.comb(m, k) * bernoulli(k) / (m - k 1)
return 1 - t
def pn(n, x):
sum = 0
for i in range(n):
sum = ((bernoulli(2 * i)) / math.factorial(2 * i)) * (-4**i) * (1 - (4**i)) * (x**((2 * i) - 1))
方程:

uj5u.com熱心網友回復:
以下是一些評論:
- 在python中,約定是包含開始,排除結束。
list(range(1,4))只是[1, 2, 3],不是[1,2,3,4]。因此你的伯努利回圈應該是for k in range(0, m 1),你的pn回圈應該是for i in range(1, n 1). - 求冪比大多數運算子具有更高的優先級。
-4**i被決議為-(4**i),而不是(-4)**i。 sum已經是python中內置函式的名稱。強烈建議不要隱藏內置函式的名稱。呼叫該變數s或total其他東西,而不是sum.
最后,代碼變成:
import math
def bernoulli(m):
if m == 0:
return 1
else:
t = 0
for k in range(0, m 1):
t = math.comb(m, k) * bernoulli(k) / (m - k 1)
return 1 - t
def pn(n, x):
s = 0
for i in range(1, n 1):
s = ((bernoulli(2 * i)) / math.factorial(2 * i)) * ((-4)**i) * (1 - (4**i)) * (x**(2 * i - 1))
return s
并且,使用內置函式sum:
import math
def bernoulli(m):
if m == 0:
return 1
else:
return 1 - sum(math.comb(m, k) * bernoulli(k) / (m - k 1)
for k in range(0, m 1))
def pn(n, x):
return sum((bernoulli(2 * i)) / math.factorial(2 * i)) * ((-4)**i) * (1 - (4**i)) * (x**(2 * i - 1)
for i in range(1, n 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374621.html
