




免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual C+课程设计报告(矩阵计算器程序)Visual C+课程设计报告课 程: VC+课程设计系 别: 计算机学院选题名称: 矩阵计算器程序题目级别: A 级班 级: 姓 名: 学 号: 起止时间: 第一周第九周指导教师: 日期:2006年10月25日VC+课程设计报告选题名称:矩阵计算器 作者: 摘要:本文阐述了选择矩阵计算器程序的理由和要完成的目标,分析了本程序要实现的各项功能,给出了程序的流程图;分析了求矩阵的逆,矩阵的秩,和求行列式的值的算法;说明了测试程序的方案,就测试中遇到的问题给出了相应的解决方法;最后对本次课程设计进行了回顾与总结。第一章 选题理由在学习线性代数的过程中,我发现矩阵乘法、求矩阵的秩、求矩阵的逆,求矩阵行列式的值这几个运算的工作量十分大,枯燥乏味让人十分厌烦。计算机有着极快的运行速度,因此可以编写一个程序来完成这几项工作,减轻人的负担。第二章 目标与需求分析一、目 标:编写一个矩阵计算器,有较好的人机交互界面,较简单的操作方法,可以进行两个n阶矩阵的相乘、相加运算,求矩阵转置、求矩阵的秩和矩阵的逆以及求矩阵行列式的值的运算。二、需求分析:矩阵计算器程序应包括以下几个功能模块。1、 两个矩阵相乘 由用户输入两个n阶矩阵,计算以后把两个矩阵以及相乘后的结果输出到屏幕上。2、 两个矩阵相加 由用户输入两个n阶矩阵,计算以后把两个矩阵以及相加后的结果输出到屏幕上。3、 求逆 由用户输入一个n阶矩阵,计算后把原矩阵以及计算后得到的逆矩阵输出。4、 求秩 由用户输入一个n阶矩阵,计算后把原矩阵以及计算后得到的秩输出。5、 求n阶矩阵行列式的值 由用户输入一个n阶矩阵,计算后把原矩阵以及计算后得到的行列式的值输出。6、 输入矩阵模块 可以让用户自定义地输入n阶矩阵,并且允许用户进行检查和修改。第三章 程序设计方案一、基本设想1、允许用户自定义矩阵的行数和列数,采用一维数组存储矩阵,用new动态分配给数组内存空间,运算后用delete回收动态分配的内存空间。2、把矩阵运算分为两类,一类是单矩阵运算(包括求逆、求秩、转置以及求行列式的值),另一类是双矩阵运算(包括两个矩阵相乘和相加),用两个菜单,让两类运算分别输入和计算。3、对每一种运算分别单独设计一个函数,并保存在一个单独的CPP文件中,然后用include包含进主函数,方便阅读和他人重用。二、程序流程图:第四章 关键编程一、输入矩阵并确认功能的实现矩阵输入的数据数量比较多,而且容易出错,为了减少出错的可能,提高用户输入效率,本程序采用按行逐个提示用户输入的方法,让用户看清数据后再输入。用户输入完毕后,程序会在屏幕上输出用户输入的矩阵,并询问是否正确,如果不正确,用户可以输入错误数据所在的行和列进行修改,修改后,程序提示修改成功,并输出修改后的数据和矩阵,再次询问是否正确,不正确再进行修改,一直到用户确认正确为止。程序流程如右图所示。具体实现函数如下:void check(Matrix &ma1)/用户输入矩阵并要求用户进行确认char choice2;int hang,lie;cout输入矩阵:endl;ma1.input();system(cls);docout你输入的矩阵是:endl;ma1.output(ma1.q,ma1.n);cout确定吗?Y=确定,N=重新输入choice2;if(choice2=N|choice2=n) /如果出现错误,可以输入错误的行列数,进行修改docout请输入出错的数所在的行hang;cout请输入出错的数所在的列lie;if(hangma1.n|liema1.n)/如果行列超限,输出出错提示cout错误的行列数!endlma1.n|liema1.n);/重新输入出错的数所在的行列数cout请输入正确的数!ma1.qm;system(cls);cout已将第hang行第lie列的数据num修改为ma1.qmendlendl;/ifwhile(choice2!=y&choice2!=Y);二、矩阵求逆功能用全选主元高斯约当(Gauss-Jordan)消去法求n阶实矩阵A的逆矩阵。高斯约当(Gauss-Jordan)求逆过程可以用以下计算步骤表示:对于k=1,2,3,n做如下运算: 归一化计算 消元计算为了数值计算的稳定性,整个求逆过程需要全选主元,全选主元的过程如下:对于矩阵求逆过程中的第k步,首先,在右下方(包括)的n-k+1阶子阵中选取绝对值最大的元素,并将该元素所在的行号记录在IS(k)中,而列号记录在JS(k)中。然后,通过行交换与列交换将该绝对值最大的元素交换到主对角线的位置上,即做以下两步: A(k,l)A(IS(k),l), l=1,2,3,n A(l,k)A(l,JS(k), l=1,2,3,n经过全选主元后,矩阵求逆的计算过程是稳定的。但最后需要对结果进行恢复,恢复的过程如下:对于k从n到1,分别做以下两步: A(k,l)A(JS(k),l), l=1,2,3,n A(l,k)A(l,IS(k), l=1,2,3,n具体实现函数请参阅qiuli.cpp中的int rinv(double*a,int n) 形参说明: double *a存放矩阵A,返回时存放其逆矩阵;int n矩阵阶数 返回值说明:int rinv() 函数返回整数标志。当返回标志值为0时,表示A奇异;否则表示正常返回。三、求一般行列式的值用全选主元高斯(Gauss)消去法计算n阶矩阵A所对应的行列式的值。用高斯消去法对矩阵A进行一系列变换,使之成为上三角矩阵,其对角线上的各元素乘积即为行列式值。变换过程如下:对于k0,1,2,,n-2作变换为保证数值计算的稳定性,在实际变换过程中采用全选主元。具体函数请参阅det.cpp中的double sdet(double*a,int n) 形参说明: double *a存放矩阵A的元素,返回时被破坏;int n矩阵阶数 返回值说明:double sdet() 函数返回行列式的值四、矩阵求秩的功能 用全选主元高斯(Gauss)消去法计算矩阵A的秩。设有阶矩阵取k=minm,n。对于r=0,1,2,k-1,用全选主元高斯消去法将A变为上三角矩阵,直到某次0为止,矩阵A的秩为r。具体函数请参阅rank.cpp中的int rank(double* a,int m,int n).形参说明:double* a 存放矩阵A的元素,返回时将被破坏;int m 矩阵A的行数;int n 矩阵A的列数。 返回值说明:函数返回A的秩。第五章 测试与改进测试方法:测试分自查和复查两个步骤进行,自查由张星和闫庆军完成,复查主要由余海舟完成,张星与闫庆军辅助。自查和复查分别包含以下两个方面:、完全不考虑程序内部结构和处理过程,在已知程序应具有的功能的情况下,用若干个实例检验每一个功能是否能正常使用。、根据程序内部结构和处理过程设计测试用例(用例包括各种极端情况,并保证每一个独立路径至少执行一次),通过测试验证程序内部动作是否按照规定正常进行。一、 测试中改进矩阵输入功能1、 刚开始时没有考虑输入错误的情况,在测试过程中发现如果输入错误,必须要计算完成后才能重新输入,非常不方便。2、 对此问题加以改进,用户输入后,程序返回用户输入的矩阵,并询问用户是否确认,有错误可以重新输入。3、 再进行测试,发现如果用户输入的矩阵元素很多,为了一个错误的数就要重新输入整个矩阵,很浪费时间。4、 改进后,可以输入错误元素所在的行和列,再对这个数进行更改,测试后,发现如果输入的数比原矩阵的行列数还大也同样可以改,比如一个22的矩阵,输入第三行第三列出错,还是提示修改成功,这样就修改了本不属于本矩阵的内存空间,很不安全。因此对输入的行列数上限进行了控制,以免其越界。测试后发现效果较好。二、 测试中发现有几个运算函数无法求出正确的结果经过分析,发现在求转置,求逆,求秩等过程中,原矩阵会被破坏,导致运算错误,改进后,首先把原矩阵复制若干份,用复制的副本进行运算,测试后,结果正确。三、 测试中发现如果用户的输入与定义的类型不同,会出现死循环 从电话本管理程序中得到启示,直接使用电话本管理程序防止误输入用的函数(见电话本管理程序报告“测试与改进一”),再次测试后,问题得到解决。第六章 回顾与总结 1、本程序将多种矩阵运算的功能融为一体,实现了两个n阶矩阵的相乘、相加运算,求矩阵转置、求矩阵的秩和矩阵的逆以及矩阵行列式的值的运算,并且可以输入任意阶矩阵进行运算,在输入错误时可以方便地修改,真正做到了实用性,易用性。2、巩固了上学期C+课程学习的知识,学会使用并且能够做到灵活运用VC+提供的各种编程工具。3、通过本课程设计的实践提高了自己发现问题、分析问题、以及解决问题特别是用计算机编程解决问题的能力。4、在课程设计过程中,体会到了团队合作的重要意义,了解了老师经常告诫我们要有团队意识的良苦用心,在合作编程中我提高了自己的交流与沟通能力,学习到了别人了优点,找到了自己的缺点,并在合作中进行了改正。第七章 团队合作本程序由张星和闫庆军共同完成,方案由两人商量决定,张星主要完成各种运算函数和输入函数,闫庆军主要完成了界面的设计,并进行了大量测试工作。由于是两个人第一次合作,而且是分开写代码,编好后再合到一起进行测试的时候,出现了许多变量重名的错误,我们花了许多时间才统一了变量名。通过这一问题,我们掌握了这么一个原则:合作编程的时候,大家不能光顾埋头编码,在必要的时候要进行适当的交流,这样不仅不会浪费时间,反而可以提高效率。在做大的项目的时候,最好要规定一些大家都能遵守的标准,比如变量命名等,这样可以免除许多由于个人习惯不同导致的错误。开发软件是一项相当复杂和烦琐的过程,需要有非常精密的思维,在软件开发的过程中,团队开发是一个常见的操作方式。在合作完成课程设计的过程中,我们初步体验了软件开发过程中的团队合作,知道了团队合作的重要性和优点。第一:因为软件开发是一个复杂的过程,因此以团队的方式操作起来就简单了许多,遇到问题可以一起想办法,毕竟“人多力量大”。特别是在做大型项目的时候,一个人的力量和智慧显然是不够的。第二:我们每一个人知识和能力都是有限的,以团队的方式操作的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考国际企业管理-普通逻辑参考题库含答案解析(5卷)
- 教师招聘之《小学教师招聘》强化训练附完整答案详解【有一套】
- 教师招聘之《小学教师招聘》模拟考试高能(达标题)附答案详解
- 2025年学历类自考公关心理学-政治学概论参考题库含答案解析(5卷)
- 2025年学历类自考公共关系案例-中国当代文学作品选参考题库含答案解析(5卷)
- 2025年学历类自考儿科护理学(二)-网络经济与企业管理参考题库含答案解析(5卷)
- 2025年教师招聘之《幼儿教师招聘》模拟考试试卷及参考答案详解(精练)
- 2025年学历类自考传播学概论-学前儿童科学教育参考题库含答案解析(5卷)
- 2025年学历类自考企业文化-外国文学作品选参考题库含答案解析(5卷)
- 2025年教师招聘之《幼儿教师招聘》基础试题库附参考答案详解【预热题】
- 2024陆上风电项目造价指标
- 生命教育 课件 .第一章 生命诞生
- 2025年安徽省农业职业技能大赛(水生物病害防治员)备赛试题库(含答案)
- HACCP体系评审表范本
- openEuler系统管理与服务器配置 课件 第8章网络连接
- 《民营经济促进法》解读与案例分析课件
- DG∕TJ 08-2035-2014 建设工程监理施工安全监督规程
- 中国2型糖尿病运动治疗指南(2024版)及要点解读
- 兽医体系及兽医基础知识的学习
- 小学四年级美术社团活动计划
- 同济大学浙江学院《通信原理实验》2023-2024学年第一学期期末试卷
评论
0/150
提交评论