MeShootIn

Tridiagonal matrix algorithm

May 2nd, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void tridiagonal(vector <double> a, vector <double> b, vector <double> c, vector <double> d, vector <double> & x){
  7.     int N = a.size();
  8.    
  9.     vector <double> alpha(N), beta(N);
  10.     for(int i = 1; i < N; ++i){
  11.         alpha[i] = -c[i - 1] / (a[i - 1] * alpha[i - 1] + b[i - 1]);
  12.         beta[i] = (d[i - 1] - a[i - 1] * beta[i - 1]) / (a[i - 1] * alpha[i - 1] + b[i - 1]);
  13.     }
  14.    
  15.     x[N - 1] = (d[N - 1] - a[N - 1] * beta[N - 1]) / (b[N - 1] + a[N - 1] * alpha[N - 1]);
  16.     for(int i = N - 2; i >= 0; --i){
  17.         x[i] = alpha[i + 1] * x[i + 1] + beta[i + 1];
  18.     }
  19. }
  20.  
  21. int main(){
  22.     cout << "Enter N:\n";
  23.     int N;
  24.     cin >> N;
  25.    
  26.     cout << "Enter a (i != 0), b, c (i != N - 1) and d:\n";
  27.     vector <double> a(N), b(N), c(N), d(N);
  28.     for(int i = 0; i < N; ++i){
  29.         if(i != 0){
  30.             cin >> a[i];
  31.         }
  32.         cin >> b[i];
  33.         if(i != N - 1){
  34.             cin >> c[i];
  35.         }
  36.         cin >> d[i];
  37.     }
  38.    
  39.     vector <double> x(N);
  40.     tridiagonal(a, b, c, d, x);
  41.    
  42.     cout << "Solutions:\n";
  43.     for(auto & res : x){
  44.         cout << res << " ";
  45.     }
  46.    
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment