Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <utility>
- using namespace std;
- vector<double> gauss(vector<vector<double>>& a, vector<double>& y, int n)
- {
- const double eps = 0.00001;
- double max;
- int k, index;
- k = 0;
- while (k < n)
- {
- max = abs(a[k][k]);
- index = k;
- for (int i = k + 1; i < n; i++)
- if (abs(a[i][k]) > max)
- {
- max = abs(a[i][k]);
- index = i;
- }
- if (max < eps)
- {
- cout << "Решение получить невозможно из-за нулевого столбца ";
- cout << index << " матрицы A" << endl;
- return vector<double>();
- }
- for (int j = 0; j < n; j++)
- swap(a[k][j], a[index][j]);
- swap(y[k], y[index]);
- for (int i = k; i < n; i++)
- {
- double temp = a[i][k];
- if (abs(temp) < eps) continue;
- for (int j = 0; j < n; j++)
- a[i][j] /= temp;
- y[i] /= temp;
- if (i == k) continue;
- for (int j = 0; j < n; j++)
- a[i][j] -= a[k][j];
- y[i] -= y[k];
- }
- k++;
- }
- vector<double> x(n);
- for (k = n - 1; k >= 0; k--)
- {
- x[k] = y[k];
- for (int i = 0; i < k; i++)
- y[i] -= a[i][k] * x[k];
- }
- return x;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int n;
- cout << "Введите порядок системы\n";
- cin >> n;
- vector<vector<double>> mat(n, vector<double>(n));
- cout << "Введите коэфиценты системы\n";
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- cin >> mat[i][j];
- cout << "Введите свободные члены\n";
- vector<double> free(n);
- for (int i = 0; i < n; i++)
- cin >> free[i];
- vector<double> result = gauss(mat, free, n);
- if (result.size() == 0)
- return 0;
- cout << endl;
- for (int i = 0; i < n; i++)
- {
- cout << endl;
- for (int j = 0; j < n; j++)
- cout << mat[i][j] << " ";
- cout << free[i];
- }
- cout << endl;
- cout << "Корни\n";
- for (int i = 0; i < n; i++)
- cout << result[i] << " ";
- }
Advertisement
Add Comment
Please, Sign In to add comment