Facebook
From a, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 180
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4.  
  5. class DerivativeBackward
  6. {
  7. public:
  8.     void askN();
  9.     void askX();
  10.     void askF();
  11.     void askXX();
  12.     void forwardTable();
  13.     void calcd1();
  14.     void calcd2();
  15.     void findH();
  16.     void solve();
  17.     void fillDelF();
  18.     void findS();
  19. private:
  20.     double XX, x[10] , f[10][10] , p[10],diff[10][10],P1,delF[10],f1,f2;
  21.     int n;
  22.     double h,s;
  23.  
  24. };
  25.  
  26. void DerivativeBackward::askX()
  27. {
  28.     cout << endl;
  29.     for(int i = 0; i<n; i++ )
  30.     {
  31.         cout << "ENter X[" << i  << "] : ";
  32.         cin >> x[i];
  33.     }
  34.     cout << endl;
  35. }
  36.  
  37. void DerivativeBackward::askF()
  38. {
  39.  
  40.     for(int j = 0; j<n; j++ )
  41.     {
  42.         cout << "ENter F[" << j  << "] : ";
  43.         cin >> f[0][j];
  44.     }
  45.     cout << endl;
  46. }
  47. void DerivativeBackward::askXX()
  48. {
  49.  
  50.     cout << "Enter X for which the value is to be found: ";
  51.     cin >> XX;
  52. }
  53.  
  54. void DerivativeBackward::forwardTable()
  55. {
  56.     for(int i = 1; i < n; i++)
  57.     {
  58.         for(int j = 0; j< n-i;j++)
  59.         {
  60.             f[i][j] = (f[i-1][j+1]-f[i-1][j]);
  61.             if(f[i][j] < 0.0000009 && f[i][j] > 0 || f[i][j] >-0.0000009 && f[i][j]<0)
  62.             {
  63.                     f[i][j] = 0;
  64.             }
  65.         }
  66.     }
  67.     cout << endl;
  68.     cout << "Sn\tXi\tf(Xi)\t";
  69.     for(int i = 0; i <n-1;i++)
  70.     {
  71.         cout << i+1 << " diff\t";
  72.     }
  73.     cout << endl;
  74.     for(int i = 0; i < n; i++)
  75.     {
  76.          cout <<i+1 <<"\t" << x[i]<< "\t";
  77.         for(int j = 0; j< n-i;j++)
  78.         {
  79.             cout  << f[j][i] << "\t";
  80.         }
  81.         cout << endl;
  82.     }
  83. }
  84.  
  85. void DerivativeBackward::findH()
  86. {
  87.     h = x[1] - x[0];
  88.     cout << "h = " <<h;
  89. }
  90. void DerivativeBackward::findS()
  91. {
  92.     s = (XX - x[n-1])/h;
  93.     cout << "s = " <<s;
  94. }
  95. void DerivativeBackward::solve()
  96. {
  97.     findH();
  98.     findS();
  99.     fillDelF();
  100.     calcd1();
  101.     calcd2();
  102.  
  103.  
  104.     cout <<endl << "The value of f1 :" << f1;
  105.     cout <<endl << "The value of f2 :" << f2;
  106.     cout  << endl << endl;
  107. }
  108.  
  109.  
  110. void DerivativeBackward::fillDelF()
  111. {
  112.     for(int i = 1;i<10;i++)
  113.     {
  114.         if(i<n)
  115.          delF[i] = f[i][n-i-1];
  116.         else
  117.             delF[i] = 0;
  118.     }
  119.     for(int i = 1;i<10;i++)
  120.     {
  121.         cout<< delF[i];
  122.     }
  123. }
  124.  
  125. void DerivativeBackward::calcd1()
  126. {
  127.     f1 = 1 / h * ( delF[1] + 1/2.0 * (2 * s +1 ) * delF[2] + 1 / (6.0) * (3*s*s + 6 *s +2)*delF[3]
  128.         + 1 /(24.0) *( 4*s*s*s+18*s*s+22*s+6)*delF[4]);
  129. }
  130.  
  131. void DerivativeBackward::calcd2()
  132. {
  133.     f2 = 1 / (h*h) * (delF[2] + 1/6.0 * (6*s+6) * delF[3] + 1/24.0 *(12*s*s+36*s+22)*delF[4]);
  134.  
  135. }
  136. void DerivativeBackward::askN()
  137. {
  138.     cout << "Enter the number of values: ";
  139.     cin >> n;
  140. }
  141. int main()
  142. {
  143.  
  144.     DerivativeBackward d1;
  145.     d1.askN();
  146.     d1.askX();
  147.     d1.askF();
  148.     d1.askXX();
  149.     d1.forwardTable();
  150.     d1.solve();
  151. }
  152.