文档详情

数组分析实验高斯消去法的实现..doc

发布:2017-01-11约2.96千字共8页下载文档
文本预览下载声明
南昌大学实验报告二 学生代号: 信念 学 号: 5215201314 专业班级: 网络间谍088班 实验类型:□验证 □ 综合■设计□创新 实验日期:2010-12-5 实验成绩: 实验目的 用C语言或C++语言编程实现高斯消去法。 实验基本原理和内容 基本思想: 高斯消去法算法的构造: 记方程组AX=bA(1)X=b(1), 其中,Ab(1)的元素分别记为 Step1:第一次消元 设,将增广矩阵的第i行减去倍,(i=2,…,n),目的是将增广矩阵的第一列内除每一个元素不变外,其余全部消为零,得到A(2)X=b(2),即 其中 Step2:第k次消元() 设第k-1次消元已完成,且,得到A(k)X=b(k),即 , 如此反复,经过n-1次消元之后得到一个与原方程组等价的上三角形方程组. Step3:回代 只要就可以回代求解 高斯消去法的算法 Step1消元 : 对k=1,2,…,n-1 则停止计算 对i=k+1,k+2,…,n 计算因子; 对j=k+1,k+2,…,n 计算; Step2回代: 对=n,n-1,…,1 (高斯消去法的条件) 若A的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解. 若消元过程中允许对增广矩阵进行行交换,则方程组Ax=b可用消去法求解的充要条件是A可逆. 主要仪器设备及耗材 PC机一台PC微机 Windows 操作系统 Microsoft Visual Studio 6.0集成开发环境 实验程序及运行结果 高斯消元法实验程序代码如下: #include stdio.h #include stdlib.h #define N 10 //矩阵大小范围 /* * 使用已经求出的x,向前计算x(供getx()调用) * float a[][] 系数矩阵 * float x[] 方程组解 * int i 解的序号 * int n 矩阵大小 * return 公式中需要的和 */ float getm(float a[N][N], float x[N], int i, int n) { float m = 0; int r; for(r=i+1; rn; r++) { m += a[i][r] * x[r]; } return m; } /* * 解方程组,计算x * float a[][] 系数矩阵 * float b[] 右端项 * float x[] 方程组解 * int i 解的序号 * int n 矩阵大小 * return 方程组的第i个解 */ float getx(float a[N][N], float b[N], float x[N], int i, int n) { float result; if(i==n-1) //计算最后一个x的值 result = float(b[n-1]/a[n-1][n-1]); else //计算其他x值(对于公式中的求和部分,需要调用getm()函数) result = float((b[i]-getm(a,x,i,n))/a[i][i]); return result; } void main() { //float a[N][N] = {{2,1,1},{1,3,2},{1,2,2}}; //float b[N] = {4,6,5}; float a[N][N]; //系数矩阵 float b[N]; //右端项 float x[N]; //方程组解 int i,j,k; int n=N; //矩阵大小 /*用户手工输入矩阵*/ printf(请输入系数矩阵的大小:); scanf(%d, n); printf(请连续输入矩阵值:); for(i=0; in; i++) { for(j=0; jn; j++) scanf(%f, a[i][j]); } printf(请输入右端项:); for(i=0; in; i++) { scanf(%f, b[i
显示全部
相似文档