Python实现Simpsons Rule(辛普森法则)计算结果错误问题排查
错误点分析
- 系数计算错误:辛普森法则最终乘以的系数应为步长除以3,即
(rb-lb)/(3*r),原代码错误写为(rb - lb)/(3 * rb),你的测试用例中rb=2、r=4,此处系数错误变为预期值的2倍,直接导致输出从正确的4变为8。 - 缺少输入合法性校验:辛普森法则要求分割的区间数r必须为偶数,否则计算逻辑不成立,代码未对该情况做校验,传入奇数r时结果必然偏差。
- 变量命名不规范(非功能性错误):实现的是辛普森法则却命名为trapezoid(梯形法),权重标记使用字符串"4""2"虽能运行但无必要,可改用布尔值或数字降低开销。
修正后代码
def simpsons(lb, rb, r): # 校验r为偶数 if r % 2 != 0: raise ValueError("辛普森法则要求分割区间数必须为偶数") width = (rb - lb) / r currentX = lb area = currentX ** 3 weight = 4 currentX += width while currentX < rb: area += weight * (currentX ** 3) # 切换权重 weight = 2 if weight == 4 else 4 currentX += width area += rb ** 3 # 修正系数计算 area *= width / 3 return area lftBount = int(input("Enter the left bound:")) rgtBount = int(input("Enter the right bound:")) Repeat = int(input("How many times do you want:")) print(simpsons(lftBount, rgtBount, Repeat))
验证说明
用你给出的测试用例a=0、b=2、r=4运行修正后的代码,输出结果为4,和手动计算结果一致。调整r为更大的偶数时,计算精度会同步提升,不会出现大幅波动。
内容的提问来源于stack exchange,提问作者user15464781
相关产品推荐
相关产品推荐

