计算机程序设计基础—FORTRAN实验设计报告线性方程组求解问题
- 格式:doc
- 大小:39.00 KB
- 文档页数:5
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
1文档收集于互联网,如有不妥请联系删除.
中南大学
本科生课程设计(实践)任务书、设计报告
(计算机程序设计基础—FORTRAN)
题 目
线性方程组求解问题
学生姓名
陈 晨
指导教师
刘胤宏
学 院
土木工程学院
专业班级
土建类工程试验班
学生学号
18
计算机基础教学实验中心
2012年 6 月 29 日
Fortran课程设计实验报告
之
线性方程组求解问题
题目重现
:
一物理系统可用下列线性方程组来表示:
从文件中读入m1、m2和θ的值,求a1、a2、N1 和N2的值。其中g取9.8,
输入θ时以角度为单位。
要求如下:
(1)分别用两种方法(例如高斯消去法、矩阵求逆法、三角分解法、追赶法等),
定义求解线性方程组Ax=b的子程序,要求该子程序能求解任意线性方程组。
(2)在主程序中分别调用上面定义的两个子程序,并对求解结果进行对比分析。
(3)绘制以上两个方法所求得的方程解的数据分布图。
题目分析
:
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
2文档收集于互联网,如有不妥请联系删除.
初看题目,MY GOD!这辈子没见过这么复杂奇葩的方程组。而脑袋里那些
应付考试还可以的少的可怜的Fortran基础知识,更是直接缴械投降,无地自容
了。不愧是大学,不愧是让无数土木人工科男竞折腰的Fortran课程设计。好吧,
虽然极度怀疑自己的智商,但不战而屈己之兵又不是我土木人的性格。打开电脑,
摩拳擦掌,Fortran,老子来了!
我们的目的地是,线性方程组的解,通往目的地的道路有好几条,Gauss大
道,矩阵求逆之道,还有两条小路:三角分解与追赶之径。目前的情况是,小道
路黑路不熟,大道倒是有星点的光。果断走大道嘛。开发思想嘛,对于解这样一
个复杂的线性方程组,聪明的人类是不会傻乎乎自己去做的。于是,我们把这个
繁琐的工作交给任劳任怨的计算机吧,省下我们大好年华去干更多有意义的事
情。那么,我决定将这项任务交给fortran了,既然没人反对,那就这么定了 。
废话不多说了,直接上图。
系统结构图
:
设计流程图
:
系统功能及系统详细设计
:
这个我要慢慢说,总体上系统分为两大部分:运算程序(即解线性方程组),
绘图程序。运算程序中,由于采用两种方法,因此包含两大子程序。子程序1
用来通过gauss消元法来求解;子程序2则通过矩阵求逆法以另一种方式解决方
程组。
当然,两种方法各有千秋,各有其各自的优越性,主要是在程序复杂程度,
运行时计算量即时间和空间量度上有区别。当主程序将指定文件中的已知条件读
入,程序,开始为向矩阵赋值,这里通过一个4维数组实现,继而分别调用两大
数据的输入(文件)
矩阵的赋值
Gauss主元消去法
矩阵求逆法
运算求解
将结果输入到文件
结束
Gauss
子
程
序
矩
阵
求
逆
子
程
序
分析问题
查询资料
编
子
程
序
编
主
程
序
编
绘
图
程
综合分析
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
3文档收集于互联网,如有不妥请联系删除.
子程序,运算后输出结果,并将结果写入文件中。同时,两个子程序又并不只限
于本题,由于具有很好的普遍性,所以,依然可以解决类似的其他数学或物理上
的线性方程组问题O(∩_∩)O!这也符合了本次课程设计的要求。另一方面,绘
图程序通过读入运算程序所生产文件中的结果数据,并以此描点画图,更加直观
的展现出变量之间的关系,便于分析具体问题和预计变量变化趋势。
子程序1(gauss)结构图
:
变量说明:
A——双精度二维数组,存放原矩阵和逆矩阵
B,P——双精度一维数组,结果向量
X,C——双精度一维数组,解
N——整型变量,表示阶数
L——整型变量
Is,js——整型一维数组
子程序2(矩阵求逆法)结构图
:
变量说明同上
绘图截图
:
结果分析:
已知条件为 m1= 2.000000 m2= 3.000000
若角度为 45.500000
矩阵求逆结果:8.9563757 2.6582445 10.9508530
36.8051200
Gauss法结果 :8.8458210 2.2406746 10.2586
36.7478860
误差为: -1.6966E-003 5.6986996E-004 6.E-003 7.2344513E-003
****~~~~O(∩_∩)O~~~~****
两种方法都可以求得较精确的解向量,误差千分之一左右,基本符合题目要
求。
遇到的问题及解决方法
:
将数学语言转换为fortran计算机编程语言,这对于我来说算是个不小的
挑战。两者虽有本质的相通之处,但语言上的极大差异确实让人无从下
K从1变化到n-1
找到每行绝对值最大的数
检验矩阵是否为奇异矩阵?
N
Y
将MAX调到主对角线上
将矩阵化为上三角矩阵
求解回代
输出解向量
ERROR
K从1变化到n
检验矩阵是否为奇异矩阵?
找到每行绝对值最大的数,并记下行列数
N
Y
将MAX调到主对角线上
分解为L,U乘积
右乘逆矩阵
输出解向量
ERROR
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
4文档收集于互联网,如有不妥请联系删除.
手。但照猫画虎也要有猫,于是便可耻的百度了高斯消元和求逆矩阵的
源程序。第一遍,没看懂,第二遍,还没看懂,我又开始怀疑自己的智
商了…….终于在第n遍后拨云见日,柳暗花明。
程序设计思路并不复杂,但层层的嵌套循环却令人发指。第一次,尝试
从外围突击内部,好乱;改变策略,从中央再到地方,不断向上加循环,
而不是费力向内加循环,还不错。
分别调试子程序时,发现结果总是“error”。将变量改为双精度,解决问
题。
矩阵可逆法中结果向量源程序给出的为二维数组,我开始觉得没必要,
用了一维,但当调试时发现结果和gauss法竟然一致,这可不是我想要
的,改回二维后,结果又出现了正常的误差,不知什么原因。
常常会出现,浮点溢出,除以零的问题,通过改精度和子程序中的变量,
问题解决。
将两子程序合而为一的时候,第一次调用正常,但第二次,结果相差很
大。原来两程序公用矩阵A,当第一次调用之后,矩阵A自然被重新赋
值。在第二个子程序调用之前,在对矩阵A重新赋值,保证两次运算初
始条件完全相同。
绘图时需要读入变量Y值,由于数据太庞大,便在运算程序中在
nresult.txt中通过循环不断读入解向量,角度从0变到180,步长为0.1,
再在Quickwin中反复读入Y,并描点画线,画出图像。
课程设计心得
:
通过这次课程设计,当然首先巩固了自己这个学期fortran的学习,同时通
过发现问题,分析问题,查找资料,思考并最终解决问题这一系列过程,极其明
显的提高了自己实践能力,学到了许多课本之外的知识了解了计算机编程中的一
些典型技巧和经验。其中很重要的一个环节就是与同学和老师的交流,在交流和
讨论的过程中,我们发现了自己想法的漏洞和不足,当然也将自己的优势与大家
分享,互相帮助,共同进步,既提高了效率又增强了友谊,两全其美。
另外,问题遇到了很多,继而也查询了大量资料,学会了从大量数据中,发
现对自己有价值的部分,而不再是广而不精。这些都为我们以后的学习工作打下
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
5文档收集于互联网,如有不妥请联系删除.
了基础,做了准备。
参考文献
:
《FORTRAN 90 课程设计教程》 北邮出版
《FORTRAN 90 课程设计上机指导与习题选讲》 北邮出版
《FORTRAN 常用算法程序集》 清华出版