[模板]高斯消元

 1 void Gauss(){
 2     register int bj;register double pp;
 3     for(int i=1;i<=n;++i){
 4         bj=i;
 5         for(int j=i+1;j<=n;++j)
 6             if(gauss[bj][i]*gauss[bj][i]<gauss[j][i]*gauss[j][i])bj=j;
 7         for(int j=1;j<=n+1;++j)pp=gauss[i][j],gauss[i][j]=gauss[bj][j],gauss[bj][j]=pp;
 8         if(gauss[i][i]*gauss[i][i]<1e-7)continue;
 9         for(int j=1;j<=n;++j){
10             if(i==j)continue;
11             pp=gauss[j][i]/gauss[i][i];
12             for(int k=1;k<=n+1;++k)gauss[j][k]-=pp*gauss[i][k];
13         }
14     }
15     for(int i=n;i;--i){
16         for(int j=i+1;j<=n;++j) gauss[i][n+1]-=gauss[i][j]*gauss[j][n+1];
17         gauss[i][n+1]/=gauss[i][i];
18     }
19     for(int i=1;i<n;++i)printf("%.10lf\n",gauss[i][n+1]);
20 }
View Code

 

posted @ 2019-07-07 07:15  DeepinC  阅读(85)  评论(0编辑  收藏  举报