Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. void main()
  5. {
  6.     double x0,h,suma=0,bladmax=0.0,bladmax2=0.0,x0p1,x0p2,temp1,temp2;
  7.     int i,nmax;
  8.    
  9.     cout << "podaj Nmax = ";
  10.     cin >> nmax;
  11.     cout << "podaj krok = ";
  12.     cin >> h;
  13.     cout << "punkty kolejno od 1 do 10 (bez zera ponieważ pochodna nie istnieje w tym punkcie) " << endl;
  14.     cout << endl << endl << "funkcja dla logarytmu naturalnego\n";
  15.     double *tab = new double[nmax + 1];
  16.     double *tab1 = new double[nmax];
  17.     double *tab2 = new double[nmax];
  18.     double *tab3 = new double[nmax];
  19.  
  20.     //logarytm naturalny
  21.     for(x0=1;x0<11;x0++)
  22.     {
  23.         for (i = 0; i <= nmax; i++)
  24.         {
  25.             tab[i] = log(x0 + i*h);
  26.         }
  27.         suma = 0;
  28.         for (i = 0; i <= nmax; i++)
  29.         {
  30.             for (int j = 0; j < nmax - i; j++)
  31.             {
  32.                 tab[j] = tab[j + 1] - tab[j];
  33.             }
  34.             tab1[i] = tab[0];
  35.         }
  36.         //1 pochodna
  37.         for (i = 0; i < nmax; i++)
  38.         {
  39.             tab2[i] = pow(-1.0, i)*(1.0 / (i + 1.0));
  40.             suma += (1 / h)*tab2[i] * tab1[i];
  41.  
  42.         }
  43.  
  44.         /*
  45.         cout.precision(10);
  46.         cout << "x0 = " << x0 << endl;
  47.         cout << "1 pochodna : " << suma << endl;
  48.         cout << "blad 1 pochodnej : " << abs(suma - (1 / x0)) << endl;
  49.         */
  50.         if (abs(suma - (1 / x0)) > bladmax)
  51.         {
  52.             bladmax = abs(suma - (1 / x0));
  53.             x0p1 = x0;
  54.             temp1 = suma;
  55.         }
  56.        
  57.         //2 pochodna
  58.         for (i = 0; i < nmax; i++)
  59.         {
  60.             tab3[i] = 0;
  61.         }
  62.         for (i = 1; i < nmax; i++)
  63.         {
  64.             for (int j = 0; j < nmax - i; j++)
  65.             {
  66.                 tab3[i + j] = tab2[i - 1] * tab2[j] + tab3[i + j];
  67.             }
  68.         }
  69.         suma = 0;
  70.         for (i = 0; i < nmax; i++)
  71.         {
  72.             suma += (1 / pow(h, 2))*tab3[i] * tab1[i];
  73.         }
  74.         /*cout.precision(10);
  75.         cout << "druga pochodna : " << suma << endl;
  76.         cout << "blad 2 pochodnej : " << abs(suma + (1 / (x0*x0))) << endl << endl;*/
  77.         if (abs(suma + (1 / (x0*x0))) > bladmax2)
  78.         {
  79.             bladmax2 = abs(suma + (1 / (x0*x0)));
  80.             x0p2 = x0;
  81.             temp2 = suma;
  82.         }
  83.    
  84.     }
  85.     cout.precision(10);
  86.     cout << "1 pochodna : " << temp1 << endl;
  87.     cout <<  "max blad 1 pochodnej : " << bladmax << endl;
  88.     cout << "x0 1 pochodnej : " << x0p1 << endl;
  89.     cout << "2 pochodna : " << temp2 << endl;
  90.     cout << "max blad 2 pochodnej : " << bladmax2 << endl;
  91.     cout << "x0 2 pochodnej : " << x0p2 << endl << endl;
  92.  
  93.     //funkcja dla sinusa
  94.     bladmax = 0.0;
  95.     bladmax2 = 0.0;
  96.     for (x0 = 0; x0<11; x0++)
  97.     {
  98.         for (i = 0; i <= nmax; i++)
  99.         {
  100.             tab[i] = sin(x0 + i*h);
  101.         }
  102.         suma = 0;
  103.         for (i = 0; i <= nmax; i++)
  104.         {
  105.             for (int j = 0; j < nmax - i; j++)
  106.             {
  107.                 tab[j] = tab[j + 1] - tab[j];
  108.             }
  109.             tab1[i] = tab[0];
  110.         }
  111.         //1 pochodna
  112.         for (i = 0; i < nmax; i++)
  113.         {
  114.             tab2[i] = pow(-1.0, i)*(1.0 / (i + 1.0));
  115.             suma += (1 / h)*tab2[i] * tab1[i];
  116.         }
  117.         cout << suma << endl;
  118.         /*
  119.         cout.precision(10);
  120.         cout << "x0 = " << x0 << endl;
  121.         cout << "cos(x0) = " << cos(x0) << endl;
  122.         cout << "1 pochodna : " << suma << endl;
  123.         cout << "blad 1 pochodnej : " << abs(suma - cos(x0)) << endl;
  124.         */
  125.         if (abs(suma - cos(x0)) > bladmax)
  126.         {
  127.             bladmax = abs(suma - cos(x0));
  128.             x0p1 = x0;
  129.             temp1 = suma;
  130.         }
  131.  
  132.         //2 pochodna
  133.         for (i = 0; i < nmax; i++)
  134.         {
  135.             tab3[i] = 0;
  136.         }
  137.         for (i = 1; i < nmax; i++)
  138.         {
  139.             for (int j = 0; j < nmax - i; j++)
  140.             {
  141.                 tab3[i + j] = tab2[i - 1] * tab2[j] + tab3[i + j];
  142.             }
  143.         }
  144.         suma = 0;
  145.         for (i = 0; i < nmax; i++)
  146.         {
  147.             suma += (1 / pow(h, 2))*tab3[i] * tab1[i];
  148.         }
  149.         /*cout.precision(10);
  150.         cout << "-sin(x0) = " << -sin(x0) << endl;
  151.         cout << "druga pochodna : " << suma << endl;
  152.         cout << "blad 2 pochodnej : " << abs(suma + sin(x0)) << endl << endl;*/
  153.         if (abs(suma + sin(x0))>bladmax2)
  154.         {
  155.             temp2 = suma;
  156.             bladmax2 = abs(suma + sin(x0));
  157.             x0p2 = x0;
  158.         }
  159.        
  160.     }
  161.     cout.precision(10);
  162.     cout << endl << endl << "funkcja dla sinusa\n";
  163.  
  164.     cout << "1 pochodna : " << temp1 << endl;
  165.     cout << "max blad 1 pochodnej : " << bladmax << endl;
  166.     cout << "x0 1 pochodnej : " << x0p1 << endl;
  167.     cout << "2 pochodna : " << temp2 << endl;
  168.     cout << "max blad 2 pochodnej : " << bladmax2 << endl;
  169.     cout << "x0 2 pochodnej : " << x0p2 << endl;
  170.  
  171.  
  172.     //funkcja dla wielomianu 7 rzędu W(x)=7x^7+2x^6-9x^5-8x^4-x^3+2x^2+5x+6
  173.     bladmax = 0.0;
  174.     bladmax2 = 0.0;
  175.     int p1, p2;
  176.     for (x0 = 0; x0<11; x0++)
  177.     {
  178.         for (i = 0; i <= nmax; i++)
  179.         {
  180.             tab[i] = 7*pow(x0+i*h,7) + 2*pow(x0+i*h,6) - 9*pow(x0 + i*h,5) - 8 * pow(x0 + i*h, 4) - pow(x0 + i*h,3) + 2 * pow(x0 + i*h,2) + 5 * (x0 + i*h) + 6;
  181.         }
  182.         suma = 0;
  183.         for (i = 0; i <= nmax; i++)
  184.         {
  185.             for (int j = 0; j < nmax - i; j++)
  186.             {
  187.                 tab[j] = tab[j + 1] - tab[j];
  188.             }
  189.             tab1[i] = tab[0];
  190.         }
  191.         //1 pochodna
  192.         for (i = 0; i < nmax; i++)
  193.         {
  194.             tab2[i] = pow(-1.0, i)*(1.0 / (i + 1.0));
  195.             suma += (1 / h)*tab2[i] * tab1[i];
  196.         }
  197.         p1 = 49 * pow(x0, 6) + 12 * pow(x0, 5) - 45 * pow(x0, 4) - 32 * pow(x0, 3) - 3 * pow(x0, 2) + 4 * (x0)+5;
  198.         /*
  199.         cout.precision(10);
  200.         cout << "x0 = " << x0 << endl;
  201.         cout << "W'(x0) = " << p1  << endl;
  202.         cout << "1 pochodna : " << suma << endl;
  203.         cout << "blad 1 pochodnej : " << abs(suma - p1) << endl;
  204.         */
  205.         if (abs(suma - p1) > bladmax)
  206.         {
  207.             bladmax = abs(suma - p1);
  208.             x0p1 = x0;
  209.             temp1 = suma;
  210.         }
  211.         //cout << suma << endl;
  212.         //2 pochodna
  213.         for (i = 0; i < nmax; i++)
  214.         {
  215.             tab3[i] = 0;
  216.         }
  217.         for (i = 1; i < nmax; i++)
  218.         {
  219.             for (int j = 0; j < nmax - i; j++)
  220.             {
  221.                 tab3[i + j] = tab2[i - 1] * tab2[j] + tab3[i + j];
  222.             }
  223.         }
  224.         suma = 0;
  225.         for (i = 0; i < nmax; i++)
  226.         {
  227.             suma += (1 / pow(h, 2))*tab3[i] * tab1[i];
  228.         }
  229.         p2 = 294 * pow(x0, 5) + 60 * pow(x0, 4) - 180 * pow(x0, 3) - 96 * pow(x0, 2) - 6 *x0 + 4;
  230.         //cout << suma << endl;
  231.         /*cout.precision(10);
  232.         cout << "W''(x0) = " << p2 << endl;
  233.         cout << "druga pochodna : " << suma << endl;
  234.         cout << "blad 2 pochodnej : " << abs(suma - p2) << endl << endl;
  235.         */
  236.         if (abs(suma -p2)>bladmax2)
  237.         {
  238.             bladmax2 = abs(suma-p2);
  239.             x0p2 = x0;
  240.             temp2 = suma;
  241.         }
  242.  
  243.     }
  244.     cout.precision(10);
  245.     cout << endl << endl << "funkcja dla  W(x)=7x^7+2x^6-9x^5-8x^4-x^3+2x^2+5x+6\n";
  246.     cout << "1 pochodna : " << temp1 << endl;
  247.     cout << "max blad 1 pochodnej : " << bladmax << endl;
  248.     cout << "x0 1 pochodnej : " << x0p1 << endl;
  249.     cout << "2 pochodna : " << temp2 << endl;
  250.     cout << "max blad 2 pochodnej : " << bladmax2 << endl;
  251.     cout << "x0 2 pochodnej : " << x0p2 << endl;
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement