Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1.  
  2. template <typename T, int M>
  3. int MaxNev (T (&A)[M]) {
  4.     T Max = abs(A[0]);
  5.     int j = 0;
  6.     for (int i = 1; i < M; i++)
  7.     {
  8.         if (abs(A[i]) > Max)
  9.         {
  10.             Max = abs(A[i]);
  11.             j = i;
  12.         }
  13.     }
  14.     return j;
  15. }
  16.  
  17. /*Функция по реализации метода Ретаксации.
  18. Принимает двумерный массив, приведенный в итерационному виду*/
  19. template <typename T, int N, int M>
  20. void Relax (T (&A)[N][M]) {
  21.    
  22.     float epsilon = 0.000000001; // точность
  23.     double Truth;
  24.     int iter = 0;
  25.     int Max;
  26.     double X[N], rezX[N], Nevyaz[N], B[N];
  27.     for (size_t j = 0; j < N; j++)
  28.     {
  29.         B[j] = A[j][M - 1];
  30.     }
  31.     for (size_t i = 0; i < N; i++)
  32.     {
  33.         X[i] = 0;
  34.         Nevyaz[i] = B[i]/A[i][i];
  35.         for (int j = 0; j < N; j++)
  36.         {
  37.             rezX[i] = 0;
  38.         }
  39.     }
  40.     Max = MaxNev (Nevyaz);  // Функция, для поиска наибольшей невязки
  41.     do
  42.     {
  43.         for (size_t i = 0; i < N; i++)
  44.         {
  45.             X[i] = 0;
  46.         }
  47.         X[Max] = Nevyaz[Max];
  48.         for (int i = 0; i < N; i++) {
  49.             for (int g = 0; g < N; g++) {
  50.                                                           // <-- if (i != g)
  51.                     Nevyaz[i] -= (A[i][g] * X[g])/ abs(A[i][i]);
  52.             }
  53.             //Nevyaz[i] /= A[i][i];
  54.         }//uel
  55.         for (int h = 0; h < N; h++) {
  56.             rezX[h] = rezX[h] + X[h];
  57.         }
  58.         iter++;
  59.         Max = MaxNev (Nevyaz);
  60.     } while (abs(Nevyaz[Max]) > epsilon);
  61.  
  62.  
  63.     for (size_t r = 0; r < N; r++)
  64.     {
  65.         cout << "X[" << r << "] = " << rezX[r] << endl;
  66.     }
  67.     cout << endl << "Колличество итераций методом релаксации: " << iter << endl << endl;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement