其他分享
首页 > 其他分享> > 高斯消元de小板几

高斯消元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