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

如何在循环运行1次后重置area为0?左矩形法求面积问题

左矩形法积分的n值查找问题解决

原代码与问题

用户的原代码如下:

a = 0 
b = 2
n = 1
delta_x = (b-a) / n
x = 0
area = 0

def f(x):
    return 1/2*x**2 + 4

while area < 9.333:
    for i in range (0, n):
        area += f(x) * delta_x  
        x += delta_x
    n += 1 # i want to set the area to 0 here so that i can check for what n value area < 9.333
print(n)

这段代码想用左矩形法计算f(x) = 1/2*x² + 4在[0,2]区间的曲线下面积,目标是找出面积小于9.333时对应的n值,但尝试多次重置area都没生效——核心问题是循环逻辑里的变量初始化位置错误,导致每轮计算累积了上一轮的结果。

修正方案

问题根源在于delta_x、x、area这些变量只在循环外初始化了一次,后续n变化时没有重新计算和重置。把这些变量的初始化移到while循环内部,就能保证每轮计算都是基于当前n的全新计算:

a = 0 
b = 2
n = 1

def f(x):
    return 1/2 * x**2 + 4

target_area = 9.333

while True:
    # 每次迭代n时,重新计算步长、重置x和面积
    delta_x = (b - a) / n
    x = a
    area = 0
    
    # 左矩形法计算当前n对应的面积
    for _ in range(n):
        area += f(x) * delta_x
        x += delta_x
    
    # 判断是否满足条件,满足就输出n并退出循环
    if area < target_area:
        print(n)
        break
    n += 1

关键说明

  • 每轮循环开始时重置area为0,确保当前n的面积计算不受上一轮影响;
  • 每次n更新后重新计算delta_x,并把x重置为区间起点a,保证左矩形的起始点正确;
  • 调整循环终止逻辑,先计算当前n的面积再判断条件,避免初始值导致的逻辑误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:30:49