Advertisement
dark-s0ul

lab6

Jan 18th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. #define N 2000
  6.  
  7. double a = 1;
  8. double b = 6.5;
  9.  
  10. double F(double x) {
  11.     return exp(pow(x + 5.0, 0.25)) * sin(3.0 * x) * cos(x);
  12. }
  13.  
  14. int main() {
  15.     double A[N], B[N], C[N], D[N];
  16.  
  17.     double h = (b - a) / (double)N;
  18.     for (int i = 0; i < N; i++) {
  19.         A[i] = F(a + i * h);
  20.     }
  21.  
  22.     double *matrix[N];
  23.     for (int i = 0; i < N; i++) {
  24.         matrix[i] = new double[N + 1]{ 0 };
  25.     }
  26.  
  27.     matrix[0][0] = 1;
  28.     matrix[N - 1][N - 1] = 1;
  29.  
  30.     for (int i = 1; i < N - 1; i++) {
  31.         for (int j = 0; j <= N; j++) {
  32.             matrix[i][j] = 0;
  33.             if (j == (i - 1)) matrix[i][j] = h;
  34.             if (j == i) matrix[i][j] = 4.0 * h;
  35.             if (j == (i + 1)) matrix[i][j] = h;
  36.             if (j == N) matrix[i][j] = 6.0 * (F(a + h * (i - 1)) - 2 * F(a + h * i) + F(a + h * (i + 1))) / h;
  37.         }
  38.     }
  39.  
  40.     for (int k = 0; k < N - 1; k++) {
  41.         double m = 1.0 / matrix[k][k];
  42.         for (int j = 0; j <= N; j++) {
  43.             matrix[k][j] = matrix[k][j] * m;
  44.         }
  45.  
  46.         for (int i = k + 1; i < N; i++) {
  47.             double m = matrix[i][k];
  48.             for (int j = 0; j <= N; j++) {
  49.                 matrix[i][j] = matrix[i][j] - matrix[k][j] * m;
  50.             }
  51.         }
  52.     }
  53.  
  54.     for (int i = 0; i < N; i++) {
  55.         C[N - i - 1] = matrix[N - i - 1][N];
  56.         for (int j = 0; j < i; j++) {
  57.             C[N - i - 1] -= matrix[N - i - 1][N - 1 - j] * C[N - i];
  58.         }
  59.     }
  60.  
  61.     for (int i = 0; i < N; i++) {
  62.         delete[] matrix[i];
  63.     }
  64.  
  65.     D[0] = C[0];
  66.     for (int i = 1; i < N; i++) {
  67.         D[i] = (C[i] - C[i - 1]) / h;
  68.     }
  69.  
  70.     B[0] = 0;
  71.  
  72.     for (int i = 1; i < N; i++) {
  73.         B[i] = (h * C[i] / 2.0) - (h * h * D[i] / 2.0) + (F(a + h * i) - F(a + h * (i - 1))) / h;
  74.     }
  75.  
  76.     int k = (b - a) * 10;
  77.     double step = (b - a) / (double)k;
  78.     double x = a;
  79.     for (int i = 0; i <= k; i++) {
  80.         int j = 0;
  81.  
  82.         while (x >= (a + j * h)) j++;
  83.         --j;
  84.  
  85.         double xi = a + j * h;
  86.         double y = A[j] + B[j] * (x - xi) + C[j] * (x - xi) * (x - xi) / 2.0 + D[j] * (x - xi) * (x - xi) * (x - xi) / 6.0;
  87.  
  88.         printf("%4.2f %7f\n", x, y);
  89.  
  90.         x += step;
  91.     }
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement