You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python计算级数A、B时A²+B²结果异常的问题排查

级数计算错误排查

要计算两个级数:

  • ( A = \frac{x^1}{1!} - \frac{x^3}{3!} + \frac{x^5}{5!} - ... - \frac{x^{51}}{51!} )
  • ( B = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - ... - \frac{x^{50}}{50!} )

根据数学原理,( A^2 + B^2 ) 应近似等于1,但运行以下代码后得到2.xxxxxx的结果,需排查错误:

def factorial(n):
    fac = 1
    for i in range(2, n+1):
        fac *= i
    return fac


def calcA(x):
    c = True
    A = 0
    for i in range(1, 51, 2):
        if c:
            A += (x**i)/factorial(i)
        else:
            A -= (x**i)/factorial(i)
        c = not c
    return A


def calcB(x):
    B = 1
    c = False
    for i in range(2, 50, 2):
        if c:
            B += (x**i)/factorial(i)
        else:
            B -= (x**i)/factorial(i)
        c = not c
    return B

错误原因分析

代码的核心问题是循环范围未包含级数的最后一项,导致A和B的计算值偏离预期:

  1. calcA的循环范围错误:原级数要求计算到 ( -\frac{x^{51}}{51!} ),但range(1, 51, 2)是左闭右开区间,只会生成1、3、…、49,漏掉了51这一项。
  2. calcB的循环范围错误:原级数要求计算到 ( -\frac{x^{50}}{50!} ),但range(2, 50, 2)只会生成2、4、…、48,漏掉了50这一项。

这两个遗漏导致A和B的实际计算值与理论值偏差,最终平方和远大于1。

修正后的代码

def factorial(n):
    fac = 1
    for i in range(2, n+1):
        fac *= i
    return fac


def calcA(x):
    c = True
    A = 0
    # 修正循环范围,包含51
    for i in range(1, 52, 2):
        if c:
            A += (x**i)/factorial(i)
        else:
            A -= (x**i)/factorial(i)
        c = not c
    return A


def calcB(x):
    B = 1
    c = False
    # 修正循环范围,包含50
    for i in range(2, 51, 2):
        if c:
            B += (x**i)/factorial(i)
        else:
            B -= (x**i)/factorial(i)
        c = not c
    return B

修正后,A和B会完整计算到指定的最后一项,此时 ( A^2 + B^2 ) 的结果会近似等于1,符合数学预期。

内容的提问来源于stack exchange,提问作者user20358901

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:45:39