合肥工业大学计算方法总结计划复化梯形公式实验.docx

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档