数值分析课程设计说明书.docx
《数值分析课程设计说明书.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计说明书.docx(24页珍藏版)》请在冰豆网上搜索。
数值分析课程设计说明书
数值分析课程设计说明书
班级:
计算B092姓名:
设计题目:
数值积分软件
设计时间:
2012.2.27至2012.3.2
指导教师:
李慧
评语:
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
设计总说明
数值积分是求定积分的近似值的数值方法。
即用被积函数的有限个抽样值的离散或加权平均近似值代替定积分的值。
求某函数的定积分时,在多数情况下,被积函数的原函数很难用初等函数表达出来,因此能够借助微积分学的牛顿-莱布尼兹公式计算定积分的机会是不多的。
另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解。
由于以上原因,数值积分的理论与方法一直是计算数学研究的基本课题。
对微积分学做出杰出贡献的数学大师,如I.牛顿、L.欧拉、C.F.高斯等人也在数值积分这个领域做出了各自的贡献,并奠定了它的理论基础。
用数值积分的计算理论加以C++语言编写程序来计算数值积分,不仅可以更好的掌握数值积分本身,还可以提高软件开发的能力。
把所学知识用于实际生活中是非常有必要的。
好的积分软件不仅可以计算出给定函数的定积分,还能准确的计算出各种积分方法的积分值。
因此,数值积分软件的开发是非常实用及有必要的。
关键词:
龙贝格算法;自适应梯形法;复化辛卜生法;MFC
前言
本课程设计是在学习了数值分析和C语言等有关课程后,通过实际的操作来熟悉数值分析和相关软件的应用,培养独立的完成对相关课题或者项目的分析能力、设计能力和调试能力。
好的数值积分软件可以方便的为我们求解出积分值。
课程设计,着重培养的是学生的自学能力,以及独立分析互联网上和图书馆里的各种资料,用来丰富自己的知识并且提高对Matlab、VC++等软件的实际操作能力。
通过这次的课程设计,使我们对已经学习过的数值分析课程的进一步的掌握,对知识进行最大程度的消化融汇。
因此这次的课程设计对我们来说具有非常重要的作用:
为以后学习工作做必要的准备和实践,提高自身对数值分析的认识以及软件开发的能力。
第1章总体设计方案
1.1软件结构设计
图1.1.1软件功能结构图
第2章算法分析及设计
2.1自适应梯形法
2.1.1自适应梯形法算法分析:
变步长梯形算法依据公式。
计算时可按如下步骤:
输入精度;
s=0;
1
2
3
4②。
2.1.2自适应梯形法算法设计:
floatAutoTrap(float(*f)(float),floata,floatb)
{
inti;
floatx,s,h=b-a;
floatt1,t2=h/2.0*(f(a)+f(b));
n=1;
do
{
s=0.0;
t1=t2;
for(i=0;i<=n-1;i++)
{
x=a+i*h+h/2;
s+=f(x);
}
t2=(t1+s*h)/2.0;
n*=2;
h/=2.0;
}
while(fabs(t2-t1)>1e-6);
returnt2;
}
2.2复化辛卜生法
2.2.1复化辛卜生法算法分析
复化辛卜生公式为,计算过程为:
令;
对计算
。
2.2.2复化辛卜生法算法设计
floatSimpson(float(*f)(float),floata,floatb,intn)
{
intk;
floats,s1,s2=0.0;
floath=(b-a)/n;
s1=f(a+h/2);
for(k=1;k<=n-1;k++)
{
s1+=f(a+k*h+h/2);
s2+=f(a+k*h);
}
s=h/6*(f(a)+4*s1+2*s2+f(b));
returns;
}
2.3龙贝格算法
2.3.1龙贝格算法分析
2.3.2龙贝格算法设计
floatRomberg(floata,floatb,float(*f)(float),floatepsilon)
{
intn=1,k;
floath=b-a,x,temp;
floatT1,T2,S1,S2,C1,C2,R1,R2;
T1=(b-a)/2*((*f)(a)+(*f)(b));
while
(1)
{
temp=0;
for(k=0;k<=n-1;k++)
{
x=a+k*h+h/2;
temp+=(*f)(x);
}
T2=(T1+temp*h)/2;
if(fabs(T2-T1)returnT2;
S2=T2+(T2-T1)/3.0;
if(n==1){T1=T2;S1=S2;h/=2;n*=2;continue;}
C2=S2+(S2-S1)/15;
if(n==2){C1=C2;T1=T2;S1=S2;h/=2;n*=2;continue;}
R2=C2+(C2-C1)/63;
if(n==4){R1=R2;C1=C2;T1=T2;S1=S2;h/=2;n*=2;continue;}
if(fabs(R2-R1)returnR2;
R1=R2;C1=C2;T1=T2;S1=S2;h/=2;n*=2;
}
}
第3章软件详细设计
3.1主界面设计
数值积分软件主界面如图3.1.1所示,包括两大功能。
一个是选择求积方法,另一个是查看相应算法的算法理论。
为了使软件美观,还可以为软件添加背景图片以及显示系统时间,这样就使软件显得不再单调。
图3.1.1主界面
添加背景图片关键代码:
voidCAutoTrap:
:
OnPaint()
{
CPaintDCdc(this);//devicecontextforpainting
CRectrect;
GetClientRect(&rect);
CDCdcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmapbmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP2);
BITMAPbitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
显示时间代码:
voidCMyDlg:
:
OnTimer(UINTnIDEvent)
{
CDialog:
:
OnTimer(nIDEvent);
CStringstr;
CTimetheTime=CTime:
:
GetCurrentTime();
str.Format("%02d年%02d月%02d日%02d:
%02d:
%02d",
theTime.GetYear(),theTime.GetMonth(),theTime.GetDay(),
theTime.GetHour(),theTime.GetMinute(),theTime.GetSecond());
SetDlgItemText(IDC_STATIC_TIME,str);
CDialog:
:
OnTimer(nIDEvent);
}
3.2功能设计
3.2.1自适应梯形法的实现
通过类向导为控件赋值,从界面获取上下界以及精度值,从而进行计算,将结果显示在对应框。
若输入错误的数据将进行错误提示。
为了美观,以相同方法添加背景图片。
图3.2.1自适应梯形法
图3.2.2积分区间错误提示图3.2.3精度值错误提示
关键代码:
(1)错误检查及提示代码:
if(m_xiajie==m_shangjie)
{
MessageBox("积分区间错误!
");
return;
}
if(m_epsilon<=0)
{
MessageBox("精度值有误!
");
return;
}
3.2.2复化辛卜生法的实现
同样,通过类向导为控件赋值,从界面获取上下界、划分区间及运算次数,从而进行计算,将结果显示在列表框。
若输入错误的数据将进行错误提示。
图3.2.4复化辛卜生法
图3.2.5错误提示
关键代码:
(1)列表框表头初始化代码:
BOOLCSimpson:
:
OnInitDialog()
{
Cdialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
m_combo.SetCurSel(0);
m_List1.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_List1.InsertColumn(0,”s[n]”,LVCFMT_LEFT,80);
m_List1.InsertColumn(1,”值”,LVCFMT_LEFT,140);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
(2)结果显示代码:
for(intj=0;j{
if(index==0)
s=Simpson(f7,m_xiajie,m_shangjie,n);
if(index==1)
s=Simpson(f8,m_xiajie,m_shangjie,n);
if(index==2)
s=Simpson(f9,m_xiajie,m_shangjie,n);
p.Format("%d",n);
p="s["+p+"]";
q.Format("%f",s);
m_List1.InsertItem(j,"");
m_List1.SetItemText(j,0,p);
m_List1.SetItemText(j,1,q);
n*=2;
}
3.2.3龙贝格算法的实现
同样,通过类向导为控件赋值,从界面获取上下界及精度值。
单机计算按钮,即可将结果显示在结果框。
单机返回按钮,返回主界面。
若输入错误的数据将进行错误提示。
图3.2.6龙贝格算法
3.2.4算法简介功能设计
算法简介功能就是对每种算法的简单介绍,单机相应按钮就可以查看。
图3.2.7自适应梯形法简介