重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx

上传人:b****8 文档编号:10746901 上传时间:2023-02-22 格式:DOCX 页数:13 大小:18.42KB
下载 相关 举报
重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx_第1页
第1页 / 共13页
重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx_第2页
第2页 / 共13页
重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx_第3页
第3页 / 共13页
重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx_第4页
第4页 / 共13页
重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx

《重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx》由会员分享,可在线阅读,更多相关《重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx(13页珍藏版)》请在冰豆网上搜索。

重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx

重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc

 

重庆邮电大学设计成绩:

2012级数理大类

 

《数值计算方法》课程设计

 

姓名:

张云华

刘贞宇

班级:

1101201

1101201

学号:

2012213273

2012213348

 

设计时间:

2013.12.27

 

指导教师:

尹龙军

 

1

 

.3

 

.3

 

.3

 

VC4

 

9

 

10

 

2

 

一、课程设计目的

1)学会用数值积分避开求f(x)的原函F(x)的繁琐步骤,并可以有效的控制结果。

2)在某些求积函数中,用数值积分求解一些原函数F(x)不能用初等函数表示成有限形式。

3)熟练掌握用复化梯形法,复化辛甫生法和龙贝格法求解积分。

4)编程实现复化梯形法,复化辛甫生以及龙贝格算法对积分的计算。

二、课程设计内容(题目)

 

数值积分收敛速度的比较

 

分别按下述计算方案求积分I

excosxdx的近似值,并列表给出对分节点的积分值,

0

从而比较其收敛速度。

积分的准确值为:

I12.070346316

 

方案I

复化梯形法

方案II

复化辛甫生法

方案III

龙贝格算法

三、问题的分析(含涉及的理论知识、算法等)

1)复化梯形公式:

把积分区间[a,b]等分为m个小区间,令步长

h=ba,求积节

m

xiai

h,i=0,,1,2m,等距节点复化梯形公式为

Tm

h

m1

f(xj)f(b))

(f(a)2

2

j1

先分段,通过避开直接算积分的繁琐步骤,直接计算函数值,再通过复化梯形公式求得积分的近似值,当n达到一定程度时,所得的结果就近似等于积分的值了.计算步骤:

算出f(a),f(b)以及f(xk)相应的值,将所有值相加后乘以h/2.即得到积分的值

 

2)复化辛甫生公式:

将区间[a,b]分成n等分,每等分称为一个子区间,其长度为h=(b-a)/n,分点为xk=a+kh,k=0,1,2,....即a=x0

记子区间[xk,xk+1]的中点为xk+1/2,即xk+1/2=(xk+xk+1)/2=xk+h/2(k=0,1,2,...,n-1)

 

3

 

复化辛甫生公式

Sn

n1h(f(xk)4f(x

k

1)f(xk1))

k

06

2

h

n1

n1

(f(a)4f(x

1)

2f(xk)f(b))

6

k

2

k1

k0

和复化梯形公式的算法类似

依次算出函数的值,最后得出积分的近似值,当n较大

时,结果近似等于积分的值.3)龙贝格算法

1.算出f(a)和f(b),根据数值计算方法教材公式5.26计算T1;

2.将[a,b]分半,算出f((a+b)/2)后,根据公式5.26计算T2;;

3.再将区间分半,算出f(a+(b-a)/4)及f(a+3*(b-a)/4),并根据公式5.26计算T4.

4.将区间再次分半,计算T8.

5.将区间再次分半,类似上述过程计算T16.

 

四、计算过程(含涉及编写的程序、运行环境、计算结果截屏等)

流程图1复化梯形公式

 

输入a,b,n

 

h=(a-b)/nk=1

 

X=a+khf(x)=exp(x)*cos(x)

 

F(x)=F(x)+f(x)

 

k++

n<=k?

Tn=0.5h(f(a)+f(b)+2F(x))

 

输出Tn

 

4

 

图1:

复化梯形公式计算结果1

 

图2:

复化梯形公式计算结果2

 

5

 

辛甫生公式复化求积:

流程图2复化辛普森公式

 

输入a,b,n

 

h=(a-b)/nk=1

 

X=a+khf(x)=exp(x)*cos(x)

 

X1={[a+(k-1)h]+X}/2f(x1)=exp(x1)*cos(x1)

 

F(x)=F(x)+f(x)F1(x)=F1(x)+f(x1)

 

是k++

K<=k?

 

Sn=(h/6)(f(a)+f(b)+2F(x)+4F1(x))

 

输出Sn

 

图3复化辛普森公式计算结果

 

6

 

图4龙贝格算法计算结果

 

五、问题求解结果的分析与结论

 

三种算法对分节点的积分值表

 

7

 

表1三种算法对分节点的积分值表

复化梯形公式

复化辛甫生公式

龙贝格算法

n=1

-34.77851492

-11.59283831

-34.77851492

n=2

-17.38925746

-11.98494282

-17.38925746

n=3

-14.35266097

-12.05157185

n=4

-13.33602148

-13.33602148

 

图5复化辛普森公式收敛

 

8

 

结果分析:

通过计算发现,三种解法中,用复化辛甫生公式计算积分时收敛速度较快,复化梯形公式和龙贝格算法的收敛速度较慢,且后面两者的结果基本一致,但相对来说,龙贝格算法的计算量更少,更加方便.如果用折线图来描述的话,那么辛甫生算法的图像较为平整,变化幅度比较小.

六、课程设计的总结与体会(含每位同学承担的主要工作等)

 

1)组员分别承担的任务

张云华:

写报告,用复化辛甫生公式计算积分的编程,分别用三种算法计算节点的积分值并完成列表.

心得与体会:

在课程设计的同时不仅巩固了以前所学过的知识,而且可以学到很多在书本上所没有学到过的知识,特别是团队合作能力。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,增强了我们处理问题的能力。

还有只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握,从而提高自己的实际动手能力和独立思考的能力。

刘贞宇:

用复化梯形公式和龙贝格算法计算积分的编程,ppt的制作

心得与体会:

学习必须通过实践,通过实践发现了自己的不足之处,并及时纠正。

在求解过程中也遇到了各种各样的问题,还有在编写程序是要注意代码,要仔细,一个数字弄错了就可能导致运行时结果出错或不合实际。

因此我们应多课外实践来加深我们对课本的理解。

 

附录:

源代码

复化梯形公式:

#include"stdio.h"

#include"math.h"

voidmain()

{

intk;

doublea,b,n,h,x;

doublef,f1,f2,T,F=0.0;

 

printf("请输入abn:

");

scanf("%lf%lf%lf",&a,&b,&n);

h=(b-a)/n;

 

9

 

for(k=1;k

{

x=a+k*h;

f=exp(x)*cos(x);

printf("\nf=%0.7f",f);

F+=f;

printf("\nF=%0.7f",F);

}

if(a!

=0.0)

f1=exp(a)*cos(a);

else(f1=1.0);

printf("\nf1=%0.7f",f1);

f2=exp(b)*cos(b);

printf("\nf2=%0.7f",f2);

T=0.5*h*(f1+2*F+f2);

printf("\nT=%0.7f",T);

}

 

复化辛普森公式

#include"stdio.h"

#include"math.h"

voidmain()

{

intk;

doublea,b,n,h;

doublex,f,f1,f2,F1=0.0,F2=0.0,S=0.0;

 

printf("请输入abn:

");

scanf("%lf%lf%lf",&a,&b,&n);

h=(b-a)/n;

 

for(k=0;k

{

x=a+k*h+0.5*h;

f=exp(x)*cos(x);

printf("\nf=%0.7f",f);

F1+=f;

printf("\nF1=%0.7f",F1);

}

for(k=1;k

{

f=0;

x=a+k*h;

f=exp(x)*cos(x);

 

10

 

printf("\nf=%0.7f",f);

F2+=f;

printf("\nF2=%0.7f",F2);

}

if(a!

=0)

f1=exp(a)*cos(a);

else(f1=1.0);

f2=exp(b)cos(b);

S=h/6.0*(f1+4*F1+2*F2+f2);

printf("\nS=%0.7f",S);

 

龙贝格算法:

#include

#include

#definee1e-5

#definea0//积分下限a

#defineb3.14159//积分上限b

#definef(x)exp(x)*cos(x)//被积函数f(x)

doublet[100][100];

intmain()

{

intn,k,i,m;

doubleh,g,p;

h=(double)(b-a)/2;

t[0][0]=h*(f(a)+f(b));

k=1;

n=1;

do//Romberg算法

{

g=0;

for(i=1;i<=n;i++)

g+=f((a+((2*i-1)*h)));

t[k][0]=(t[k-1][0]/2)+(h*g);

for(m=1;m<=k;m++)

{

p=pow(4,(double)(m));

t[k-m][m]=(p*t[k-m+1][m-1]-t[k-m][m-1])/(p-1);

}

m-=1;

h/=2;

n*=2;

k+=1;

}

 

11

 

while(fabs(t[0][m]-t[0][m-1])>e);//自定义误差限eprintf("%.8lf",t[0][m]);

 

return0;

}

 

12

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1