复化求积方法对提高积分精度是行之有效的,但必须事先给出恰当的步长h。如果步长太长,则难以保证精度,太小则增加计算量。在实际应用中,一般采用变步长积分法来解决该问题,即让步长不断减小,考察在不同步长条件下的计算结果的精度,一旦计算结果满足精度要求,则可以停止计算,给出正确答案。这是面向计算机的解决方案。在人工计算的条件下,一般采用一种特殊的变步长法,即采用逐次二分积分区间的方法得到不断减半的步长,再应用复化求积方法,可推导出某种递推公式,既可减少计算量,又可以较快地达到计算精度的要求。
- 变步长梯形法
对于
I
=
∫
a
b
f
(
x
)
d
x
I=\int_a^bf(x)dx
I=∫abf(x)dx,将积分区间
[
a
,
b
]
[a,b]
[a,b]分成n等分,则共有
n
+
1
n+1
n+1个分点:
x
k
=
a
+
k
H
(
k
=
0
,
1
,
2
,
⋯
,
n
)
,
H
=
(
b
−
a
)
/
n
x_k=a+kH \quad (k=0,1,2,\cdots,n),H=(b-a)/n
xk=a+kH(k=0,1,2,⋯,n),H=(b−a)/n
设此时用复化梯形公式求得的积分值为
T
n
T_n
Tn。进一步地,将积分区间
[
a
,
b
]
[a,b]
[a,b]分成2n等分,则共有
2
n
+
1
2n+1
2n+1个分点,设此时用复化梯形公式求得的积分值为
T
2
n
T_{2n}
T2n。显然,在计算
T
2
n
T_{2n}
T2n的过程中所用的分点有一半是计算
T
n
T_n
Tn时用过的,重复计算是浪费。为此,有必要研究
T
n
T_n
Tn和
T
2
n
T_{2n}
T2n之间的关系。
对于任意一个子区间
[
x
k
,
x
k
+
1
]
[x_k,x_{k+1}]
[xk,xk+1],用梯形公式计算的积分值记为
T
1
,
k
T_{1,k}
T1,k,在其中间增加一个节点
x
k
+
1
2
=
1
2
(
x
k
+
x
k
+
1
)
x_{k+\frac{1}{2}}=\frac{1}{2}(x_k+x_{k+1})
xk+21=21(xk+xk+1)后,用复化梯形公式计算的积分值为
T
2
,
k
T_{2,k}
T2,k。则有:
T
1
,
k
=
1
2
H
[
f
(
x
k
)
+
f
(
x
k
+
1
)
]
T
2
,
k
=
1
4
H
[
f
(
x
k
)
+
2
f
(
x
k
+
1
2
)
+
f
(
x
k
+
1
)
]
T_{1,k}=\frac{1}{2}H[f(x_k)+f(x_{k+1})] \\ T_{2,k}=\frac{1}{4}H[f(x_k)+2f(x_{k+\frac{1}{2}})+f(x_{k+1})]
T1,k=21H[f(xk)+f(xk+1)]T2,k=41H[f(xk)+2f(xk+21)+f(xk+1)]
分析
T
2
,
k
T_{2,k}
T2,k和
T
1
,
k
T_{1,k}
T1,k的关系,可得:
T
2
,
k
=
1
2
T
1
,
k
+
1
2
H
⋅
f
(
x
k
+
1
2
)
T_{2,k}=\frac{1}{2}T_{1,k}+\frac{1}{2}H·f(x_{k+\frac{1}{2}})
T2,k=21T1,k+21H⋅f(xk+21)
所以
T
2
n
=
1
2
T
n
+
1
2
H
∑
k
=
0
n
−
1
f
(
x
k
+
1
2
)
(1)
T_{2n}=\frac{1}{2}T_n+\frac{1}{2}H\sum_{k=0}^{n-1}f(x_{k+\frac{1}{2}}) \tag{1}
T2n=21Tn+21Hk=0∑n−1f(xk+21)(1)
或
T
2
n
=
1
2
T
n
+
h
∑
k
=
0
n
−
1
f
(
x
k
+
1
2
)
T_{2n}=\frac{1}{2}T_n+h\sum_{k=0}^{n-1}f(x_{k+\frac{1}{2}})
T2n=21Tn+hk=0∑n−1f(xk+21)
式中,
∑
k
=
0
n
−
1
f
(
x
k
+
1
2
)
\sum_{k=0}^{n-1}f(x_{k+\frac{1}{2}})
∑k=0n−1f(xk+21)为区间
[
a
,
b
]
[a,b]
[a,b]分成n等分再次二分而增加的新节点的函数值之和。要特别注意的是
H
=
(
b
−
a
)
/
n
H=(b-a)/n
H=(b−a)/n为区间
[
a
,
b
]
[a,b]
[a,b]分成n等分的步长,
h
=
b
−
a
2
n
h=\frac{b-a}{2n}
h=2nb−a为区间
[
a
,
b
]
[a,b]
[a,b]分成2n等分的步长,
x
k
+
1
2
=
a
+
(
k
+
1
2
)
H
x_{k+\frac{1}{2}}=a+(k+\frac{1}{2})H
xk+21=a+(k+21)H。
如果将区间 [ a , b ] [a,b] [a,b]继续分成4n等分、8n等分、···、2n(i=0,1,···)等分,均可按照公式(1)递推计算出来。
在实际计算中,利用某二分前后两次积分值之差的绝对值 ∣ T 2 n − T n ∣ ≤ ϵ |T_{2n}-T_n|\leq \epsilon ∣T2n−Tn∣≤ϵ,来判断积分近似值 T 2 n T_{2n} T2n是否满足精度要求。
- 变步长梯形法的误差
在变步长梯形法中,把区间
[
a
,
b
]
[a,b]
[a,b]分成n等分后,用复化梯形公式计算积分I的近似值为
T
n
T_n
Tn,截断误差为:
R
n
=
I
−
T
n
=
−
(
b
−
a
)
12
(
b
−
a
n
)
2
f
(
2
)
(
η
n
)
R_n=I-T_n=-\frac{(b-a)}{12}(\frac{b-a}{n})^2f^{(2)}(\eta_n)
Rn=I−Tn=−12(b−a)(nb−a)2f(2)(ηn)
把区间
[
a
,
b
]
[a,b]
[a,b]分成2n等分后,用复化梯形公式计算积分I的近似值为
T
2
n
T_{2n}
T2n,截断误差为:
R
2
n
=
I
−
T
2
n
=
−
(
b
−
a
)
12
(
b
−
a
2
n
)
2
f
(
2
)
(
η
2
n
)
R_{2n}=I-T_{2n}=-\frac{(b-a)}{12}(\frac{b-a}{2n})^2f^{(2)}(\eta_{2n})
R2n=I−T2n=−12(b−a)(2nb−a)2f(2)(η2n)
当
f
(
2
)
(
η
)
f^{(2)}(\eta)
f(2)(η)在区间
[
a
,
b
]
[a,b]
[a,b]上变化不大时,有
f
(
2
)
(
η
n
)
≈
f
(
2
)
(
η
2
n
)
f^{(2)}(\eta_n)\approx f^{(2)}(\eta_{2n})
f(2)(ηn)≈f(2)(η2n),故
R
2
n
R
n
=
1
−
T
2
n
1
−
T
n
≈
1
4
\frac{R_{2n}}{R_n}=\frac{1-T_{2n}}{1-T_n}\approx \frac{1}{4}
RnR2n=1−Tn1−T2n≈41
整理,得事后误差估计式为:
1
−
T
2
n
≈
1
3
(
T
2
n
−
T
n
)
1-T_{2n}\approx \frac{1}{3}(T_{2n}-T_n)
1−T2n≈31(T2n−Tn)
也就是说,用前后两次计算的结果之差来估计误差,两者越接近则精度越高。这是所谓的误差的时候估计。将
I
I
I和
T
2
n
T_{2n}
T2n的误差补偿给
T
2
n
T_{2n}
T2n,得到比
T
2
n
T_{2n}
T2n更精确的积分近似值:
I
‾
=
4
3
T
2
n
−
1
3
T
n
\overline I=\frac{4}{3}T_{2n}-\frac{1}{3}T_n
I=34T2n−31Tn