greannmhar

gauss

Nov 5th, 2025
5
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. #include <cmath>
  2. #include <algorithm>
  3.  
  4. int gauss(int n, double *A, double *b, double *x) {
  5. for (int k = 0; k < n; k++) {
  6. int max_row = k;
  7. for (int i = k + 1; i < n; i++) {
  8. if (std::fabs(A[i * n + k]) > std::fabs(A[max_row * n + k])) {
  9. max_row = i;
  10. }
  11. }
  12.  
  13. if (max_row != k) {
  14. for (int j = k; j < n; j++) {
  15. std::swap(A[k * n + j], A[max_row * n + j]);
  16. }
  17. std::swap(b[k], b[max_row]);
  18. }
  19.  
  20. if (std::fabs(A[k * n + k]) < 1e-15) {
  21. return 1;
  22. }
  23.  
  24. for (int i = k + 1; i < n; i++) {
  25. double factor = A[i * n + k] / A[k * n + k];
  26. for (int j = k; j < n; ++j) {
  27. A[i * n + j] -= factor * A[k * n + j];
  28. }
  29. b[i] -= factor * b[k];
  30. }
  31. }
  32.  
  33. for (int i = n - 1; i >= 0; i--) {
  34. x[i] = b[i];
  35. for (int j = i + 1; j < n; j++) {
  36. x[i] -= A[i * n + j] * x[j];
  37. }
  38. x[i] /= A[i * n + i];
  39. }
  40.  
  41. return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment