东南大学C语言课程设计报告.doc
文本预览下载声明
PAGE
4 -
东南大学
C语言课程设计报告
课程名称: 计算机综合课程设计
学 院: 土木工程学院
设计题目: n阶方阵求逆矩阵
级 别: B
学生姓名: 汤佳敏
学 号:
同组学生:
学 号:
指导教师: 卢瑞华
2012年 9月 6
目录
一、题目与要求…………………………………2
二、项目分析……………………………………2
三、模块分析……………………………………4
四、程序分析……………………………………6
五、结果…………………………………………11
六、总结…………………………………………15
附:参考文献
一、题目与要求
(1)题目:
n阶方阵求逆(B级)
功能要求:
输入一个n(n256)阶方阵A,方程系数矩阵与向量均从文本文件读入;
输出A的逆矩阵至文本文件;
将得到的逆矩阵与矩阵A相乘,验证其结果是否为单位矩阵。
提示:具体算法可参考相关文献。
(2)课程设计要求
采用模块化程序设计;
鼓励可视化编程;
源程序中应有足够的注释;
学生可自行增加新功能模块(视情况可另外加分);
必须上机调试通过;
注重算法运用,优化存储效率与运算效率;
需提交源程序(含有注释)及相关文件(数据或数据库文件);
(cpp文件、txt或dat文件等)
提交设计报告书,具体要求见以下说明。
二、项目分析
这是一道有关矩阵的问题,在我们设计程序之前,首先必须清楚了解方阵与方阵逆矩阵的定义,同时在此基础上掌握求解方阵逆矩阵及矩阵的乘法的问题。我们都知道:
设A为n阶方阵,如果存在n阶方阵B,使得
AB=BA=E,
则称A是可逆的,并称B是A的逆矩阵。否则,便说A是不可逆的。
在此基础上我们可以根据矩阵与逆矩阵的定义,即矩阵A与矩阵B相乘等于单位矩阵的思路,编辑程序。但是,若用定义的方法求解,计算量大,当矩阵的阶数很大时很浪费时间。为了节省时间,通过查阅各种资料和上网搜索,在数学问题中,求解方阵逆矩阵的方法有还有很多。其中比较常见的一种方法就是用初等变换求方阵的逆矩阵,即高斯消元法求逆矩阵。高斯消元法可以用来找出一个 可逆矩阵的逆矩阵。设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来。将一个N * N单位矩阵 放在A 的右手边,形成一个N * 2N的分块矩阵B = [A,I] 。经过高斯消元法的计算程序后,矩阵B 的左手边会变成一个单位矩阵I ,而逆矩阵A - 1 会出现在B 的右手边。我们不妨举个例子。
例1:
假如高斯消元法不能将A 化为三角形的格式,那就代表A 是一个不可逆的矩阵。
例2:
而对于矩阵的乘法,利用矩阵乘法定义即可实现,矩阵的乘法的定义是:若A是一个m*n阶矩阵,B是一个n*p阶矩阵,则AB=C是一个m*p阶矩阵,而C中的每一个(i,j)元都等于A的第i行中的各元和B的第j列的各对应元之乘积的和。只要按照该定义就可以求出两个矩阵的乘积。
最后必须解决的是文本文件数据的输入输出问题,这一点比较简单。我们仅需掌握正确的输入输出格式即可。综合考虑各种原因下面我们将用C语言实现高斯消元法求解方阵逆矩阵的问题。
三、模块分析输出逆矩阵至
输出逆矩阵至
文本文件
计算逆矩阵与
原矩阵的乘积
消元
单位化矩阵
找到一行中不
为零的数
将矩阵变为增广矩阵
及后加原矩阵
开 始
是
跳出当前循环
该矩阵为奇异矩阵
从文本读入方程系数矩阵和向量
否
结束
直到
循
环完每一行
该程序主要分为七部分,分别为:文件的读入部分、判断是否为逆矩阵部分、单位化矩阵部分、消元部分、打印步骤部分、检验乘积部分及输出部分。其中单位化和消元部分是本程序设计的核心,即高斯消元法的主要步骤,具体程序如下:
for (j=n*2-1;j=i;j--)
a[i][j]/=a[i][i];//单位化矩阵
for (j=0;jn;j++)
if ((j!=i) (abs(a[j][i])err))
{
for (k=n*2-1;k=i
显示全部