Advertisement
Aodai

Untitled

Apr 16th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void print_error(int x)
  6. {
  7.     printf("The system does not have a unique solution because the diagonal element from line %d is null", x);
  8. }
  9.  
  10. int main()
  11. {
  12.     int n, i;
  13.     float z, x[100], f[100], h[100], a[100], b[100], c[100], t[100], s[100], u[100];
  14.     printf("n=> ");
  15.     scanf("%d", &n);
  16.     for (i = 0; i <= n; i++)
  17.     {
  18.         printf("x[%d]=> ", i);
  19.         scanf("%f", &x[i]);
  20.     }
  21.     for (i = 0; i <= n; i++)
  22.     {
  23.         printf("f[%d]=> ", i);
  24.         scanf("%f", &f[i]);
  25.     }
  26.     printf("z=> ");
  27.     scanf("%f", &z);
  28.     for (i = 1; i <= n; i++)
  29.     {
  30.         h[i] = x[i] - x[i - 1];
  31.     }
  32.     for (i = 1; i <= n-1; i++)
  33.     {
  34.         a[i] = 2*(h[i] + h[i + 1]);
  35.     }
  36.     for (i = 1; i <= n - 2; i++)
  37.     {
  38.         b[i] = h[i + 1];
  39.         c[i] = b[i];
  40.     }
  41.     for (i = 1; i <= n - 1; i++)
  42.     {
  43.         t[i] = 6 * (f[i + 1] - f[i]) / h[i + 1] - 6 * (f[i] - f[i - 1]) / h[i];
  44.     }
  45.     n = n - 1;
  46.     // LR factorization start
  47.     for (i = 1; i <= n - 1; i++)
  48.     {
  49.         if (a[i] == 0)
  50.         {
  51.             print_error(i);
  52.             exit(1);
  53.         }
  54.         c[i] = c[i] / a[i];
  55.         a[i + 1] = a[i + 1] - b[i] * c[i];
  56.     }
  57.     for (i = 2; i <= n; i++)
  58.     {
  59.         t[i] = t[i] - c[i - 1] * t[i - 1];
  60.         if (a[n] == 0)
  61.         {
  62.             print_error(n);
  63.             exit(1);
  64.         }
  65.     }
  66.     t[n] = t[n] / a[n];
  67.     for (i = n - 1; i >= 1; i--)
  68.     {
  69.         t[i] = (t[i] - b[i] * t[i + 1]) / a[i];
  70.     }
  71.     // LR factorization end
  72.     for (i = 1; i <= n; i++)
  73.         printf("%f ", t[i]);
  74.     printf("\n");
  75.     n = n + 1;
  76.     u[0] = u[n] = 0;
  77.     for (i = 1; i <= n - 1; i++)
  78.         u[i] = t[i];
  79.     for (i = 1; i <= n; i++)
  80.     {
  81.         if (z > x[i - 1] && z < x[i])
  82.         {
  83.             float temp = (u[i] * powf((z - x[i - 1]), 3) + u[i - 1] * powf(x[i] - z, 3)) / (6 * h[i]) + (f[i] - u[i] * powf(h[i], 2) / 6) * (z - x[i - 1] / h[i]) + (f[i - 1] - u[i - 1] * powf(h[i], 2) / 6) * (x[i] - z / h[i]);
  84.             printf("%f ", temp);
  85.         }
  86.     }
  87.    
  88.     system("pause");
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement