数值逼近课程设计(4)——复化求积公式

    技术2022-07-11  91

    问题背景

    复化求积公式(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);
    Processed: 0.013, SQL: 9