龙贝格算法-数值分析-实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
与
,
按上式再做线性组合,结果得到柯特斯法的积分值
(4) 重复同样的手续,依据柯特斯法的误差公式可进一步导出下列龙贝格公式 (5) 在步长二分的过程中运用公式(3)~(5)加工三次, 就能将粗糙的积分值 逐步加工成精度较 高的龙贝格 ,或者说,将收敛缓慢的梯形值序列 加工成收敛迅速的龙贝格值序列
。这种加速方法称龙贝格算法。
五、案例应用 ....................................................................................................................................... 11
5.1 案例分析: ................................................................................................................................. 11 5.2 计算: ......................................................................................................................................... 12 5.3 结果分析: ................................................................................................................................. 13
)
(2)
4 / 13
直接验证易知 (3) 这就是说,用梯形法二分前后两个积分值 法的积分值 。 与 按式(3)做线性组合,结果得到辛普生
再考察辛普生法。按 ,其截断误差与 成正比。因此,若将步长折半,则误差相应的减 至 1/16,即有
由此得
不难验证, 上式右端的值其实等于
, 就是说, 用辛普生法二分前后的两个积分值 ,即有
六、总结 ............................................................................................................................................... 13
?
?
No
输出
6 / 13
3.2 龙贝格算法的代码实现:
void { double h,T1,T2,S,S1,S2,C1,C2,R1,R2,z[100][4]; int k=1; h=b-a; while(1) { S=0; for(double x=a+h/2;x<b;x+=h) S+=f(x); T2=(T1+h*S)/2; z[k][0]=T2; S2=T2+(T2-T1)/3; z[k][1]=S2; if(k==1); else { C2=S2+(S2-S1)/15; z[k][2]=C2; if(k==2); else { R2=C2+(C2-C1)/63; z[k][3]=R2; if(k==3); else { if(fabs(R2-R1)<e) break; } R1=R2; } C1=C2; } k++;h/=2;T1=T2;S1=S2; } T1=(f(a)+f(b))*h/2; z[0][0]=T1; Romberg(double a,double b)
5 / 13
三、程序实现
3.1 龙贝格算法的流程图如下:
输入 a , b ,
h=b-a;
( ( )
( ))
;k=1;
S=0;
x=a+h/2;
S=S+f(x);
x=x+h;
< x<b ?
(
)
(
)
k=1 No (
?
Yes
K=k+1;h=h/2;
)
k=2 No (
Hale Waihona Puke Baidu
?
Yes
) Yes
k=3 No | Yes NO |
1.1 任务 ............................................................................................................................................... 4 1.2 分析 ............................................................................................................................................... 4
二、算法分析与设计 ............................................................................................................................. 4 三、程序实现 ......................................................................................................................................... 6
7 / 13
printf("%3c %6c %12c %12c %12c\n",'k','T','S','C','R'); for(int i=0;i<k;i++) { printf("%3d",i); if(i<3) { for(int j=0;j<=i;j++) printf("%12.7f ",z[i][j]); printf("\n"); } else { for(int j=0;j<4;j++) printf("%12.7f ",z[i][j]); printf("\n"); } } }
4.1 测试函数(1):............................................................................................................................... 8 4.2 测试函数(2):.................................................................................................................................. 9 4.3 测试曲线(3):............................................................................................................................. 10
3 / 13
一、任务综述于分析
1.1 任务
1、 根据所掌握龙贝格算法,独立编写程序,实现具体问题的求解等; 2、 自己设计一个多项式,根据设定的代数多项式进行测试,调式程序; 3、 对所设计的程序解决实际问题并分析,撰写分析报告
1.2 分析
1、 首先先明确什么是龙贝格算法,了解他的基本原理,画出流程图,编写程序代码。 2、 自己设计一个多项式,对他利用龙贝格算法求出他的积分。并与真实值比较,检测程序是否有错误。 并进一步修改完善程序。可以多试几个多项式,来判断程序的正确性。 3、 任务三实际上是求平面曲线长的问题。利用弧长微分公式可求得结果。
四、测试
4.1 测试函数(1):
∫ 解:对整个区间[0,1]利用龙贝格算法计算结果(误差限制为 ( ) 考虑到特殊情况即当 x=0 时,由于积分可知:f(0)=1。利用程序可得到如下数据: )。
8 / 13
图中的 k 表示二分的次数,T 是复化梯形公式得到的结果,S 是通过辛普生公式得到的结 果,C 是牛顿-科特斯公式得到的结果,R 是龙贝格公式得到的结果。而积分的准确值为 0.9460831,精度为 7 位。 我们看到,这里用二分 3 次的数据(它们的精度都很低,只有二三位有效数字),通过三次 加速获得了测试函数(1)需要二分 10 次才能求出的结果,而加速过程的计算量(仅仅做了 几次四则运算而不需要求函数值)可以忽略不计,可见龙贝格加速过程的效果是极其显著 的。
二、算法分析与设计
根据梯形法的误差公式,积分值 的截断误差大致与 减至 ,既有 成正比,因此步长减半后误差将
将上式移项整理,知 ( 由此可见,只要二分前后两个积分值 ) (1) 的误差 的一种补
与 相当接近,就可以保证计算结果 ),如果用这个误差值作为
很小。按式(2),积分值得误差大致等于 ( 偿,可以期望,所得到的 ̅ 应当是更好的结果。 (
四、测试 ................................................................................................................................................. 8
3.1 龙贝格算法的流程图如下: ....................................................................................................... 6 3.2 龙贝格算法的代码实现: ........................................................................................................... 7
设计的方法和步骤 查阅资料,展开充分理论分析,在掌握算法原理后进行软件设计,完成下列任务: 1、 熟悉此次设计的目标,查阅相关资料; 2、 对算法理论进行剖析,论证算法实现的可行性; 3、 根据可行的算法设计,进行软件程序实现,并最终解决实际问题。
1 / 13
设计工作计划 本案例时间为 5 天,具体安排如下 熟悉课设目标,查阅相关资料:1 天 算法理论进行剖析,论证算法实现的可行性:1 天 根据可行的算法设计,进行软件程序实现:2 天 对所设计的程序解决实际问题并分析,撰写分析报告:1 天
主要参考资料
《数值分析简明教程》 《数值分析课程设计》
王能超 陈越、童若锋
高等教育出版社 浙江大学出版社
教研室签字: 年 月 日
院签字: 年 月 日
2 / 13
目录
目录 ......................................................................................................................................................... 3 一、任务综述于分析 ............................................................................................................................. 4
《数值分析)》课程设计任务书
指导教师姓名 课程设计题目 设计目的、任务和要求 (一) 目的 要求学生运用龙贝格算法解决实际问题(塑料雨篷曲线满足函数 y(x)=lsin(tx),则给定雨篷的长度后, 求所需要平板材料的长度)。 (二)任务 1. 根据所掌握龙贝格算法,独立编写程序,实现具体问题的求解等; 2. 自己设计一个多项式,根据设定的代数多项式进行测试,调式程序; 3. 对所设计的程序解决实际问题并分析,撰写分析报告。 (三)要求 学生 1 个人组成一个小组,要求根据上述任务,通过查找资料,完成程序设计,并撰写分析报告,报告 要体现工作过程、测试结果、分析等内容。 王恒友 龙贝格算法的应用 教研室 人数 1 学时 信计 5天