#include <iostream> #include<cmath> #include<vector> using namespace std; int main() { int i,j ,row_count ,column_count; cout<<"输入行数列数:"; cout<<endl; cin>>row_count>>column_count; vector<vector<float> > a(row_count, vector<float>(column_count)); for(i=0;i<row_count;i++) { for(j=0;j<column_count;j++) { cin>>a[i][j]; } } float b[1]; vector<float> c(column_count); int d[1]; for(int e=0;e<row_count-1;e++) { b[0]=a[e][e]; d[0]=e; for(int k=1+e;k<row_count;k++)//找主元最大行 { if(fabs(a[k][0])>fabs(b[0])) { b[0]=a[k][0]; d[0]=k; } } if(b[0]==0)//判断矩阵是否是奇异矩阵 { cout<<"矩阵是奇异的"; return 0; } if(d[0]!=e)//交换上下行的值 { for(int l=e;l<column_count;l++) { c[l]=a[e][l]; a[e][l]=a[d[0]][l]; a[d[0]][l]=c[l]; } } for(int m=1+e;m<row_count;m++)//列主元消去 { c[0]=a[m][e]; for(int n=e;n<column_count;n++) { a[m][n]=a[m][n]-a[e][n]*c[0]/a[e][e]; } } } vector<float> x(row_count); for(int f=0;f<row_count;f++) x[f]=0; float y; int h=row_count-1; for(int index=row_count;index>0;index--) { int g=row_count-1; y=a[h][column_count-1]; while(x[g]!=0) { y=y-a[h][g]*x[g]; g--; } x[g]=y/a[g][g]; h--; } for(int v=0;v<row_count;v++) cout<<"x["<<v<<"]="<<x[v]<<" "; cout<<endl; return 0; }