合肥工业大学计算方法总结计划复化梯形公式实验.docx
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥工业大学计算方法复化梯形公式实验
《计算方法》实验报告
学号姓名班级实验项目名称
一、实验名称
实验二数值积分
实验二数值积分
二、实验目的:
(1)
悉复化梯形方法、复化Simpson
熟方法、梯形递推
算法、龙贝格算法;
(2)
编程实现复化梯形方法、复化Simpson
能方法、梯
形递推算法、龙贝格算法;
(3)理
解并掌握自适应算法和收敛加速算法的基本思
想;
(4)分
析实验结果体会各种方法的精确度,建立计算机
求解定积分问题的感性认识
三、实验内容及要求
(1)设计复化梯形公式求积算法,编制并调试相
应的函数子程序
(2)设计复化辛浦生求积算法,编制并调试相应
的函数子程序
( 3)用龙贝格算法计算0sin x dx
1
x
计算机科学与工程学院
输入:积分区间,误差限
输出:序列 Tn ,Sn,Cn,Rn 及积分结果(参考书本P81 的表 2-5)
取n=2,4,8,16,精确解为 0.9460831
四、实验原理及算法描述
在许多实际问题中,常常需要计算定积分b
f (x)dx 的
a
值。根据微积分学基本定理,若被积函数f(x) 在区间[a,b] 上连续,只要能找到f(x) 的一个原函数F(x) ,便可利用牛顿 -莱布尼兹公式 b f (x) F (b) F (a) 求得积分值。
a
但是在实际使用中,往往遇到如下困难,而不能
使用牛顿 -莱布尼兹公式。
(1)找不到用初等函数表示的原函数
(2)虽然找到了原函数,但因表达式过于复杂而不
便计算
(3) f(x) 是由测量或计算得到的表格函数
由于以上种种困难,有必要研究积分的数值计算
问题。
利用插值多项式P
则积分b
n ( x ) f ( x )
f ( x)dx 转化为a b P n( x )dx,
a
算机科学与工程学院
然易算。b
a
P
n (
x
)
dx称插型求公式。最的插
型求公式是梯形公式和 Simpson 公式,。当求点提供多,可以分段使用少点的梯形公式和Simpson 公式,并称复化梯形公式、复化 Simpson
公式。如步未知,可以通差限的控制用区逐次分半的策略自取步的方法称自适算法。梯形推公式出了区分半前后的推关系。由梯形推公式求得梯形序列,相序列作性合得Simpson 序列 , Simpson 序列作性合得柯特斯序列 , 柯特斯序列作性合的格序列。若 |R2-R1|< ,出 R2; 否⋯依此推。如此加工数据
的程叫格算法,如下所示:
复化梯形公式 T n1n1
h[ f ( x0 )2 f ( x k ) f ( x n )]
2k1
复化 Simpson 公式S
n h
n1n1
[ f ( x0 ) 2 f ( x k ) f ( x n ) 4 f ( x1 )]
6k1k0k2
梯形推公式 T
2 n T n h n1
f ( x k 1
) 2 2 k02
加平均公式:4T2 n T n
S n
42 S2 n S n43 C 2n C n
4 1421 C n431R n
格算法大大加快了差收的速度,由梯形序列O(h2) 提高到格序列的 O(h8)
五、程序代码及实验结果
1.主程序
计算机科学与工程学院
int main()
{
//cout << longbeige(0, 1, 0.0000001);
cout<< " 请输入你的区间和误差限度: " << endl;
double x, y, z;
cin>> x>> y >> z;
cout<< " 根据龙贝格算法求出的精确值为: "<< longbeige(x, y, z)<< endl;
cout<< "K"<< ""<< "T"<< ""<< "S" << ""<< "C"<< ""<< "R" << endl;
cout<< "0"<< ""< cout<< "1"<< ""< cout<< "2"<< ""<< tixing(0, 1, 4)<< ""<< xingbusheng(0, 1, 2)<< ""<<(( double (16/15))* xingbusheng(0, 1, 2)) -(double (1/15))*xingbusheng(0, 1, 1)<< endl; cout<< "3"<< ""< cout<< "4"<< ""<< tixing(0, 1, 16)<< " "<< xingbusheng(0, 1, 8)<< " "<< (( double (16 / 15))* xingbusheng(0, 1, 4)) - (double (1 / 15))*xingbusheng(0, 1, 2)<< " "<< longbeige(0, 1, 0.00000001)<< endl;; cout<< "the result "<<4<<" is "<< longbeige(0, 1, 0.00000001); return 0; } 2.复化梯形公式子程序 : double tixing( double a, double b, int n) { double fa = f( a); double fb = f( b); double h = ( b- a) /n; double fxk = 0.0; for ( int k = 1; k <=n - 1; k++) { double xk = a + k*h; fxk = f(xk) + fxk; } double res = (h / 2.0)*(fa + 2.0*fxk + fb); return res; }