Advertisement
Guest User

Untitled

a guest
May 4th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. double x[115];
  4. void Gauss(double** A, int n)
  5. {
  6.     for (int i = 0; i < n; i++)
  7.         x[i] = 0;
  8.  
  9.     for (int j = 0; j < n; j++) {
  10.         for (int i = 0; i < n; i++) {
  11.             if (i>j) {
  12.                 double c = A[i][j] / A[j][j];
  13.                 for (int k = 0; k < n + 1; k++) {
  14.                     A[i][k] = A[i][k] - c*A[j][k];
  15.                 }
  16.             }
  17.         }
  18.     }
  19.     x[n - 1] = A[n - 1][n] / A[n - 1][n - 1];
  20.     for (int i = n - 1; i >= 1; i--) {
  21.         double sum = 0;
  22.         for (int j = i + 1; j <= n; j++) {
  23.             sum = sum + A[i - 1][j - 1] * x[j - 1];
  24.         }
  25.         x[i - 1] = (A[i - 1][n] - sum) / A[i - 1][i - 1];
  26.     }
  27. }
  28. double Wielomian(double a, double b, double c, double d,double S, int i, int staly)
  29. {
  30.     S = a + b*(x[i] - x[staly]) + c*(x[i] - x[staly])*(x[i] - x[staly]) + d*(x[i] - x[staly])*(x[i] - x[staly])*(x[i] - x[staly]);
  31.     return S;
  32. }
  33. int main()
  34. {
  35.     double freq[20] = { 2.160913 ,  2.184642 , 2.208656 , 2.232956,  2.257543 , 2.282417 , 2.307579 , 2.333029, 2.358767 , 2.384794,  2.411110  ,2.437714 , 2.464608 , 2.491789 , 2.519259 , 2.547017 , 2.575062 , 2.603393 , 2.632010 , 2.660913 };
  36.     double S21[20] = { 0.0385736053 ,  0.0418602337 , 0.0406238069,  0.0222182757 , 0.0681165327,  0.5274988276 , 0.9992090072 , 0.9877714749 , 0.9997958915,  0.9872738013, 0.9872738013,  0.9997958915 , 0.9877714749 , 0.9992090072,  0.5274988276, 0.0681165327,  0.0222182757 , 0.0406238069 , 0.0418602337, 0.0385736053 };
  37.     double h[20];
  38.     //obliczanie h
  39.     for (int i = 1; i < 20; i++) h[i] = freq[i] - freq[i - 1];
  40.     h[0] = 0.0;
  41.  
  42.     double mi[20];
  43.     double lambda[20];
  44.     double delta[20];
  45.     //obliczanie mi , lambda, delta
  46.     for (int i = 1; i < 20; i++)
  47.     {
  48.         mi[i - 1] = h[i - 1] / (h[i] + h[i - 1]);
  49.         lambda[i - 1] = lambda[i - 1] / (lambda[i - 1] + lambda[i]);
  50.         delta[i - 1] = 6 / (h[i - 1] + h[i])*(((S21[i] - S21[i]) / h[i]) - ((S21[i - 1] - S21[i - 2]) / h[i - 1]));
  51.     }
  52.     //warunki brzegowe
  53.     mi[19] = 0;
  54.     delta[0] = 0;
  55.     delta[19] = 0;
  56.     lambda[0] = 0;
  57.     //wypelnianie macierzy
  58.     double macierz[20][21];
  59.     for (int i = 0; i < 20; i++) for (int j = 0; j < 21; j++) macierz[i][j] = 0.0;
  60.     for (int i = 0; i < 20; i++) macierz[i][i] = 2.0;
  61.     for (int i = 0; i < 19; i++) macierz[i][i + 1] = lambda[i];
  62.     for (int i = 0; i < 20; i++) macierz[i + 1][i] = mi[i];
  63.     for (int i = 0; i < 20; i++) macierz[i][20] = delta[i];
  64.  
  65.     //przepisywanie macierzy
  66.     double** macierz2 = new double*[20];
  67.     for (int i = 0; i < 20; i++)
  68.         macierz2[i] = new double[21];
  69.     for (int i = 0; i < 20; i++)
  70.         for (int j = 0; j < 21; j++)
  71.             macierz2[i][j] = macierz[i][j];
  72.     //odpalamy algorytm Gaussas
  73.     Gauss(macierz2,20);
  74.  
  75.     double a[20], b[20], c[20] , d[20], S[115];
  76.     //obliczanie wspolczynnikow a,b,c,d
  77.     for (int i = 1; i < 20; i++)
  78.     {
  79.         a[i - 1] = S21[i - 1];
  80.         b[i - 1] = (((S21[i] - S21[i - 1]) / h[i]) - ((2 * x[i - 1] + x[i])*h[i] / 6));
  81.         c[i - 1] = x[i - 1] / 2;
  82.         d[i - 1] = (x[i] - x[i - 1]) / (6 * h[i]);
  83.     }
  84.     //zamiana indeksow na nowe, przygotowane do rozszerzenia
  85.     double xstare[20];
  86.     for (int i = 0; i < 20; i++) xstare[i] = x[i]; 
  87.     for (int i = 0; i < 115; i++) x[i] = 0;
  88.     for (int i = 0; i < 20; i++) x[i * 6] = xstare[i]; 
  89.                                 //przepisane wyniki gaussa na odpowiedznie indeksy , co 6
  90.                                 //tablica x jest gotowa do wypełniania na miejscach od 0 do 19 stare iksy,
  91.                                 //0 , 6 , 12 , 18 , 24 , 30 , 36 , 42 , 48...
  92.  
  93.  
  94.  
  95.  
  96.  
  97.         for (int j = 0; j < 20; j++)
  98.             delete[] macierz2[j];
  99.         delete[] macierz2;
  100.  
  101.     return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement