高斯列主元消元法解线性方程组.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流高斯列主元消元法解线性方程组.精品文档.高斯列主元消元法解线性方程组一、题目:用Gauss列主元消去法解线性方程组,其中,A= 二、原理及步骤分析设,。若约化主元素,则通过高斯消元法将方程约化为三角形方程组求解。 如果在消元过程中发现某个约化主元, 则第K次消元就无法进行。此外,即使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。相应过程为:(1)选主元:在子块的第一列中选择一个元使 并将第k行元与第行元互换。(2)消元计算:对k=1,2,n-1依次计算(3) 回代求解三 流程图回代求解,即交换行,即选主元,即确定,使输入矩阵 消元计算,即四、 源程序高斯列主元消元法程序#include<math.h>#include<stdio.h>#define N 6main() float ANN+1=17.031,-0.615,-2.991,1.007,-1.006,0.000,0.230,-1.000,34.211,-1.000,-2.100,0.300,-1.700,-52.322,0.000,0.500,13.000,-0.500,1.000,-1.500,54.000,4.501,3.110,-3.907,-61.705,12.170,8.999,240.236,0.101,-8.012,-0.017,-0.910,4.918,0.100,29.304,1.000,2.000,3.000,4.500,5.000,21.803,-117.818, total,x6; int i,j,k,m,n;printf("方程的增广矩阵:n"); for(i=0;i<N;i+) for(j=0;j<N+1;j+) printf(" %5.3f ",Aij); printf("n");for(j=0;j<N-1;j+) /*di j bu xiao yuan */ k=j; /*最大行号赋给k*/ for(i=j+1;i<N;i+) if(fabs(Aij)>fabs(Akj) k=i; if(k=j) for(i=j+1;i<N;i+) for(m=j+1;m<N+1;m+) Aim=Aim-Ajm*Aij/Ajj; else for(n=0;n<N+1;n+) ANn=Akn; /*换行 */ Akn=Ajn; Ajn=ANn; for(i=j+1;i<N;i+) for(m=j+1;m<N+1;m+) Aim=Aim-Ajm*Aij/Ajj; printf("消元後的结果:n"); for(i=0;i<N;i+) for(j=0;j<N+1;j+) printf(" %5.3f ",Aij); printf("n");xN-1=AN-1N/AN-1N-1;for(i=N-2;i>=0;i-)total=AiN;for(j=N-1;j>i;j-)total=total-xj*Aij;xi=total/Aii;printf("方程的解:n");for(i=0;i<N;i+) printf("x1=%fn",xi); 五、 结果显示六、 结果分析: 消元必须从主元的下一行下一列开始,否则,不会得到正确结果。从结果运行情况看,消元后不会得到三角阵,但回带求解时,程序只关心上三角阵,不会影响最终计算结果。若从主元这一列开始,消元后会得到一个三角阵,但该三角阵并不准确。由不准确的三角阵到的结果也不正确。