|
在区间 不大时 , 用梯形公式、辛卜生公式计算定积分是简单实用的 , 但当区间 较大时 , 用梯形公式、辛卜生公式计算定积分达不到精确度要求 . 为了提高计算的精确度,我们将 [a,b] 区间n等分,在每个小区间上应用梯形公式、辛卜生公式计算定积分,然后将其结果相加,这样就得到了复化梯形公式和复化辛卜生公式。 1. 复化梯形公式 将积分区间 等分 , 设 , 则节点为 对每个小区间上应用梯形公式 , 然后将其结果相加,则得 (3.14) 称 (3.14) 式为复化梯形公式 . 当 在 [a,b] 上有连续的二阶导数时,则复化梯形公式 (3.14) 的余项推导如下: 因为
所以在区间 [a,b] 上公式 (3.14) 的误差为
又因为 在区间 [a,b] 上连续,由连续函数的性质知,在区间 [a,b] 上存在一点 ,
于是 ( 3.15 ) |
复化梯形公式,复化抛物线公式和Romberg求积法的算法程序:
以下程序均定义误差限为1*10^-5;
1)复化梯形公式:
#include <stdio.h>
#include <math.h>
#define e 1e-5
#define a 0
#define b 1
#define f(x) (4/(1+(x*x)))
int main()
{
return 0;
}
2)复化抛物线公式:
#include <stdio.h>
#include <math.h>
#define e 1e-5
#define a 0
#define b 1
#define f(x) (4/(1+(x*x)))
int main()
{
}
3)Romberg求积法:
#include <stdio.h>
#include <math.h>
#define e 1e-5
#define a 0
#define b 1
#define f(x) (4/(1+(x*x)))
double t[100][100];
int main()
{
}
给定精度,定义误差限为1*10^-5,分别求出步长的先验估计值:用复化梯形公式计算,要求h<0. 007746。用复化抛物线公式计算,要求h<0.131607。而实际上,在运用后验估计的程序中,以相同的精度,得到的复化梯形步长为h= 0.003906,得到的复化抛物线步长为h=0.0625,它们大致上分别为先验估计值的一半,符合要求。
在实践中比较上体三种算法的计算量,当取相同精度1*10^-5时,复化梯形调用函数f257次,孵化抛物线公式调用函数f17次,Romberg算法调用函数 f17次,从计算量上看,后两者较小。