数值分析课程设计矩阵的特征值求解软件.docx
- 文档编号:7979453
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:618.34KB
数值分析课程设计矩阵的特征值求解软件.docx
《数值分析课程设计矩阵的特征值求解软件.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计矩阵的特征值求解软件.docx(12页珍藏版)》请在冰豆网上搜索。
数值分析课程设计矩阵的特征值求解软件
华北科技学院
数值分析课程设计说明书
班级:
信息与计算科学B091
学号:
200909014117姓名:
_田健__________
设计题目:
____矩阵的特征值求解软件__________
设计时间:
__2012.2.27_至_2012.3.2_________
指导教师:
________谭立云_____________
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
目 录
1设计总说明书1
2前言2
2.1课程设计选题2
2.2课程设计的目的2
2.3本选题的设计背景2
2.4功能需求2
2.5系统的开发运行环境2
3问题定义及题目分析3
3.1分别用幂法和幂法加速技术求矩阵3
3.2对于实对称矩阵
,用Jacobi方法编写其程序,并用所编程序求下列矩阵的全部特征值.3
3.3概要设计3
4详细设计与实现5
4.1矩阵特征值计算登陆主界面模块5
4.1.1模块算法(或重要代码段):
5
4.2矩阵特征值计算模块6
4.2.2调试与测试6
5小结和展望7
参考文献8
附录8
登陆界面部分代码8
矩阵特征值特征向量部分代码10
矩阵重置代码11
1设计总说明书
我们可以看到在当今这个以信息与计算为主的社会,一个实用的简单的计算工具已是占据不可或缺的地位和很稀缺的工具。
因此,一个好的简单计算系统已成为企业、个人工作学习的不可缺少的一部分,不但可以直接影响到企业、个人学习,而且会间接的影响到企业、个人经济利益和社会地位。
随着社会的发展,科技的进步,计算机的应用在社会各领域中都得到了普及,越来越多的人都感受到利用计算机进行各类管理的科学和便捷;认识到有一个实用且简洁的计算系统对于大量的计算工作的重要性。
笨啦计算机的实际就是用于计算使用的,所以利用计算机进行多种数值计算是必然趋势,数值计算系统是各类工作中不可缺少的。
即这次课程设计中,我选择开发数值矩阵特征值计算系统。
这个计算系统的功能主要有计算一些简单的矩阵和矩阵之间的加发,减法和乘法。
这也要求它应该能够为用户提供有好美观的窗口界面、充足可靠的信息数据、简单方便的维护手段和灵活多变的输入计算方式以及快捷而准确和简单明了的计算结果。
所以,对于这个矩阵特征值计算系统的设计主要包括函数建立、矩阵计算以及应用程序和数据录入的开发两个方面。
本次课程设计我选用的开发软件是大家比较熟悉的Microsoft公司出品的VisualC++6.0MFC平台进行系统的开发。
输入需要计算的矩阵的基本信息(包括矩阵维数,精确度),对这些信息进行管理,要求:
1、用户录入需要计算的矩阵的基本信息;
2、能够快速的计算出矩阵的特征值;
3、能按要求计算个别矩阵之间的加,减,乘法。
本系统主要用于对矩阵特征值基本信息进行计算,能够进行计算单个矩阵的特征值和多个矩阵的简单运算。
登录该系统时,用户不需要输入口令和密码,简单方便实用。
基于上述想法,我们可以放心的实用这个简单的计算工具,以MFC为前台进行系统的设计然后将后台计算的数据读取出来,有助于用户对这些数据进行相应的操作,使操作更方便,更符合用户的要求。
所以该系统应该要有一个较好的界面,使用户感觉很直观,使用快捷,这就是用MFC所要实现的功能。
关键字:
MFC矩阵特征值
2前言
2.1课程设计选题
《矩阵的特征值计算》
该功能只适用于计算一般矩阵的特征值由于设置优先所以只能求解N<10的矩阵。
2.2课程设计的目的
巩固和加深以数值分析以及C语言为基础的界面设计和数值求解理论知识的理解,提高实际动手编程能力的培养,掌握以C语言为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的C语言程序和独立解决数值分析问题的水平,程序通过调用C语言提供的MFC进行了简单的界面设计,实现问题的解决。
2.3本选题的设计背景
在现实生活中,我们会经常遇到些需要解决数值分析等的问题,但是网络上大多数的计算工具都比较复杂没有一些简单方便的实用小工具,所以我们需要一些简单实用的数值计算小工具,以便对工作带来最大的满足与需求,于是我就设计了一个简单的矩阵的数值计算小工具,虽然不很常熟但是我觉得还挺实用的。
2.4功能需求
设计一个矩阵求特征值工具,能够实现简单的矩阵特征值求解。
2.5系统的开发运行环境
本系统集成开发环境:
C++
本系统运行环境:
windowsxp或以上版本
C是一个开放源代码的、基于C的可扩展开发平台。
编写代码和运行软件都很方便。
编写过程中要是有错误就有提示,非常方便用户修改代码。
3问题定义及题目分析
3.1分别用幂法和幂法加速技术求矩阵
的主特征值和特征向量.
3.2对于实对称矩阵
,用Jacobi方法编写其程序,并用所编程序求下列矩阵的全部特征值.
3.3概要设计
(1)幂法用于求按模最大的特征值及其对应的特征向量的一种数值算法,它要求矩阵A的特征值有如下关系:
,对于相应的特征向量。
其算法如下:
Step0:
初始化数据
Step1:
计算
。
Step2:
令
。
Step3:
令
;如果
或
,则gotoStep4;否则,k=k+1,gotoStep1。
Step4:
输出结果
算法说明与要求
输入参数为实数矩阵、初始向量、误差限与最大迭代次数。
输出参数为特征值及相对应的特征向量。
注意初始向量不能为“0”向量。
(1)迭代法的原理
如果能将方程Ax=b改写成等价形式:
x=Bx+f。
如果B满足:
ρ(B)<1,则对于任意初始向量x(0),由迭代x(k+1)=Bx(k)+f产生的序列均收敛到方程组的精确解。
迭代法中两种最有名的迭代法就是Jacobi迭代法,它的迭代矩阵B为:
其中,D为系数矩阵A的对角元所组成对角矩阵,L为系数矩阵A的对角元下方所有元素所组成的下三角矩阵,U为系数矩阵A的对角元上方所有元素所组成的上三角矩阵。
算法如下:
Step0:
初始化数据
和
。
Step1:
计算D,L,U,J或G,得到迭代矩阵B.
Step2:
如果
或
,gotoStep3;否则gotoStep2。
Step3:
输出结果。
程序说明与要求
程序的输入参数为系数矩阵与常量、初始向量及误差控制,输出参数为方程组的近似解。
要求输入系数A中对角元不能存在0,如果对角元出现0元素,则可以通过交换方程组中方程的次序解决。
4详细设计与实现
4.1矩阵特征值计算登陆主界面模块
图4.1矩阵计算登陆
4.1.1模块算法(或重要代码段):
见附录
4.2矩阵特征值计算模块
图4.2矩阵特征值计算界面
图4.3附加功能
4.2.2调试与测试
测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
图4.4三维矩阵计算
5小结和展望
作为一名大三的学生,我觉得能做类似的课程设计是十分有意义,而且是十分必要的。
在已度过的大三的时间里我们大多数接触的是专业基础课。
我们在课堂上掌握的仅仅是专业基础课的理论面,如何去锻炼我们的实践面?
如何把我们所学到的专业基础理论知识用到实践中去呢?
我想做类似的大作业就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当数查阅大量的书籍了。
为了让自己的设计更加完善,更加符合软件工程标准,一次次翻阅各种参考资料是十分必要的,同时也是必不可少的。
我们是在作设计,但我们不是艺术家。
他们可以抛开实际,尽情在幻想的世界里翱翔,我们是学生,一切都要有据可依.有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
作为一名学生掌握一门或几门程序设计语言是必不可少的,由于本次课程设计要求用MFC进行开发,在这过程中我对各种的开发环境进行了探索,其中有VB,C++,java等,这使我对MFC的集成开发环境有了更深刻的理解虽然去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率好高,记得大一学C语言好难就是因为我们没有把自己放在使用者的角度,单单是为了学而学,这样效率当然不会高。
边学边用这样才会提高效率,这是我作本次课程设计的第二大收获。
但是由于水平有限,难免会有错误,还望老师批评指正。
参考文献
[1]陈越,童若峰.《数值分析课程设计》浙江大学出版社,2009.
[2]欧阳志宏,董霖,钟俊华.MFC程序设计轻松入门.北京:
人民邮电出版社,2009
[3]郁永彦,王志坚,VisualC++程序设计实用案例教程.北京大学出版社,2010
附录
登陆界面部分代码
voidCMatrixDlg:
:
OnPaint()//图片插入
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CPaintDCdc(this);
CRectrect;
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(255,255,255));
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMatrixDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMatrixDlg:
:
OnStaticInmap()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringmsg;
msg.Format("欢迎使用数值分析矩阵计算系统^_^");
AfxMessageBox(msg);
}
voidCMatrixDlg:
:
OnButtonEntrance()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CMCALcalDlg;
CMatrixDlg:
:
OnOK();
calDlg.DoModal();
}
voidCMatrixDlg:
:
OnCancel()
{
//TODO:
Addextracleanuphere
CDialog:
:
OnCancel();
AfxMessageBox("欢迎下次继续使用^_^");
}
矩阵特征值特征向量部分代码
voidCMCAL:
:
OnCalculateall()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
if(HaveMatrix){
m_Result="矩阵A:
\r\n";
Matrix=newdouble[m_N*m_N];
intk=0;//获得矩阵编辑框的数据
for(inti=0;i<(m_N*m_N);i++){
CStrings;
GetDlgItem(ID_EDIT_SAFE+k)->GetWindowText(s);
m_Result+=s+"";
if((i+1)%m_N==0)
m_Result+="\r\n";
Matrix[i]=atof(s);
k++;
}
m_Result+="\r\n";
MatrixCal(m_N,Matrix,m_Eps);
}
UpdateData(FALSE);
}
………………………………………
voidCMCAL:
:
OnCalculatev()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
if(HaveMatrix){
m_Result="矩阵A:
\r\n";
Matrix=newdouble[m_N*m_N];
intk=0;//获得矩阵编辑框的数据
for(inti=0;i<(m_N*m_N);i++){
CStrings;
GetDlgItem(ID_EDIT_SAFE+k)->GetWindowText(s);
m_Result+=s+"";
if((i+1)%m_N==0)
m_Result+="\r\n";
Matrix[i]=atof(s);
k++;
}
m_Result+="\r\n";
MatrixCalA(m_N,Matrix,m_Eps);
}
UpdateData(FALSE);
}
矩阵重置代码
voidCMCAL:
:
OnReset()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
intk=0;//销毁先前的矩阵编辑框
for(inti=0;i<(m_N*m_N);i++){
//GetDlgItem(ID_EDIT_SAFE+k)->DestroyWindow();
delete((CEdit*)GetDlgItem(ID_EDIT_SAFE+k));
k++;
}
m_Nfirst=m_N=0;//矩阵的维数
((CEdit*)GetDlgItem(IDC_INPUT_N))->SetReadOnly(FALSE);
((CEdit*)GetDlgItem(IDC_INPUT_EPS))->SetReadOnly(FALSE);
m_Result="";
UpdateData(FALSE);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 课程设计 矩阵 特征值 求解 软件
![提示](https://static.bdocx.com/images/bang_tan.gif)