Gauss elimination Gauss elimination
brief introduction
Gauss elimination is an O (N3) O (N3) O (N3) O (N3) algorithm for solving linear equations
Basic steps
- Enumerate the unknown number XXX in order, and select the equation with the largest coefficient xxx from the unused equation
- Move it to line iii
- Coefficient the equation into one
- Use this equation to eliminate the unused equation
- The upper triangular matrix is obtained, and all unknowns can be solved by bringing back the last unknowns
Code
#include<bits/stdc++.h> #define reg register const int maxn = 105; int N; double A[maxn][maxn]; double Ans[maxn]; int main(){ scanf("%d", &N); for(reg int i = 1; i <= N; i ++) for(reg int j = 1; j <= N+1; j ++) scanf("%lf", &A[i][j]); for(reg int i = 1; i <= N; i ++){ int max_id = i; for(reg int j = i+1; j <= N; j ++) if(fabs(A[j][i]) > fabs(A[max_id][i])) max_id = j; if(fabs(A[max_id][i]) < 1e-14){ printf("No Solution"); return 0; } for(reg int j = 1; j <= N+1; j ++) std::swap(A[i][j], A[max_id][j]); double tmp = A[i][i]; for(reg int j = 1; j <= N+1; j ++) A[i][j] /= tmp; //Coefficient one for(reg int j = i+1; j <= N; j ++){ tmp = A[j][i]; // x of other lines for(reg int k = 1; k <= N+1; k ++) A[j][k] -= A[i][k] * tmp; // Elimination } Ans[N] = A[N][N+1]; for(reg int i = N-1; i >= 1; i --){ Ans[i] = A[i][N+1]; for(reg int j = i+1; j <= N; j ++) Ans[i] -= Ans[j] * A[i][j]; } } for(reg int i = 1; i <= N; i ++) printf("%.2lf\n", Ans[i]); return 0; }