算法學習筆記1.1.2 高斯消元
阿新 • • 發佈:2018-08-20
得到 ont double using als clu math 利用 poj
任務
給一個n元一次方程組,求它們的解集。
說明
將方程組做成矩陣形式,再利用三種初等矩陣變換,得到上三角矩陣,最後回代得到解集。
接口
int solve(double a[][maxn], bool[], double ans[], const int& n);
- 復雜度:O(n^3)
- 輸入:
- a 方程組對應的矩陣
- n 未知數個數
- l,ans 存儲解,l[]表示是否為自由元
代碼
#include <iostream> #include <cmath> using namespace std; const double EPS = 1e-9; const int maxn = 1010; inline int solve(double a[][maxn], bool l[], double ans[], const int& n) { int res = 0, r = 0; for (int i = 0; i < n; i ++) l[i] = false; for (int i = 0; i < n; i ++) { for (int j = r; j < n; j ++) if (fabs(a[j][i]) > EPS) { for (int k = i; k <= n; k ++) swap(a[j][k], a[r][k]); break; } if (fabs(a[r][i]) < EPS) { res ++; continue; } for (int j = 0; j < n; j ++) if (j != r && fabs(a[j][i]) > EPS) { double tmp = a[j][i] / a[r][i]; for (int k = i; k <= n; k ++) a[j][k] -= tmp * a[r][k]; } l[i] = true, r++; } for (int i = 0; i <n ; i ++) if (l[i]) for (int j = 0; j < n; j ++) if (fabs(a[j][i]) > 0) ans[i] = a[j][n] / a[j][i]; return res; }
使用範例
POJ1830
算法學習筆記1.1.2 高斯消元