问题背景
复化求积公式(composite integration rule)是一类重要的求积公式。指将求积区间分为m个子区间,对每个子区间应用同一求积公式,所得到的复合数值积分公式。 在使用和证明中发现,高阶Newton-Cotes公式具有较高的代数精度,但对传播误差的控制是很差的,因此其计算效果也不理想.如果采用低阶方法,则截断误差很大,又常常达不到精度要求。 影响截断误差的一个很重要的参量求积区间的长度,如果积分区间越小,则求积公式的截断误亦越小。这就启发我们先将区间等分,然后在每一小区间上采用低节点的公式,再将其集中起来,这样得到的公式称为复化求积公式。它是提高求积公式精度的重要手段之一。
数值演算
由matlab编写程序,在n取不同值时用三种复化求积公式计算近似值,得到的结果为: 可以看到,随着n的增大,复化求积公式的精度也变得更高,且在n值相同的情况下,复化梯形公式、复化Simpson公式、复化Cotes公式的精度依次提高,这与理论情况也是吻合的。
源代码
Integration.m:
clear;clc
;
format long
fprintf
("n 复化梯形公式 复化Simpson公式 复化Cotes公式");
for i
=2:8
n
=2^i
;
h
=1/n
;
t
=0
;
s
=0
;
c
=0
;
for k
=0:n-1
t
=t+f
(k*h
)+f
((k+1
)*h
);
end
t
=h*t/2
;
for k
=0:2:n-2
s
=s+f
(k*h
)+4*f
((k+1
)*h
)+f
((k+2
)*h
);
end
s
=h*s/3
;
for k
=0:4:n-4
c
=c+7*f
(k*h
)+32*f
((k+1
)*h
)+12*f
((k+2
)*h
)+32*f
((k+3
)*h
)+7*f
((k+4
)*h
);
end
c
=2*h*c/45
;
if n
<10
fprintf
("%d %5.15f %5.15f %5.15f\n",n,t,s,c
)
elseif n
<100
fprintf
("%d %5.15f %5.15f %5.15f\n",n,t,s,c
)
else
fprintf
("%d %5.15f %5.15f %5.15f\n",n,t,s,c
)
end
end
fun
=inline
('exp(x)',
'x');
jingque
=quad
(fun,0,1
);
fprintf
("精确值:%3.15f\n",jingque
);