基于余弦McLaurin展开实现的自定义余弦函数返回值异常求助
问题排查与代码修正
错误原因
- 麦克劳林公式误用:余弦函数的麦克劳林展开式为:
cos(x) = Σk=0∞ [ (-1)k * x2k ] / (2k)!
你代码中使用的x^(2k+1)是正弦函数展开的指数特征,公式匹配完全错误。
- 缺失阶乘运算:三角函数麦克劳林展开的分母为对应阶数的阶乘,你代码中分母仅写了
2*k+1,没有计算阶乘,导致每一项的数值权重完全偏离正确值。
修正后可运行代码
import math def _cos(n:float, prec:int): res = 0.0 for k in range(prec): # 严格按照余弦麦克劳林公式计算单值 term = ((-1) ** k) * (n ** (2 * k)) / math.factorial(2 * k) res += term return res pi = math.pi print(_cos(pi, 20)) print(math.cos(pi))
补充说明
余弦的麦克劳林级数在收敛域内收敛速度极快,取prec=20就已经能达到和标准库math.cos几乎一致的精度,不需要设置到200项,过高的迭代次数反而可能引入不必要的浮点计算误差。
内容的提问来源于stack exchange,提问作者XxJames07-
相关产品推荐
相关产品推荐

