实验三 龙贝格求积分
一、 实验目的
用算法实现龙贝积分运算,求解I=∫
1X3/20
dx的积分
二、 实验原理
三、 算法设计与程序流程图
算法设计:(先假定所求积分二分最大次数次数为20) 1、 先求T[k][0] 2、 再由公式
mT(k)求T[i][j]
m44m1T(k1)1(k)m14m1Tm1(k1,2,).3、 在求出的同时比较T[k][k]与T[k-1][k-1]的大小,如果二者之差的绝对值小于1e-5,就停止求T[k][k];此时的k
就是所求的二分次数,而此时的T[k][k]就是最终的结果 4、 打印出所有的T[i][j];
程序流程图:
开始 N=20,a=0,b=1 求T[0][0] K=0 K++,h=h/2;n=2k-1;s=0 m=0 m=m+1 s+=(*f)(a+(2*m-1)*h);
N m<=n Y T[k][0] = 0.5*T[k-1][0] + h*s;
N k=N 求T[i][j],k=0 K++ m=0
m++ T[k][m]=pow(4,m)/(pow(4,m)-1)*T[k][m-1]-1/(pow(4,m)-1)*T[k-1][m-1] N m<=k N fabs(T[k][k]-T[k-1][k-1])<1e-5
Y 输出 结束 四、 源程序
#include#include #include #define a 0 //区间下限 #define b 1 //区间上限 #define N 20 //最大加速次数 double f(double x) { }void main() {
double h=b-a; int i,j,k,m,n; double T[N][N],s;
T[0][0]=h*((*f)(a)+(*f)(b))/2.0; return(pow(x,1.5));
for(k = 1;kh = (b-a) * pow(0.5,k);n = (int)pow(2,k-1);
s=0.0;
for(m=1;m<=n;m++) {
s+=(*f)(a+(2*m-1)*h);
}
T[k][0] = 0.5*T[k-1][0] + h*s; } {
for(j = 0;j<=i;j++)
printf(\"%.6lf \ printf(\"\\n\"); } }
for(k=1;kprintf(\"R=%.6lf\\n\printf(\"k=%d \\n\printf(\"T:\\n\"); for(i = 0;i<=k;i++)for(m=1;m<=k;m++) { }
if(fabs(T[k][k]-T[k-1][k-1])<1e-5) { }
break;
T[k][m]=pow(4,m)/(pow(4,m)-1)*T[k][m-1]-1/(pow(4,m)-1)*T[k-1][m-1];
五、 程序运行
六、 结果分析
如上所示的结果与课本中求得的结果完全一样,表明程序编写正确,且符合要求,事实上,只要再将所求值的精度设置得更小,则所求的结果将更加准确,最终将无限接近于标准值,由上表也可以看出用龙贝格积分法求函数的积分值在精度比较低的情况下就能求到很准确的值!