高斯消元de小板几

Posted 雪域亡魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯消元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

 

 

以上是关于高斯消元de小板几的主要内容,如果未能解决你的问题,请参考以下文章

NEFU 505 超级红与黑 (高斯消元)

矩阵求逆

UVA 11542 Square 高斯消元 异或方程组求解

BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]

模板高斯(约旦)消元

NEFU 506&&ZOJ 3353 Chess Board (四种构造的高斯消元)