高斯列主元消去法解线性方程组VC++课程设计报告.docVIP

  • 30
  • 0
  • 约3.93千字
  • 约 6页
  • 2018-02-02 发布于江西
  • 举报

高斯列主元消去法解线性方程组VC++课程设计报告.doc

高斯列主元消去法解线性方程组VC课程设计报告

课程设计报告 课程设计目的:采用高斯列主元消去法解线性方程组。用C语言或C++设计一个程序来通过高斯列主元消去法解线性方程组AX=b的解。 课程设计的内容 课程设计的题目及简介 题目:高斯列主元消去法解线性方程组。 简介:对线性方程组AX=b等价于 方法说明(以4阶为例): (1)第1步消元——在增广矩阵(A,b)第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b)做初等行变换使原方程组的第一列元素除了第一行的全变为0; (2)第2步消元——在增广矩阵(A,b)中的第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为: 注:*代表非零的数。 (3)第3步消元——在增广矩阵(A,b)中的第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b)做初等行变换使原方程组转化为: (4)按x4 ( x3( x2( x1 的顺序回代求解出方程组的解。 此方法即高斯列主元消去法,若在变换的过程中没有选出绝对值最大的数放在最前面进行消元而求出未知数的方法就叫高斯消去法。高斯消去法有一很明显的缺点,即在消元的过程中可能出现小主元,这种小主元可能导致解的不稳定,为了避免小主元的出现正是高斯列主元消去法的主要目的。而通过每次消元之前的调换方程的次序也正是计算机实现高斯列主元消去法的关键。 设计说明 我用的是C++面向对象程序设计进行这个程序的设计的。定义一个求方程解的类,只需用户将所需求解的方程的各个系数输入即可求出此方程的解。很方便,而且程序很简洁。 先设定了一个类,也就是说是面向对象的。此类的作用就是解用户输入的方程组,并输出结果。此类里面定义了两个函数, void initialize()和void glz::solve()。第一个函数的作用是初始化类中的变量,以便计算机知道方程中未知数的个数,便于运算和输出。而后一个函数的作用这是解方程组,并输出结果。此函数的解方程组功能的思路由上面课程设计的简介设计而出。主函数中增加了循环,此循环可以解多个方程组。 流程图 结束 程序清单 #includeiostream.h//文件包含 #includemath.h #includeconio.h #includeiomanip.h class glz//定义类 {public:int row,col,i,j,k,t; double mat[100][100]; double tmp; public: void initialize(); void solve(); }; void glz :: initialize()//函数初始化 {cout欢迎使用我的小程序来解方程组,本程序是利用高斯列主元消去法解方程组的,祝您使用愉快endl; cout输入方程组的个数endl; cinrow; cout输入未知数的个数加一endl; cincol; cout按行输入各未知数前的系数和等号右边的常数endl; for(int i=0;irow;i++) for(int j=0;jcol;j++) cinmat[i][j]; } void glz::solve(){ double x[100];//解方程的函数 for(i = 0;i col - 2;i ++)//变形 { k = i; double max = mat[k][i]; for(j = i + 1;j col - 1;j++) { if (abs(mat[j][ i]) abs(mat[k][ i])) { max = mat[j][ i]; k = j; } } if (k != i) { for (j = i; j col; j++)//找到最大的并交换 { double tmp = mat[k][ j]; mat[k][ j] = mat[i][ j]; mat

文档评论(0)

1亿VIP精品文档

相关文档