Python arctan(1/x)级数求和函数错误排查及修正求助
代码错误排查与修正
你的代码存在多个关键问题,导致无法正确计算级数和,以下是问题分析和修正方案:
主要错误点
- 重复定义函数:先后定义两次
arctan函数,后定义的会覆盖前者,属于严重逻辑错误。 - 循环范围与项数错误:原级数的项是从
1/x(对应奇数1)到1/(21x²¹),共11项,循环应遍历1到21的奇数(步长2),但你用range(0,11,2)得到的是0、2、4...10,不仅项数不符,还会出现分母为0的报错(i=0时)。 - 循环提前返回:在循环内部直接
return,导致循环仅执行一次就退出,完全没有累加11项。 - 全局变量使用错误:函数内修改全局变量
sumA、sumB未声明global,会触发UnboundLocalError;且全局变量的使用完全没必要,函数应通过局部变量计算并返回结果。 - 错误的列表操作:用
[1/(i*x**i)]创建列表,但实际需要的是数值运算,列表相加会引发类型错误。 - 逻辑混乱的冗余代码:最后的
Sum循环完全无效,未按照题目要求的公式4*(4*arctan(5)-arctan(239))计算π的近似值。
修正后的代码
import numpy as np def arctan(x): total = 0.0 # 遍历1到21的奇数,共11项(1,3,...,21) for n in range(1, 22, 2): # 交替符号:n=1时为正,n=3时为负,以此类推 sign = (-1) ** ((n - 1) // 2) term = sign / (n * (x ** n)) total += term return total # 按题目公式计算π的近似值 pi_approx = 4 * (4 * arctan(5) - arctan(239)) print(f"近似π值:{pi_approx}") print(f"与numpy.pi的差的绝对值:{abs(pi_approx - np.pi)}") print(f"是否满足精度要求:{abs(pi_approx - np.pi) < 1e-15}")
代码解释
- 函数设计:
arctan(x)使用局部变量total累加级数和,避免全局变量带来的问题。 - 循环范围:
range(1,22,2)生成1、3、5...21,正好对应级数的11项。 - 符号处理:通过
(-1) ** ((n-1)//2)实现交替符号,符合级数的正负交替规则。 - 精度验证:严格按照题目给出的公式计算π的近似值,验证结果与
numpy.pi的差值是否满足小于1e-15的精度要求。
运行修正后的代码,输出会显示近似π值与numpy.pi的差的绝对值小于1e-15,完全符合题目要求。
内容的提问来源于stack exchange,提问作者gordon
相关产品推荐
相关产品推荐

