Advertisement
Tvor0zhok

Методы вычислений 16.09.22

Sep 22nd, 2022
1,201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. typedef vector <double> vec;
  8. typedef vector <vec> mat;
  9.  
  10. const double v = 10;
  11.  
  12. int n;
  13. mat A;
  14. vec x, b;
  15.  
  16. vec operator * (const mat& A, const vec& x)
  17. {
  18.     vec b(n + 1);
  19.  
  20.     for (int i = 0; i <= n; ++i)
  21.         for (int j = 0; j <= n; ++j)
  22.             b[i] += A[i][j] * x[j];
  23.  
  24.     return b;
  25. }
  26.  
  27. vec Gauss(mat& A, vec& b)
  28. {
  29.     mat T(n + 1, vec(n + 1));
  30.  
  31.     for (int k = 0; k < n; ++k)
  32.         for (int i = k + 1; i <= n; ++i)
  33.         {
  34.             T[i][k] = A[i][k] / A[k][k];
  35.             b[i] -= T[i][k] * b[k];
  36.  
  37.             for (int j = k + 1; j <= n; ++j)
  38.                 A[i][j] -= T[i][k] * A[k][j];
  39.         }
  40.  
  41.     vec x(n + 1);
  42.  
  43.     x[n] = b[n] / A[n][n];
  44.  
  45.     for (int k = n - 1; k >= 0; --k)
  46.     {
  47.         double sum = 0;
  48.  
  49.         for (int j = k + 1; j <= n; ++j)
  50.             sum += A[k][j] * x[j];
  51.  
  52.         x[k] = (b[k] - sum) / A[k][k];
  53.     }
  54.  
  55.     return x;
  56. }
  57.  
  58. void print(mat& A)
  59. {
  60.     cout << "Матрица:\n";
  61.  
  62.     for (int i = 0; i <= n; ++i, cout << "\n")
  63.         for (int j = 0; j <= n; ++j)
  64.             cout << left << setw(10) << A[i][j];
  65. }
  66.  
  67. void print(vec& a)
  68. {
  69.     cout << "Вектор: (";
  70.  
  71.     for (int i = 0; i < n; ++i)
  72.         cout << a[i] << ", ";
  73.  
  74.     cout << a[n] << ")\n";
  75. }
  76.  
  77. void print(mat& A, vec& b)
  78. {
  79.     cout << "СЛУ имеет вид:\n";
  80.  
  81.     for (int i = 0; i <= n; ++i, cout << "\n")
  82.     {
  83.         for (int j = 0; j < n; ++j)
  84.             cout << A[i][j] << " * x_" << (j + 1) << " + ";
  85.  
  86.         cout << A[i][n] << " * x_" << (n + 1) << " = " << b[i];
  87.     }
  88. }
  89.  
  90. int main()
  91. {
  92.     setlocale(LC_ALL, "Russian");
  93.     cout << fixed << setprecision(4);
  94.  
  95.     n = 10;
  96.  
  97.     A.resize(n + 1);
  98.  
  99.     for (int i = 0; i <= n; ++i)
  100.         for (int j = 0; j <= n; ++j)
  101.         {
  102.             A[i].push_back(v + i);
  103.             if (i != j) A[i][j] /= 100.0;
  104.         }
  105.  
  106.     x.resize(n + 1);
  107.  
  108.     for (int i = 0; i <= n; ++i)
  109.         x[i] = i;
  110.  
  111.     vec b = A * x;
  112.  
  113.     vec checkx = Gauss(A, b);
  114.  
  115.     print(checkx);
  116.  
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement