计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc

上传人:rrsccc 文档编号:9924586 上传时间:2021-04-04 格式:DOC 页数:9 大小:106.50KB
返回 下载 相关 举报
计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc_第1页
第1页 / 共9页
计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc_第2页
第2页 / 共9页
计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc_第3页
第3页 / 共9页
计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc_第4页
第4页 / 共9页
计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc》由会员分享,可在线阅读,更多相关《计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题.doc(9页珍藏版)》请在三一文库上搜索。

1、中南大学本科生课程设计(实践)任务书、设计报告(计算机程序设计基础FORTRAN)题 目线性方程组求解问题 学生姓名陈 晨指导教师刘胤宏学 院土木工程学院专业班级土建类工程试验班学生学号1217110118计算机基础教学实验中心2012年 6 月 29 日Fortran课程设计实验报告 之 线性方程组求解问题题目重现:一物理系统可用下列线性方程组来表示:从文件中读入m1、m2和的值,求a1、a2、N1 和N2的值。其中g取9.8,输入时以角度为单位。要求如下:(1)分别用两种方法(例如高斯消去法、矩阵求逆法、三角分解法、追赶法等),定义求解线性方程组Ax=b的子程序,要求该子程序能求解任意线性

2、方程组。(2)在主程序中分别调用上面定义的两个子程序,并对求解结果进行对比分析。(3)绘制以上两个方法所求得的方程解的数据分布图。题目分析:初看题目,MY GOD!这辈子没见过这么复杂奇葩的方程组。而脑袋里那些应付考试还可以的少的可怜的Fortran基础知识,更是直接缴械投降,无地自容了。不愧是大学,不愧是让无数土木人工科男竞折腰的Fortran课程设计。好吧,虽然极度怀疑自己的智商,但不战而屈己之兵又不是我土木人的性格。打开电脑,摩拳擦掌,Fortran,老子来了!我们的目的地是,线性方程组的解,通往目的地的道路有好几条,Gauss大道,矩阵求逆之道,还有两条小路:三角分解与追赶之径。目前的

3、情况是,小道路黑路不熟,大道倒是有星点的光。果断走大道嘛。开发思想嘛,对于解这样一个复杂的线性方程组,聪明的人类是不会傻乎乎自己去做的。于是,我们把这个繁琐的工作交给任劳任怨的计算机吧,省下我们大好年华去干更多有意义的事情。那么,我决定将这项任务交给fortran了,既然没人反对,那就这么定了 。废话不多说了,直接上图。系统结构图:数据的输入(文件)矩阵的赋值Gauss子程序矩阵求逆子程序Gauss主元消去法矩阵求逆法运算求解将结果输入到文件结束设计流程图:综合分析编主程序编子程序查询资料分析问题编绘图程系统功能及系统详细设计:这个我要慢慢说,总体上系统分为两大部分:运算程序(即解线性方程组)

4、,绘图程序。运算程序中,由于采用两种方法,因此包含两大子程序。子程序1用来通过gauss消元法来求解;子程序2则通过矩阵求逆法以另一种方式解决方程组。当然,两种方法各有千秋,各有其各自的优越性,主要是在程序复杂程度,运行时计算量即时间和空间量度上有区别。当主程序将指定文件中的已知条件读入,程序,开始为向矩阵赋值,这里通过一个4维数组实现,继而分别调用两大子程序,运算后输出结果,并将结果写入文件中。同时,两个子程序又并不只限于本题,由于具有很好的普遍性,所以,依然可以解决类似的其他数学或物理上的线性方程组问题O(_)O!这也符合了本次课程设计的要求。另一方面,绘图程序通过读入运算程序所生产文件中

5、的结果数据,并以此描点画图,更加直观的展现出变量之间的关系,便于分析具体问题和预计变量变化趋势。子程序1(gauss)结构图:ERROR检验矩阵是否为奇异矩阵?输出解向量将MAX调到主对角线上求解回代将矩阵化为上三角矩阵YN找到每行绝对值最大的数K从1变化到n-1变量说明:A双精度二维数组,存放原矩阵和逆矩阵B,P双精度一维数组,结果向量X,C双精度一维数组,解N整型变量,表示阶数L整型变量Is,js整型一维数组ERROR右乘逆矩阵将MAX调到主对角线上分解为L,U乘积NY检验矩阵是否为奇异矩阵?找到每行绝对值最大的数,并记下行列数K从1变化到n子程序2(矩阵求逆法)结构图:输出解向量变量说明

6、同上绘图截图:结果分析:已知条件为 m1= 2.000000 m2= 3.000000 若角度为 45.500000矩阵求逆结果:8.697662649563757 2.439507666582445 10.264865479508530 36.597686618051200Gauss法结果 :8.699359268458210 2.438986192406746 10.258617002977420 36.590364957478860 误差为: -1.696618894452939E-003 5.214741756986996E-004 6.248476531107272E-003 7.3

7、21660572344513E-003 *O(_)O* 两种方法都可以求得较精确的解向量,误差千分之一左右,基本符合题目要求。遇到的问题及解决方法:l 将数学语言转换为fortran计算机编程语言,这对于我来说算是个不小的挑战。两者虽有本质的相通之处,但语言上的极大差异确实让人无从下手。但照猫画虎也要有猫,于是便可耻的百度了高斯消元和求逆矩阵的源程序。第一遍,没看懂,第二遍,还没看懂,我又开始怀疑自己的智商了.终于在第n遍后拨云见日,柳暗花明。l 程序设计思路并不复杂,但层层的嵌套循环却令人发指。第一次,尝试从外围突击内部,好乱;改变策略,从中央再到地方,不断向上加循环,而不是费力向内加循环,

8、还不错。l 分别调试子程序时,发现结果总是“error”。将变量改为双精度,解决问题。l 矩阵可逆法中结果向量源程序给出的为二维数组,我开始觉得没必要,用了一维,但当调试时发现结果和gauss法竟然一致,这可不是我想要的,改回二维后,结果又出现了正常的误差,不知什么原因。l 常常会出现,浮点溢出,除以零的问题,通过改精度和子程序中的变量,问题解决。l 将两子程序合而为一的时候,第一次调用正常,但第二次,结果相差很大。原来两程序公用矩阵A,当第一次调用之后,矩阵A自然被重新赋值。在第二个子程序调用之前,在对矩阵A重新赋值,保证两次运算初始条件完全相同。l 绘图时需要读入变量Y值,由于数据太庞大,

9、便在运算程序中在nresult.txt中通过循环不断读入解向量,角度从0变到180,步长为0.1,再在Quickwin中反复读入Y,并描点画线,画出图像。课程设计心得:通过这次课程设计,当然首先巩固了自己这个学期fortran的学习,同时通过发现问题,分析问题,查找资料,思考并最终解决问题这一系列过程,极其明显的提高了自己实践能力,学到了许多课本之外的知识了解了计算机编程中的一些典型技巧和经验。其中很重要的一个环节就是与同学和老师的交流,在交流和讨论的过程中,我们发现了自己想法的漏洞和不足,当然也将自己的优势与大家分享,互相帮助,共同进步,既提高了效率又增强了友谊,两全其美。另外,问题遇到了很多,继而也查询了大量资料,学会了从大量数据中,发现对自己有价值的部分,而不再是广而不精。这些都为我们以后的学习工作打下了基础,做了准备。参考文献:FORTRAN 90 课程设计教程 北邮出版FORTRAN 90 课程设计上机指导与习题选讲 北邮出版FORTRAN 常用算法程序集 清华出版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1