高斯消元
2017-01-19 19:00
260 查看
bool equal(double source, double target) { if (abs(source - target) <= 0.000001) return true; else return false; } vector<double> Gauss(vector<vector<double> > A, vector<double> b,int &state) { //state -1 无解 0 唯一解 1 无穷解 //N个方程,M个未知数 int N = A.size(), M = A[0].size(); state = 0; //处理上三角矩阵 for (size_t i = 0; i < M; i++) { bool find = false; //令对角线上的元素 !=0 for (size_t j = i; j < N; j++) { if (A[j][i] != 0) { swap(A[i], A[j]); find = true; break; } } //多解的情况 if (!find) { state = 1; continue; } //将当前列第i行后的所有行都化为0(非上三角部分的化为0) for (size_t j = i + 1; j < N; j++) { //double aji = A[j][i],aii= A[i][i]; double tmp = A[j][i] / A[i][i]; for (size_t k = 0; k < M; k++) A[j][k] -= A[i][k] * tmp; //A[j][k] -= A[i][k] * aji / aii; b[j]-=b[i] * tmp; } } //判断无解 for (size_t i = 0; i < N; i++) { bool allZero=true; for (size_t j = 0; j < M; j++) { if (!equal(A[i][j],0)) { allZero = false; break; } } if (allZero&&!equal(b[i],0)) { state = -1; return vector<double>(); } } //判断无穷解 if (state == 1) return vector<double>(); //求值过程 vector<double> result(M, 0); for (int i = M - 1; i >= 0; i--) { for (size_t j = i + 1; j < M; j++) { b[i] -= A[i][j] * result[j]; A[i][j] = 0; } result[i] = b[i] / A[i][i]; } return result; }
相关文章推荐
- [luoguP2447] [SDOI2010]外星千足虫(高斯消元 + bitset)
- [BZOJ]3143 游走 期望 + 高斯消元
- BZOJ1013(JSOI2008)[球形空间产生器sphere]--高斯消元
- BZOJ 3143 游走 (高斯消元 贪心)
- 【高斯消元】CDOJ1784 曜酱的线性代数课堂(二)
- HDU 5088 Revenge of Nim II 高斯消元(异或,矩阵秩)
- [BZOJ]5001: 搞事情 高斯消元解xor方程组
- 高斯消元——球形空间产生器sphere
- 【数学】高斯消元
- poj 1830 高斯消元
- Painter's Problem POJ - 1681 高斯消元+枚举自由元
- Hdu 5833 Zhu and 772002 异或方程组高斯消元
- EOJ Monthly 2017.12 - F1. 不见了的人口数据 (Easy) (高斯消元)
- bzoj1013 [JSOI2008]球形空间产生器(高斯消元)
- bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】
- BZOJ 1013 [JSOI2008]球形空间产生器sphere | 高斯消元
- BZOJ[1013][JSOI2008]球形空间产生器sphere 高斯消元
- [bzoj1923][高斯消元]外星千足虫
- POJ 1222 - EXTENDED LIGHTS OUT (高斯消元)
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)