龙贝格算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

龙贝格算法

一、问题分析

1、1龙贝格积分题目

要求学生运用龙贝格算法解决实际问题(塑料雨篷曲线满足函数y(x)=l sin (tx),则给定雨篷得长度后,求所需要平板材料得长度).

二、方法原理

2、1龙贝格积分原理

龙贝格算法就是由递推算法得来得。由梯形公式得出辛普生公式得出柯特斯公式最后得到龙贝格公式.

在变步长得过程中探讨梯形法得计算规律.设将求积区间[a,b]分为n个等分,则一共有n+1个等分点,n.这里用表示复化梯形法求得得积分值,其下标n 表示等分数。

先考察下一个字段[],其中点,在该子段上二分前后两个积分值

显然有下列关系

将这一关系式关于k从0到n-1累加求与,即可导出下列递推公式

需要强调指出得就是,上式中得代表二分前得步长,而

梯形法得算法简单,但精度低,收敛速度缓慢,如何提高收敛速度以节省计算量,自然式人们极为关心得.

根据梯形法得误差公式,积分值得截断误差大致与成正比,因此步长减半后误差将减至四分之一,既有

将上式移项整理,知

由此可见,只要二分前后两个积分值与相当接近,就可以保证计算保证结果计算结果得误差很小,这种直接用计算结果来估计误差得方法称作误差得事后估计法。

ﻩ按上式,积分值得误差大致等于,如果用这个误差值作为得一种补偿,可以期望,所得得

应当就是更好得结果。

ﻩ按上式,组合得到得近似值直接验证,用梯形二分前后得两个积分值与按式组合,结果得到辛普生法得积分值。

再考察辛普生法。其截断误差与成正比.因此,若将步长折半,则误差相应得减至十六分之一。既有

由此得

不难验证,上式右端得值其实就等于,就就是说,用辛普生法二分前后得两个积分值与,在按上式再做线性组合,结果得到柯特斯法得积分值,既有

重复同样得手续,依据斯科特法得误差公式可进一步导出龙贝格公式

应当注意龙贝格公式已经不属于牛顿—柯特斯公式得范畴.

在步长二分得过程中运用公式加工三次,就能将粗糙得积分值逐步加工成精度较高得龙贝格,或者说,将收敛缓慢得梯形值序列加工成熟练迅速得龙贝格值序列,这种加速方法称龙贝格算法。

三、算法设计

3、1龙贝格积分算法

就就是求出,再走一遍求出,根据求出,再走一遍求出,根据求出,根据求出,再走一遍程序求出,根据得出,根据得出,再根据得出,再走一边程序,得出,根据得出,根据得出,再由得出。再根据相减得绝对值小于其精度。那其中为求出得值.

四、案例分析

4、1龙贝格积分分析

a—积分下限

b—积分上限

n-区间个数

e-积分值要求达到得精度

s—用以存放除积分区间两端点以外得其她各节点函数值得累加与

p-积分区间两端点函数值之与

h-步长值

T1 、T2分别存放二分区间前后梯形积分值

S1 、S2分别存放二分区间前后辛普生积分值

C1 、C2分别存放二分区间前后斯科特积分值

R1、R2分别存放二分区间前后龙贝格积分值

五、总结

5、1龙贝格积分总结

通过本次试验,了解了龙贝格算法得计算过程,了解了龙贝格公式得计算收敛过程,用变步长得方法,逐步减小步长,反复积分,逐步得到所求积分值满足精度要求。一步步从梯形法得递推到辛普森到柯特斯法,最后到龙贝格,让精度逐步升高。

附录

龙贝格积分:

#include "stdio、h"

#include ”math、h”

floatl;

float t;

int main(void){

float f(float);

ﻩfloat a,b,e,h,T1=0,T2=0,S1=0,S2=0,C1=0,C2=0,R1=0,R2=0,k,s,x; ﻩinti=0;

printf("\n****************************************\n");

printf(”****************龙贝格算法**************\n”);

ﻩprintf(”****************************************\n\n");

printf(”请输入积分得下限:");

scanf(”%f",&a);

printf(”\n请输入积分得上限:”);

ﻩscanf("%f",&b);

printf("\n请输入允许误差:");

scanf(”%f”,&e);

printf(”请输入L:”);

ﻩscanf("%f",&l);

ﻩprintf(”请输入T:");

ﻩscanf("%f",&t);

k=1;

ﻩh=b—a;

T1=h*(f(a)+f(b))/2;

ﻩprintf("--—---———-------------\n”);

ﻩprintf("k T2 S2C2 R2\n");

printf("%d %10。7f %10.7f %10.7f %10。7f\n”,i,T1,S1,C1,R1); do

s=0;

ﻩx=a+h/2;

while(x〈b)

s+=f(x);

ﻩx+=h;

}

T2=T1/2+s*h/2;

S2=T2+(T2-T1)/3;

if (k==1) {

ﻩk=k+1;

h=h/2;

ﻩT1=T2;

S1=S2;

else if (k==2)

ﻩC2=S2+(S2—S1)/15;C1=C2;

ﻩk=k+1;

h=h/2;

T1=T2;

S1=S2;

}

else if (k==3)

{

R2=C2+(C2-C1)/63;C2=S2+(S2-S1)/15;C1=C2;k=k+1;h=h/2;T1=T2;S1=S2;

else

{

C2=S2+(S2—S1)/15;

ﻩR2=C2+(C2—C1)/63;

if (fabs(R2-R1)<e)

printf("%d %10.7f %10。7f%10.7f %10。7f\n",i+1,T2,S2,C2,R2);

break;

}

else

{

R1=R2; C1=C2; k=k+1; h=h/2; T1=T2; S1=S2;

}

}

i++;

printf("%d %10。7f %10.7f %10。7f %10.7f\n”,i,T2,S2,C2,R2);}while (1);

getchar();

return 0;

}

float f(float x)

相关文档
最新文档