Gistrec

Метод прогонки для ленточного формата

Nov 14th, 2018
311
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using std::vector;
  5. using std::cout;
  6. using std::endl;
  7.  
  8. // Решаем уравнение Ax = F
  9. // Где A состоит из трех диагональных лент
  10.  
  11. // Три диагональных ленты
  12. vector<double> A = { 0, -1, -1, -1 };
  13. vector<double> C = { 2,  2,  2,  2 };
  14. vector<double> B = { -1, -1, -1, 0 };
  15.  
  16. vector<double> F = { 0.08, 0.08, 0.08, 0.08};
  17.  
  18.  
  19. vector<double> alpha(5, 0);
  20. vector<double> beta(5, 0);
  21.  
  22. void main() {
  23.     alpha[1] = -B[0] / C[0];
  24.     beta[1] = F[0] / C[0];
  25.  
  26.     for (int i = 1; i < A.size(); i++) {
  27.         alpha[i + 1] = -B[i] / (A[i] * alpha[i] + C[i]);
  28.         beta[i + 1] = (F[i] - A[i] * beta[i]) / (A[i] * alpha[i] + C[i]);
  29.     }
  30.  
  31.     int n = A.size() - 1;
  32.  
  33.  
  34.     vector<double>  x(6, 0);
  35.  
  36.     x[n] = (F[n] - A[n] * beta[n]) / (C[n] + A[n] * alpha[n]);
  37.    
  38.     for (int i = n; i > 0; i--) {
  39.         x[i - 1] = alpha[i] * x[i] + beta[i];
  40.     }
  41.  
  42.     for (int i = 0; i <= n; i++) {
  43.         cout << x[i] << endl;
  44.     }
  45.     system("pause");
  46. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment