高斯消元法
根据线性代数的知识,我们了解到,方程组的解一共有三种情况:
可以通过其增广矩阵来解方程组:
通过初等变换转换为上三角的形式:
对应增广矩阵为;
高斯消元思路
枚举每一列:
- 找到绝对值最大的一行
- 将这一行换到最上面去
- 将该行的第c个数变成1
- 用第一行将下面所有行的第c列消成0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| int gauss(){ int c,r; for(c=1,r=1;c<=n;c++){ int t=r; for(int i=r;i<=n;i++) if(fabs(a[i][c])>fabs(a[t][c])) t=i; if(fabs(a[t][c])<eps) continue; for(int i=c;i<=n+1;i++) swap(a[r][i],a[t][i]); for(int i=n+1;i>=c;i--) a[r][i]/=a[r][c]; for(int i=r+1;i<=n;i++) if(fabs(a[i][c])>eps) for(int j=n+1;j>=c;j--) a[i][j]-=a[i][c]*a[r][j]; r++; } if(r<=n){ for(int i=r;i<=n;i++) if(fabs(a[i][n+1])>eps) return 2; return 1; } for(int i=n-1;i>=1;i--) for(int j=i+1;j<=n;j++) a[i][n+1]-=a[j][n+1]*a[i][j]; return 0; }
|