O_Egor

Степенной метод

Mar 21st, 2022 (edited)
2,556
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. void multiplyingMatrix(vector<vector<double>> x, vector <double> &y, vector <double> &l)
  8. {
  9.     int sz = y.size();
  10.     vector <double> yy(sz);
  11.     for (int i = 0; i < sz; ++i)
  12.     {
  13.         double perem = 0;
  14.         for (int j = 0; j < sz; ++j)
  15.         {
  16.             perem += x[i][j] * y[j];
  17.         }
  18.         yy[i] = perem;
  19.        // cout << yy[i] << '\n';
  20.     }
  21.     for (int i = 0; i < sz; ++i)
  22.     {
  23.         l[i] = yy[i] / y[i];
  24.         y[i] = yy[i];
  25.     }
  26. }
  27.  
  28. int main()
  29. {
  30.     int n;
  31.     cin >> n;
  32.     vector<vector <double>> v(n, vector<double>(n));
  33.     for (int i = 0; i < n; ++i)
  34.     {
  35.         for (int j = 0; j < n; ++j)
  36.             cin >> v[i][j];
  37.     }
  38.     vector <double> y(n, 1), lambda(n, 1), lambda2(n, 1);
  39.  
  40.     vector <double> yy(n, 1);
  41.    
  42.     /*multiplyingMatrix(v, yy, lambda2);
  43.     for (int i = 0; i < n; ++i)
  44.     {
  45.         cout << lambda2[i] << ' ';
  46.     }*/
  47.     while (true)
  48.     {
  49.         bool f = 0;
  50.         multiplyingMatrix(v, yy, lambda2);
  51.         for (int i = 0; i < n; ++i)
  52.             if (abs(lambda2[i] - lambda[i]) < 0.0001)
  53.             {
  54.                 f = 1;
  55.                 break;
  56.             }
  57.         if (f)
  58.             break;
  59.         for (int i = 0; i < n; ++i)
  60.         {
  61.             cout << lambda2[i] << ' ';
  62.         }
  63.         cout << '\n';
  64.         for (int i = 0; i < n; ++i)
  65.             lambda[i] = lambda2[i];
  66.     }
  67.     cout << "ANSWER: ";
  68.     for (int i = 0; i < n; ++i)
  69.     {
  70.         cout << lambda2[i] << ' ';
  71.     }
  72.  
  73.     return 0;
  74. }
  75. /*
  76. 4
  77. 1.2 0.5 2 1
  78. 0.5 1 0.8 2
  79. 2 0.8 1 1
  80. 1 2 1 2
  81. */
Advertisement
Add Comment
Please, Sign In to add comment