《C++教学资料》求解线性代数方程组的解(高斯消去法).doc

《C++教学资料》求解线性代数方程组的解(高斯消去法).doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
河北工业大学计算机软件技术基础(VC)课程设计报告 学院 电气及其自动化 班级 自动化C083 姓名 张志鹏 __ 学号 _086104___ 成绩 __ ____ 一、题目:求解线性代数方程组的解(高斯消去法) 二、设计思路 1、总体设计 1)分析程序的功能: 通过列主元高斯消去法来求解线性代数方程组的解。 2)系统总体结构: ①系数矩阵(数组)和常数矩阵(数组)的输入; 功能:输入系数矩阵和常数矩阵组合成一个完整的矩阵-增广矩阵 ②列主元高斯消去法(消元和回代)的算法 功能:完成矩阵的消去和回代 ③待求变量矩阵(数组)的输出 功能:实现结果的输出 2、各功能模块的设计: ①通过独立函数void Input实现系数矩阵(数组)和常数矩阵(数组)的输入 ②通过函数MakeMatrix_A, Gauss实现矩阵的消去和回代 ③通过独立函数void Output实现待求变量矩阵(数组)的输出 3、设计中的主要困难及解决方案 困难:如何运用Gauss消去法 方案:Gauss消去法实质上计算三角分解的方法。大致可以分为两步:消元和回代。 1、消元和回代的算法的实现 第一步:消元(将系数矩阵经过一系列的初等变换变成上三角矩阵),方法如下: ① 方程(2) 方程(1) ,并且方程(3) 方程(1) 。得到新方程组: a11X1+a12X2+a13X3 b1 (1) a‘22X2+a’23X3 b‘2 (4) a‘32X2+a‘33X3 b’3 (5) ②再用类似的方法从方程(5)中消去X2的系数a‘32,得到新方程组: a11X1+a12X2+a13X3 b1 (1) a‘22X2+a’23X3 b‘2 (4) a‘‘33X3 b‘‘3 (6) 第二步:回代(依次解出X3、 X2 、X1) 完成上述消元后,用回代的方法就可以从方程(6)(4)(1)中分别求出X3、 X2 、X1 2、列主元消去法,即在变换到第k步时,从第k 列akk以下(包括akk)的各元素中选出绝对值最大者,然后通过行交换将它交换到akk的位置上。因此实现消元和回代的算法的函数处理时,每次对第K行之后的方程进行消元前要进行两项操作: ① 检查方程组第K到第N行方程中的第K列上元素是否为0,若是,则方程组无解或得不到为唯一解。 ② 为了使方程组的解具有较小的计算误差,必须使系数矩阵主对角线上的元素的绝对值为最大。为此,在每消去第K行、第K列上主对角线元素以下的元素时,都要检查一下主对角线上的元素是否比其下的同列元素都大,若不是最大,则把最大元素所在行调换到第K行上(把最大元素作为主对角线元素)。此项功能可单独由一个函数完成。 4、你所设计的程序最终完成的功能 1)说明你编制的程序能完成的功能: 输入方程组的系数输出方程组的解 2)准备的测试数据及运行结果 输入方程组组数:3 输入方程组各项系数: 3 2 1 14 1 1 1 10 2 3 -1 1 方程组的解是: X[1] 1 x[2] 2 x[3] 7 三、程序清单 #include #include const int N 100; void Input double *p [N],double * ;//输入函数 void Output double * ; //输出函数 void MakeMatrix_A double *p [N],double *q [N],double * ;//求增广矩阵 void Gauss double *p [N],double *q [N],double *,double * ;//高斯列主消元 int y;//方程组组数 void main double Matrix[N][N],Matrix_A[N][N],Matrix_C[N],Matrix_V[N]; Input Matrix,Matrix_C ;//输入 Gauss Matrix,Matrix_A,Matrix_C,Matrix_V ; Output Matrix_V ;//输 void Input double *Matrix [N],double *Matrix_C //输入函数 int i,j; cout 输入方程组组数:; cin y; cout 输入方程组各项系数: endl; for i 0;i y;i++ for j 0;j y;j++ cin Matrix[i][j]; cin Matrix_C[i]; void MakeMatrix_A double *Matrix [N],double *Matrix_A [N],double *Matrix_C //求增广矩阵 int i,j; for i 0;i y;i

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档