GAUSS 消元法解线性方程组学院:计算机与信息工程学院班级: 计算机科学与技术师范汉班学号: 20081121107 姓名: 黄志强指导老师: 马季驌 1. alborithm analysis: 本程序采用高斯消元法解线性方程组。其主要思想是将增广矩阵中的系数矩阵先化为三角矩阵的形式, 再通过迭代或者化为对角矩阵求出方程的根。本程序时先将系数矩阵化为上三角形式,再化成对角矩阵求解。 2. code: #include<iostream> using namespace std; float a[20][20]; int main() { int n,i,j,p,x,y,f;float k,t; cout<<" 请输入线性方程组系数矩阵的阶(按 0 退出): "; while(cin>>n&&n>0) { int judge=1;// 作为系数矩阵对应行列式是否为 0 的标识; cout<<" 请输入系数行列式的各行各列的元素: "<<endl; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cin>>a[i][j];} // 输入行列式的各行各列元素 cout<<" 请输入线性方程组的常数列: "<<endl; for(i=1;i<=n;i++) cin>>a[i][n+1]; /********************* 增 广矩阵输入完毕以 下进行划上三角矩阵操作*************************************************************************************/ for(j=1;j<=n;j++) //j 代表一大步{ cout<<" 第"<<j<<" 大步: "<<endl; f=n; while(a[j][j]==0&&f>j) // 在此处附加一个判断行列式 a[j][j] 元是否为零的语句。{ for(p=1;p<=n;p++) { t=a[j][p]; a[j][p]=a[f][p]; a[f][p]=a[j][p]; } cout<<" 第"<<j<<" 行和第"<<f<<" 行发生互换"<<endl; f--; }//当 a[j][j] 元为零时,消元主元无效;第 j 行和第 f 行(从当前处理行依次往上寻找非零可作为消元主元的行)互换; if(a[j][j]==0) { cout<<" 该线性方程组解不唯一或者无解(提前结束) :"<<0<<endl; judge=0; //judge 为预先结束符; 由于行列式出现零较多, 可以提前判断行列式为零; break; } for(i=n;i>j&&judge!=0;i--) //i 代表第 J 大步的第 i 小步,若 judge 为0 ,说明{ // 消元元素为零时的换行处理. 通过换行来得到有效消元媒介 k=-a[i][j]/a[j][j]; for(p=1;p<=n+1;p++) a[i][p]+=a[j][p]*k; // 依次消去 a[i][j] 元,构造上三角行列式 cout<<" 下一个小步的行乘系数 k为:"<<k<<endl; for(x=1;x<=n;x++) { for(y=1;y<=n+1;y++) {cout<<a[x][y]<<" ";}//xy 原来是沿
实验一高斯消元法 来自淘豆网www.taodocs.com转载请标明出处.