线性方程组的求解-——计算机课程设计Word下载.doc
《线性方程组的求解-——计算机课程设计Word下载.doc》由会员分享,可在线阅读,更多相关《线性方程组的求解-——计算机课程设计Word下载.doc(43页珍藏版)》请在冰豆网上搜索。
![线性方程组的求解-——计算机课程设计Word下载.doc](https://file1.bdocx.com/fileroot1/2022-10/3/a5a8ab26-05de-4acb-ba5b-49fc337f0a4d/a5a8ab26-05de-4acb-ba5b-49fc337f0a4d1.gif)
4.撰写课程设计报告4天
指导教师:
摘要
许多源于工程技术方面的数学问题,都可以归结为解求线性方程组。
因此在各种数据处理中,线性方程组的求解是最常见的问题之一。
针对求解线性代数方程组,本文提出了两种解法:
迭代法和高斯消去法。
迭代法程序设计简单,可以实现高精度,本文用vc编程实现。
高斯消去法数值较稳定,克服了迭代数据易溢出的缺点,本文用vb编程实现。
相比vc,vb界面更美观,可视性和实用性好,更适合于此款计算软件。
本文中的程序能快速求解出10维以下线性代数代数方程组的解,在迭代法vc程序中提示精度且显示迭代过程,在vb高斯消去法软件根据线性方程组的维数显示输入框,并依次显示计算结果。
可以重复计算。
两款程序都能保证一定的高精度。
这将为计算者带来很大的方便。
关键词:
高斯消去法,迭代法,线性方程,动态数组
指导老师签名:
目录
一.设计要求…………………………………………………………………4
二.设计的目的意义…………………………………………………………4
三.设计思想…………………………………………………………………5
3.1确定方法………………………………………………………………5
3.2数据分析………………………………………………………………6
3.3算法分析………………………………………………………………6
四.软件的编制和调试………………………………………………………8
4.1用迭代法在VC环境下开发…………………………………………8
4.1.1VC环境介绍………………………………………………………8
4.1.2程序流程图………………………………………………………10
4.1.3程序主代码………………………………………………………10
4.1.4程序运行图………………………………………………………13
4.1.5程序说明…………………………………………………………14
4.1.6程序改进方向………………………………………………………14
4.2用高斯消去法在VB环境下开发………………………………………15
4.2.1VB环境介绍………………………………………………………15
4.2.2程序流程图………………………………………………………18
4.2.3程序主代码………………………………………………………19
4.2.4程序运行图………………………………………………………23
4.2.5程序说明…………………………………………………………24
4.2.6程序改进方向………………………………………………………24
五.总结………………………………………………………………………25
六.致谢………………………………………………………………………25
七.参考文献…………………………………………………………………26
附录…………………………………………………………………………26
一.设计要求
要求设计一个简便的科学计算软件可以实现线性代数方程组的求解,软件功能要求如下:
1、设置一个提示语句提示输入方程的个数;
2、设置一个提示语句提示输入未知数的个数;
3、准确、快速的计算出所输入方程组的解,并显示出来。
二.设计的目的意义
许多源于工程技术方面的数学问题,都可以归结为解求线性
方程组。
因此设计一种实用的解线性方程组软件可以给计算带来很大的便利,提高人们的工作效率。
三.设计思想
3.1确定方法
可以使用高斯消去法和迭代法。
迭代法不仅具有程序设计简单,适于自动计算,而且较直接法更少的计算量就可获得满意的解。
因此,迭代法亦是求解线性方程组,尤其是求解具有大型稀疏矩阵的线性方程组的重要方法之一。
Gauss消去法是解线性方程组的一种直接方法,有时也称为精确法,这种算法只包含有限四次运算,并且在每一步运算过程都不会发生舍入误差的假设下,计算的结果就是方程组的精确解。
但实际计算中不可避免舍入误差的存在和影响,所以这种方法只能求得线性方程组的近似解。
3.2编程思路
线性方程组的一般形式是a*x=b,编写这种程序最重要的是算法,正确的编写求解函数高斯消元法首先把矩阵化为上三角阵,根据上三角阵的情况判断解的情况,如果有唯一解则输出结果。
接下来是设计输入对话框,由于矩阵的维数不固定,要根据需要来显示。
根据未知数的个数控制文本框显示的数目、按钮位置和窗口的大小。
可以先创建两个text数组,一个用来输入a,一个用来输入b,另外还可以用两个标签来标记他们的位置,这当中可以用空格来控制。
3.3算法分析
3.3.1高斯消去法
高斯消去法的基本思想是:
对线性代数方程组所对应的增广矩阵(A|b)进行一系列“把某一行的非零常数倍加到另一行上”的初等变换,使得(A|b)中A的对角线一下的元素全变为0,从而使原方程组等价的转化为容易求解的上三角形线性代数方程组,再通过回代得到上三角形线性代数方程组的解,即可求得原方程组的解。
设线性方程组的增广矩阵为:
=
首先,在第一列中选取绝对值最大的元素作为第一列的主元,即,然后交换第一行与第i行,经一次消元计算得:
=(AB)。
重复上述过程,设已完成第k-1步的选主元素,交换两行及消元过程后(AB)已约化为:
第k步选主元素,在右下角方阵的第一列内选取绝对值最大的元素作为这一列的主元,即=,然后交换的第i行与第k行,再进行消元计算。
如此重复,直到最后将原线性代数方程组化为:
=
回代求解得到
列主元消去法除了每步需要按列选出主元,然后进行对换外,其消去过程与高斯顺序消去法是相同的。
3.3.2迭代法
迭代法的基本思想:
是将线性方程组转化为便于迭代的等价方程组,对任选一组初始值(i=1,2…n),按某种计算规则,不断地对所得到的值进行修正,最终获得满足精度要求的方程组的近似解。
对于线性方程组Ax=b。
其中,A为非奇异矩阵。
将A分裂为A=M-N,其中,M为非奇异矩阵,且要求线性代数方程组Mx=d容易求解,一般选择为A的某一部分元素构成的矩阵,称M为A的分裂矩阵。
于是,求解Ax=b转化为求解Mx=Nx+b,由此可构造一个迭代法:
x(0)(初始向量),x(k+1)=Bx(k)+f,(k=0,1,2…)
其中,f=b/M,B=I-A/M为迭代法的迭代矩阵。
选取M为A的对角元素组成的矩阵,即选取M=D,可得到解Ax=b的雅克比迭代法:
x(0)(初始向量),x(k+1)=Bx(k)+f(k=0,1,2…)
BJ为求解Ax=b的雅克比迭代法的迭代矩阵。
解雅克比迭代法的计算公式为:
(k=0,1,2,……:
i=1,2,3,……..n)
雅克比方法是求对称矩阵的全部特征值以及相应的特征向量的一种方法,,它是基于以下两个结论:
1)任何实对称矩阵A可以通过正交相似变换成对角型,即存在正交矩阵Q使得AQ=diag()其中i(i=1,2,…,n)是A的特征值,Q中各列为相应的特征向量。
2)在正交相似变换下,矩阵元素的平方和不变。
即设,Q为交矩阵,记B=AQ=,则
雅克比方法的基本思想:
是通过一次正交变换,将A中的一对非0的非对角线化成0,并且使得非对角元素的平方和减小。
反复进行上述过程,使变换后的矩阵的非对角元素的平方和趋于0,从而使该矩阵近似为对角矩阵,得到全部特征值和特征向量。
四.软件的编制和调试
4.1迭代法解线性方程组在VC6.0环境【3】下开发
4.1.1VC6.0环境介绍
VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
特色:
VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。
缺点:
由于C++是由C语言发展起来的,也支持C语言的编译。
6.0版本是使用最多的版本,很经典。
最大的缺点是对于模版的支持比较差。
现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。
仅支持Windows操作系统。
目前发现与windows7兼容性不好,安装成功后可能会出现无法打开cpp文件的现象。
4.1.2程序流程图
结束
图4.1.2a程序流程图
4.1.3迭代法VC核心编码
structLine*Change(structLine*Lhead,intn){
structLine*p1,*p2,*p3,*p;
structRow*ptr;
inti=1,k,j;
floatmax,t;
if(Lhead==NULL){
printf("
链表为空!
\n"
);
exit(1