黎曼(Riemann)对定积分的定义是:积分区间划分为无数子区间,子区间内任意一点的函数值乘以子区间的长度得到一个矩形面积,然后将这些矩形面积累加起来可以得到积分值。中点法则(Midpoint Rule)是取子区间的中点的函数值作为矩形的高,如图所示

对于定积分 ,将积分区间 划分成4个等长子区间,每个子区间中点的函数值为 .可以得到定积分的近似值为:
如果划分为8个子区间,可得到
精确值是0.69314781... 子区间划分越多,误差就越小。
为了配合编程实现,可以通过将子区间的数量增加三倍来设计算法,而不是前面的辛普森,龙贝格公式增加两倍子区间。如图所示,空心圆圈表示必须计算的新值,而实心圆圈表示前一个迭代步计算的值。

可得到递推式:
[算例]用中点法则求
import math### Midpoint ruler求积分### y = 4/( 1+x^2 )def Func(x):return 4/( 1+pow(x,2) )def MidPointIntegrate(Func, a, b, eps = 1e-6):kmax = 5000 # 最大迭代步数f1p6 = 1./6.f5p6 = 5./6.h = b-an = 1m0 = h * Func(a+0.5*h)for k in range(1,kmax+1):sumf = 0for i in range(1,n+1):sumf += Func(a+(i-f5p6)*h) + Func(a+(i-f1p6)*h)m = (m0 + h*sumf)/3if (math.fabs(m - m0) <= eps * math.fabs(m)): breakh /= 3n *= 3m0 = mif (k >= kmax): print("已经达到最大迭代步数!")return mS = MidPointIntegrate(Func, 0, 1, eps = 1e-6)print(S)
结果为
