SICP 3.5节integral过程求解积分的原理咨询
理解SICP中的积分过程:为什么它能求解积分
要搞懂这个过程为什么能求积分,得先从数值积分的基本逻辑入手,再对应到流的计算上:
数值积分的核心思路
积分的本质是求函数曲线下的面积,用欧拉法(矩形近似)计算时,我们把积分区间拆成无数个长度为dt的小间隔,每个间隔的面积近似为 dt × f(t)(f(t)是被积函数在该时刻的值),把这些小面积累加起来,再加上积分的初始值(对应积分常数,也就是积分在起始点的取值),就得到了积分的近似结果。
对应到流的实现过程
看integral过程返回的流int:
- 流的第一个元素是
initial-value,这就是积分的初始值,比如积分∫ₐᵗ f(x)dx 在t=a时的取值就是0,那初始值就设为0。 - 流的后续元素由
(add-streams (scale-stream integrand dt) int)生成,拆解来看:scale-stream integrand dt:将被积函数的流(integrand是一个流,每个元素对应被积函数在某个时刻的取值)乘以步长dt,得到的就是每个小间隔的近似面积。add-streams把这个面积流和int流相加,相当于把每个小面积累加到前一步的积分结果上,正好对应数值积分的累加逻辑。
举个直观例子
假设被积函数是常数1(对应流(cons-stream 1 1 1 ...)),初始值为0,步长dt=0.1:
int的第一个元素是0(对应t=0时的积分值)- 第二个元素是
0.1×1 + 0 = 0.1(对应t=0.1时的积分值) - 第三个元素是
0.1×1 + 0.1 = 0.2(对应t=0.2时的积分值) - 以此类推,第n个元素就是
0.1×(n-1),完全符合∫₀ᵗ 1dx = t的近似结果,步长越小,结果越精确。
本质是递推关系
这个流的定义其实对应了数值积分的递推公式:int(t + dt) = int(t) + dt × integrand(t)
利用流的延迟计算特性,每一步的积分结果都依赖前一步的输出,从而逐步生成整个积分区间上的近似值序列。
内容的提问来源于stack exchange,提问作者Cruz Caine
相关产品推荐
相关产品推荐

