Advertisement
Solingen

z13.2.cpp

Dec 22nd, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. // Функция gaussSolve решает систему A*x = b методом Гаусса
  6. // A - матрица (n x n), b - вектор (n)
  7. vector<double> gaussSolve(vector<vector<double>>& A, vector<double>& b)
  8. {
  9.     int n = A.size();
  10.  
  11.     // Формируем расширенную матрицу
  12.     for(int i = 0; i < n; i++)
  13.     {
  14.         A[i].push_back(b[i]);
  15.     }
  16.  
  17.     // Прямой ход
  18.     for(int i = 0; i < n; i++)
  19.     {
  20.         // pivot
  21.         double pivot = A[i][i];
  22.         // нормируем i-ю строку
  23.         for(int col = i; col <= n; col++)
  24.         {
  25.             A[i][col] /= pivot;
  26.         }
  27.         // зануляем в остальных строках
  28.         for(int r = i+1; r < n; r++)
  29.         {
  30.             double factor = A[r][i];
  31.             for(int c = i; c <= n; c++)
  32.             {
  33.                 A[r][c] -= factor * A[i][c];
  34.             }
  35.         }
  36.     }
  37.  
  38.     // Обратный ход
  39.     vector<double> x(n, 0.0);
  40.     for(int i = n-1; i >= 0; i--)
  41.     {
  42.         x[i] = A[i][n];
  43.         for(int c = i+1; c < n; c++)
  44.         {
  45.             x[i] -= A[i][c] * x[c];
  46.         }
  47.     }
  48.     return x;
  49. }
  50.  
  51. int main()
  52. {
  53.     int n;
  54.     cout << "n = ";
  55.     cin >> n;
  56.  
  57.     vector<vector<double>> mat(n, vector<double>(n));
  58.     vector<double> rhs(n);
  59.  
  60.     // Считываем
  61.     cout << "Введите матрицу A (" << n << " x " << n << ") и вектор b:\n";
  62.     for(int i = 0; i < n; i++)
  63.     {
  64.         for(int j = 0; j < n; j++)
  65.         {
  66.             cin >> mat[i][j];
  67.         }
  68.     }
  69.     for(int i = 0; i < n; i++)
  70.     {
  71.         cin >> rhs[i];
  72.     }
  73.  
  74.     // Решаем
  75.     vector<double> sol = gaussSolve(mat, rhs);
  76.  
  77.     // Вывод
  78.     cout << "Решение:\n";
  79.     for(int i = 0; i < n; i++)
  80.     {
  81.         cout << "x[" << i << "] = " << sol[i] << endl;
  82.     }
  83.  
  84.     return 0;
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement