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

梯形法计算积分结果为0时误差随n增大异常,求修复方案

修复梯形法计算正弦函数对称区间积分的异常问题

你的梯形法实现逻辑本身是正确的,但在对称区间(如[-1,1])出现结果异常,核心原因是浮点数累加的精度误差累积:循环中通过start += length逐步计算中间点的方式,会随着循环次数增加产生精度偏移,导致对称位置的点无法严格对应,奇函数sin(x)的正负值无法完全抵消,最终积分结果偏离理论值0。

修复后的代码

import math

def trapezoidal_method(a: float, b: float, n: int) -> float:
    length = (b - a) / n
    integral = 0.0
    # 首尾项的半值
    integral += math.sin(a) / 2 + math.sin(b) / 2
    # 直接计算中间点,避免累加精度损失
    for i in range(1, n):
        x = a + i * length
        integral += math.sin(x)
    return integral * length

修复说明

  1. 避免累加误差:将原来的start累加方式改为直接通过a + i * length计算每个中间点的坐标,确保每个点的位置都是基于初始区间精确计算的,不会因多次累加产生偏移。
  2. 简化首尾项计算:将首尾的半值合并到同一行,逻辑更清晰,不影响结果。

验证示例

当调用trapezoidal_method(-1, 1, 1000)时,修复后的代码会返回非常接近0的结果(如~1e-16量级),符合奇函数在对称区间积分的理论预期;而原代码可能返回明显非零的误差值(如~1e-13或更大)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:40:53