Advertisement
leoanjos

Gauss - Wrong

Mar 28th, 2023
937
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. int solve(vector<vector<ldouble>> &A, vector<ldouble> &ans) {
  2.     int rows = A.size();
  3.     int cols = A[0].size() - 1;
  4.  
  5.     int row = 0;
  6.     vector<int> where(cols, -1);
  7.  
  8.     for (int col = 0; col < cols; col++) {
  9.         int chosen = row;
  10.         for (int i = row + 1; i < rows; i++)
  11.             if (fabsl(A[i][col]) > fabsl(A[chosen][col]))
  12.                 chosen = i;
  13.  
  14.         if (!sign(A[chosen][col])) continue;
  15.  
  16.         where[col] = row;
  17.         A[row].swap(A[chosen]);
  18.  
  19.         for (int i = 0; i < rows; i++)
  20.             if (i != row) {
  21.                 ldouble factor = A[i][col] / A[row][col];
  22.                 for (int j = col; j <= cols; j++)
  23.                     A[i][j] -= A[row][j] * factor;
  24.             }
  25.  
  26.         row++;
  27.     }
  28.  
  29.     bool freedom = false;
  30.     ans.assign(cols, 0.0L);
  31.  
  32.     for (int i = 0; i < cols; i++) {
  33.         if (where[i] == -1) freedom = true;
  34.         else ans[i] = A[where[i]][cols] / A[where[i]][i];
  35.     }
  36.  
  37.     for (int i = 0; i < rows; i++) {
  38.         ldouble sum = 0.0L;
  39.         for (int j = 0; j < cols; j++)
  40.             sum += ans[j] * A[i][j];
  41.  
  42.         if (sign(sum - A[i][cols]))
  43.             return 0;
  44.     }
  45.  
  46.     return freedom ? INF : 1;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement