高斯消元de小板几
作者:互联网
感觉就是模拟解方程,还比手动解方程笨一些。。。。
但是大数据的话,他毕竟比我解得快多了。。。。
1 inline int Gauss(int n){ 2 int cnt=1;//真实到达的行列式行数 3 for(int i=1;i<=n;i++){//循环到达的列数 4 int r=cnt;//假设从起始行开始消元 5 for(int j=cnt;j<=n;j++)//比较这一列中找到最大的系数 6 if(fabs(g[j][i])>fabs(g[r][i])) r=j; 7 if(fabs(g[r][i])<1e-8) continue;//如果最大的系数也小于0,就跳过这一行 8 for(int j=i;j<=n+1;j++) swap(g[r][j],g[cnt][j]);//将找到最大的系数的一行置顶进行消元 9 for(int j=n+1;j>=i;j--) g[cnt][j]/=g[cnt][i];//系数化一 10 for(int j=cnt+1;j<=n;j++)//实际意图是消去第一个系数不为零的未知数 11 if(fabs(g[j][i])>1e-8)//使其成为一个下三角矩阵 12 for(int k=n+1;k>=i;k--) g[j][k]-=g[cnt][k]*g[j][i];//减去前行的系数 13 cnt++;//开始找下一行 14 } 15 for(int i=n;i>=1;i--)//从最后一行(因为是单一未知数) 16 for(int j=i+1;j<=n;j++)//找到最后一个未知数的值,并进行向上倒退 17 g[i][n+1]-=g[i][j]*g[j][n+1]; 18 if(cnt<=n){//如果其中有系数全是零的一行 19 for(int i=cnt;i<=n;i++) 20 if(fabs(g[i][n+1])>1e-8) return 2;//如果n*x=0且n!=0,无解 21 return 1;//0*x=0,任意多组解 22 } 23 return 0; 24 }View Code
标签:cnt,j1e,return,int,de,小板,--,解方程,高斯消 来源: https://www.cnblogs.com/hzoi-wsn/p/14890619.html