Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- // Функция gaussSolve решает систему A*x = b методом Гаусса
- // A - матрица (n x n), b - вектор (n)
- vector<double> gaussSolve(vector<vector<double>>& A, vector<double>& b)
- {
- int n = A.size();
- // Формируем расширенную матрицу
- for(int i = 0; i < n; i++)
- {
- A[i].push_back(b[i]);
- }
- // Прямой ход
- for(int i = 0; i < n; i++)
- {
- // pivot
- double pivot = A[i][i];
- // нормируем i-ю строку
- for(int col = i; col <= n; col++)
- {
- A[i][col] /= pivot;
- }
- // зануляем в остальных строках
- for(int r = i+1; r < n; r++)
- {
- double factor = A[r][i];
- for(int c = i; c <= n; c++)
- {
- A[r][c] -= factor * A[i][c];
- }
- }
- }
- // Обратный ход
- vector<double> x(n, 0.0);
- for(int i = n-1; i >= 0; i--)
- {
- x[i] = A[i][n];
- for(int c = i+1; c < n; c++)
- {
- x[i] -= A[i][c] * x[c];
- }
- }
- return x;
- }
- int main()
- {
- int n;
- cout << "n = ";
- cin >> n;
- vector<vector<double>> mat(n, vector<double>(n));
- vector<double> rhs(n);
- // Считываем
- cout << "Введите матрицу A (" << n << " x " << n << ") и вектор b:\n";
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < n; j++)
- {
- cin >> mat[i][j];
- }
- }
- for(int i = 0; i < n; i++)
- {
- cin >> rhs[i];
- }
- // Решаем
- vector<double> sol = gaussSolve(mat, rhs);
- // Вывод
- cout << "Решение:\n";
- for(int i = 0; i < n; i++)
- {
- cout << "x[" << i << "] = " << sol[i] << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement