求sin(x)积分的JavaScript代码及代码错误排查咨询
积分计算代码问题分析
你的代码错误核心是没有考虑积分近似计算中的区间宽度(Δx),具体问题和修正如下:
缺失区间宽度的乘法
用矩形法近似定积分时,需要将每个采样点的函数值乘以区间的宽度(Δx),再累加得到总面积(积分值)。你当前只累加了sin(x)的函数值,没有乘以每个小区间的宽度Math.PI/180,导致结果是函数值的直接求和,而非积分近似值。循环范围的次要问题
你的循环包含了0到180共181个点,对应180个区间,虽然这不是核心错误,但如果要严格对应n个区间的采样,也可以改为i < 180,不过不影响修正后的结果准确性。
修正后的代码:
let total = 0; const deltaX = Math.PI / 180; for(let i = 0; i <= 180; i++ ) { total += Math.sin(i * deltaX) * deltaX; } console.log(total); // 输出结果接近2
修正后,每次累加的是小矩形的面积(函数值×区间宽度),结果会趋近于sin(x)从0到π的积分真实值2。你之前得到114,是因为直接累加了181个sin(x)的取值,这些值的总和刚好约为114,和积分的计算逻辑完全无关。
内容的提问来源于stack exchange,提问作者Hakan Egne
相关产品推荐
相关产品推荐

