Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <algorithm>
- int gauss(int n, double *A, double *b, double *x) {
- for (int k = 0; k < n; k++) {
- int max_row = k;
- for (int i = k + 1; i < n; i++) {
- if (std::fabs(A[i * n + k]) > std::fabs(A[max_row * n + k])) {
- max_row = i;
- }
- }
- if (max_row != k) {
- for (int j = k; j < n; j++) {
- std::swap(A[k * n + j], A[max_row * n + j]);
- }
- std::swap(b[k], b[max_row]);
- }
- if (std::fabs(A[k * n + k]) < 1e-15) {
- return 1;
- }
- for (int i = k + 1; i < n; i++) {
- double factor = A[i * n + k] / A[k * n + k];
- for (int j = k; j < n; ++j) {
- A[i * n + j] -= factor * A[k * n + j];
- }
- b[i] -= factor * b[k];
- }
- }
- for (int i = n - 1; i >= 0; i--) {
- x[i] = b[i];
- for (int j = i + 1; j < n; j++) {
- x[i] -= A[i * n + j] * x[j];
- }
- x[i] /= A[i * n + i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment