重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx
《重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx》由会员分享,可在线阅读,更多相关《重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx(13页珍藏版)》请在冰豆网上搜索。
![重庆邮电大学数值计算课程设计213273张云华+213348刘贞宇doc.docx](https://file1.bdocx.com/fileroot1/2023-2/22/daae1eb8-f41b-4863-a850-adc69c952b56/daae1eb8-f41b-4863-a850-adc69c952b561.gif)
重庆邮电大学数值计算课程设计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