Advertisement
Tvor0zhok

Методы вычислений 09.09.22

Sep 9th, 2022 (edited)
1,461
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 1 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. vector <int> x, y;
  8.  
  9. double P(double x)
  10. {
  11.     return (-x * x * x / 6.0) + (3 * x * x / 2.0) - (x / 3.0) + 10.0;
  12. }
  13.  
  14. double L(double x0)
  15. {
  16.     double res = 0;
  17.  
  18.     for (int i = 0; i < x.size(); ++i)
  19.     {
  20.         double cur = 1.0;
  21.  
  22.         for (int j = 0; j < y.size(); ++j)
  23.             if (i != j) cur *= (x0 - x[j]) / (x[i] - x[j]);
  24.  
  25.         res += y[i] * cur;
  26.     }
  27.  
  28.     return res;
  29. }
  30.  
  31. double N(double x0)
  32. {
  33.     vector <vector <double>> table(y.size(), vector <double>(y.size()));
  34.  
  35.     for (int i = 0; i < y.size(); ++i)
  36.         table[i][0] = y[i];
  37.  
  38.     for (int j = 1; j < y.size(); ++j)
  39.         for (int i = 0; i < y.size() - j; ++i)
  40.             table[i][j] = (table[i + 1][j - 1] - table[i][j - 1]) / (x[i + j] - x[i]);
  41.  
  42.     double res = 0.0, cur = 1.0;
  43.  
  44.     for (int j = 0; j < y.size(); ++j)
  45.     {
  46.         res += table[0][j] * cur;
  47.         cur *= (x0 - x[j]);
  48.     }
  49.  
  50.     return res;
  51. }
  52.  
  53. int main()
  54. {
  55.     cout << fixed << setprecision(4);
  56.  
  57.     x = { 0, 1, 2, 3 };
  58.     y = { 10, 11, 14, 18 };
  59.  
  60.     cout << left << setw(10) << "x";
  61.  
  62.     for (int i = 0; i < x.size() - 1; ++i)
  63.         cout << setw(10) << x[i] + 0.5;
  64.  
  65.     cout << "\n" << left << setw(10) << "P(x)";
  66.  
  67.     for (int i = 0; i < x.size() - 1; ++i)
  68.         cout << setw(10) << P(x[i] + 0.5);
  69.  
  70.     cout << "\n" << left << setw(10) << "L(x)";
  71.  
  72.     for (int i = 0; i < y.size() - 1; ++i)
  73.         cout << setw(10) << L(x[i] + 0.5);
  74.  
  75.     cout << "\n" << left << setw(10) << "N(x)";
  76.  
  77.     for (int i = 0; i < y.size() - 1; ++i)
  78.         cout << setw(10) << N(x[i] + 0.5);
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement