当前位置:文档之家› 中南大学程序设计报告

中南大学程序设计报告

中南大学
本科生课程设计(实践)任务书、设计报告(计算机程序设计基础—FORTRAN)
计算机基础教学实验中心
2010年7 月 5 日
FORTRAN 编程实践设计报告
线性病态方程组问题
任务内容
本次编程实践我的任务是第二道题目,即对线性病态方程组
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1)设计程序求方程的解。

(2)将方程右边向量元素b3改为0.53,再求解,并比较b3的变化和解的相对变化。

(3)计算系数矩阵A 的条件数并分析结论。

要求:
(1)方程的系数矩阵、常数向量均从文件中读入。

(2)定义求解线性方程组Ax=b 的子程序,要求该子程序能求解任意线性方程组。

(3)在主程序中调用子程序,并对求解结果进行对比分析。

(4)绘制常数向量修改前后所求得的方程解的数据分布图。

系统设计开发思想
对于这道题目,我的设计思路是:
(1)从文件读入系数矩阵和向量矩阵的原始数据,利用高斯消去法求解出线性方程组的解。

(2)从另一组文件中读入对向量矩阵做微小变化后的数据,再利用高斯消去法解出新的线性方程组的解。

(3)设计求范数的子程序和求矩阵的逆矩阵的子程序,从文件中读入系数矩阵数据,调用两个子程序,由条件数等于原矩阵范数乘以原矩阵的逆矩阵范数计算出系数矩阵的条件数。

(4)在QuickWin 系统环境下编写程序绘制向量矩阵变化前后的两组解的直方图。

(5)对比解的变化,结合系数矩阵条件数的大小分析变化的原因。

设计流程图如下:
系统功能及系统详细设计
我所设计的系统其功能是求解线性病态方程组的解,并计算出系数矩阵的条件数。

对于求解线性病态方程组的部分,我运用高斯消去法设计了一个可以求解任意线性方程组Ax=b的子程序,主程序所需数据由文件读入。

对于不同的线性病态方程组的求解只需从不同的文件中读入相应数据即可。

所以此部分程序对于求解线性病态方程组问题可以通用。

对于求系数矩阵条件数部分,我运用先累加求和得出每列元素绝对值之和再选出最大值的思想设计了求矩阵范数的子程序,又运用数学上阶梯矩阵的思想设计了求矩阵的逆矩阵的子程序。

由条件数定义将两个子程序一起套用可以计算出系数矩阵的条件数。

至于在QuickWin系统环境下的绘图程序,则是借鉴课本上的程序绘制了6个矩形,在系统默认坐标系下,横坐标间距相等,纵坐标体现解得绝对值大小。

使两组解对应部分相邻,代表原方程组的解的矩形内部用粗实线填充,代表改变后方程组的解的矩形内部用右斜线填充,直观体现解的变化。

遇到的问题与解决的办法
在程序设计过程中也我遇到了很多问题。

第一,在从文件读取数据时,为了确认是否正确读入就编写了显示读入的数据的程序,但结果执行程序时不仅不显示数据,而且原文本文件也别改写了。

后来知道是使用输出语句错误,应该用输出语句PRINT,我却用了写入的语句WRITE。

改正后数据输出就不存在问题了
第二,在用高斯消去法求线性方程组的解时,得到的结果总是和其他同学的差别很大。

仔细看过程序执行过程之后发现问题出在每次调用子程序后,原来的存放数据的数组就被赋予了新的值,在后面直接再用这个数组便得不到正确的结果。

于是我便在每次调用了子程序之后重新读入数据,再次将数据赋给该数组,得出的结果就正确了。

第三,用QuickWin编写好绘图程序并成功的前提下,整体执行程序时,先运行求解和求条件数的程序后,再打开绘图程序直接运行时就会出现很多错误,错误信息显示"unresolved external symbol",即未定义的外部函数,而后面
的函数都是QuickWin下的内部函数。

后来意识到时因为这是的系统环境并不是QuickWin。

关闭当前的Workspace后再在QuickWin应用模式中打开绘图程序,运行就不存在问题了。

总结
通过这次实践,我收获了很多。

首先,我巩固了FORTRAN程序设计的知识,尤其是文件部分和图形操作部分。

这两部分上课花的时间较少,又没有这两部分的上机实践课程安排,考试复习又不是重点,所以之前掌握的并不好。

这次实践要求文件读入数据操作和数据分布图绘制,于是我花了大量课余时间阅读课本知识和举例程序,最终成功独立完成了文件读入和图形绘制任务。

美中不足的是由于时间有限,虽然付出很多努力最终图形绘制仍不很理想,希望在日后学习过程中可以有所提高。

其次,之前所学知识是一个一个的部分,而这次实践之后,我感觉自己已经能够把所学的基础知识连成一个体系,初步有了系统程序设计的思想。

包括如何正确分析问题,用怎样的数学思想,如何设计流程图,如何将这些思路用以有的知识通过程序的语言表示出来,如何调试程序,如何分析错误信息等等。

希望在日后的求学过程中,可以学以致用,利用计算机编程的思想更为方便地解决工程中实际问题。

最后,在实践过程中各种问题一个接着一个,程序总不能成功运行。

虽然如此却从未放弃过,一次一次调试,一遍一遍修改。

最后终于成功时,颇为感慨。

相信在实践过程中培养出的这种坚持不懈的精神,会让我受益终生。

参考文献
刘卫国,蔡旭辉.FORTRAN 90程序设计教程(第2版).北京:北京邮电大学出版社,2007
刘卫国,戴忠.FORTRAN 90程序设计上机指导与习题选解(第2版).北京:北京邮电大学出版社,2007
徐士良.FORTRAN常用算法程序集-第二版.北京:清华大学出版社。

相关主题