Facebook
From nan, 6 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 316
  1. #include<iostream>
  2. #include<iomanip>
  3. #include<conio.h>
  4. #include<cmath>
  5. #include<ctime>
  6. #define zloty = 0.618033988749
  7.  
  8. double interpolacja_liniowa();
  9. double interpolacja_kwadratowa();
  10. double interpolacja_Lagrangea();
  11. double Cubic_Spline();
  12. double Wmaciez_CS(int size, double * v, double * u, double * w, int zmiana);//funkcja do licznia wyznacznika maciezy do Cubic_Spline() zmiana(0)-głowny wyznacznik,zmiana(1)-kolumny podmienione na v(i)
  13. void mciez_troj(int size, double ** maciez);
  14.  
  15. //rozwiazywanie rownan
  16. double metoda_bisekcji(double(*F)(double));
  17. double metoda_zgadywana(double(*F)(double));//iteraqcyjna
  18. double zloty_podzial_min(double(*F)(double));
  19. double zloty_podzial(double(*F)(double));
  20. double metoda_falsi(double(*F)(double));
  21. double metoda_siecznych(double(*F)(double));
  22. double metoda_newtona_rapshona(double(*F)(double), double(*FP)(double));
  23. double metoda_newtona_rapshona_2_stopnia(double(*F)(double), double(*FP)(double), double(*FPP)(double));
  24. double metoda_halleya(double(*F)(double), double(*FP)(double), double(*FPP)(double));
  25.  
  26. //funkcje matematyczne
  27. double funkcja(double x);
  28. double funkcja1(double x);
  29. double funkcja2(double x);
  30. double funkcja3(double x);
  31. double funkcja4(double x);
  32. double funkcja4P(double x);
  33. double funkcja4PP(double x);
  34. double funkcja5(double x);
  35. double funkcja6(double x);
  36.  
  37. //calki
  38. double motoda_trapezow(double(*F)(double));
  39. double metoda_simpsona(double(*F)(double));
  40. double metoda_monte_carlo(double(*F)(double));//losowa
  41.  
  42. int main(int argc, char* argv[]) {
  43.         do {
  44.                 //std::cout << "interpolacja_liniow: " << interpolacja_liniowa();
  45.                 //std::cout << "ninterpolacja_kwadratowa: " << interpolacja_kwadratowa();
  46.                 //std::cout << "ninterpolacja_Lagrangea: " << interpolacja_Lagrangea();
  47.                 //std::cout << "nCubic_Spline: " << Cubic_Spline();
  48.                 //std::cout << "nnZloty Podzial min: " << zloty_podzial_min(funkcja2);
  49.                 //std::cout << "nnZloty Podzial: " << zloty_podzial(funkcja);
  50.                 //std::cout << "nnmetoda bisekcji: " << metoda_bisekcji(funkcja2);
  51.                 //std::cout << "nnmetoda zgadywana: " << metoda_zgadywana(funkcja1);
  52.                 //std::cout << "nnmetoda_falsi: " << metoda_falsi(funkcja4);
  53.                 //std::cout << "nnmetoda_siecznych: " << metoda_siecznych(funkcja4);
  54.                 //std::cout << "nnmetoda_newtona_rapshona: " << metoda_newtona_rapshona(funkcja4, funkcja4P);
  55.                 //std::cout << "nnmetoda_newtona_rapshona_2_stopnia: " << metoda_newtona_rapshona_2_stopnia(funkcja4, funkcja4P,funkcja4PP);
  56.                 //std::cout << "nnmetoda_halleya: " << metoda_halleya(funkcja4, funkcja4P, funkcja4PP);
  57.                 //std::cout << "nnmotoda_trapezow: " << motoda_trapezow(funkcja6);
  58.                 //std::cout << "nnmotoda_trapezow: " << metoda_simpsona(funkcja6);
  59.                 //std::cout << "nnmetoda_monte_carlo: " << metoda_monte_carlo(funkcja6);
  60.                 ..std::cout << "nn";
  61.                 std::cout << "end";
  62.                 if (getch() == 27)break;
  63.                 std::cout << "nn";
  64.         } while (1);
  65.         return 0;
  66. }
  67.  
  68. double interpolacja_liniowa()
  69. {
  70.  
  71.         double x[3];
  72.         double y[3];
  73.  
  74.         std::cout << "podaj punkt :n x: ";
  75.         std::cin >> x[2];
  76.         //std::cout << "y: ";
  77.         //std::cin >> y[2];
  78.  
  79.         std::cout << "podaj punkt 0 :n x0: ";
  80.         std::cin >> x[0];
  81.         std::cout << "y0: ";
  82.         std::cin >> y[0];
  83.  
  84.         std::cout << "podaj punkt 1 :n x1: ";
  85.         std::cin >> x[1];
  86.         std::cout << "y1: ";
  87.         std::cin >> y[1];
  88.  
  89.  
  90.         return y[2] = y[0] + ((y[1] - y[0]) / (x[1] - x[0]))*(x[2] - x[0]);
  91. }
  92.  
  93. double interpolacja_kwadratowa()
  94. {
  95.         double x[4];
  96.         double y[4];
  97.  
  98.         std::cout << "podaj punkt :n x: ";
  99.         std::cin >> x[3];
  100.         //std::cout << "y: ";
  101.         //std::cin >> y[3];
  102.  
  103.         std::cout << "podaj punkt 0 :n x0: ";
  104.         std::cin >> x[0];
  105.         std::cout << "y0: ";
  106.         std::cin >> y[0];
  107.  
  108.         std::cout << "podaj punkt 1 :n x1: ";
  109.         std::cin >> x[1];
  110.         std::cout << "y1: ";
  111.         std::cin >> y[1];
  112.  
  113.         std::cout << "podaj punkt 2 :n x2: ";
  114.         std::cin >> x[2];
  115.         std::cout << "y2: ";
  116.         std::cin >> y[2];
  117.  
  118.         return y[3] = ((x[3] - x[1]) / (x[0] - x[1]))*((x[3] - x[2]) / (x[0] - x[2]))*y[0] + ((x[3] - x[0]) / (x[1] - x[0]))*((x[3] - x[2]) / (x[1] - x[2]))*y[1] + ((x[3] - x[0]) / (x[2] - x[0]))*((x[3] - x[1]) / (x[2] - x[1]))*y[2];
  119. }
  120.  
  121. double interpolacja_Lagrangea()
  122. {
  123.         int _size;
  124.         std::cout << "ile :";
  125.         std::cin >> _size;
  126.  
  127.         double *x = new double[_size + 1];
  128.  
  129.         double *y = new double[_size];
  130.         double *s = new double[_size];
  131.         std::cout << "podaj x do obliczen";
  132.         std::cin >> x[_size];
  133.  
  134.         for (int i = 0; i < _size; i++) {
  135.                 std::cout << "podaj x" << i << ": ";
  136.                 std::cin >> x[i];
  137.                 std::cout << "podaj y" << i << ": ";
  138.                 std::cin >> y[i];
  139.         }
  140.  
  141.         for (int i = 0; i < _size; i++)
  142.         {
  143.                 s[i] = y[i];
  144.                 for (int j = 0; j < _size; j++)
  145.                 {
  146.                         if (x[i] != x[j])
  147.                         {
  148.                                 s[i] *= (x[_size] - x[j]);
  149.                         }
  150.                 }
  151.                 for (int j = 0; j < _size; j++)
  152.                 {
  153.  
  154.                         if (x[i] != x[j])
  155.                         {
  156.  
  157.                                 s[i] /= (x[i] - x[j]);
  158.  
  159.                         }
  160.                 }
  161.         }
  162.  
  163.         double suma = 0;
  164.         for (int i = 0; i < _size; i++)
  165.         {
  166.                 suma += s[i];
  167.  
  168.         }
  169.  
  170.         return suma;
  171.         delete[] x,y,s;
  172. }
  173.  
  174. double Cubic_Spline()
  175. {
  176.         int _size = 0;
  177.         std::cout << "ile :";
  178.         std::cin >> _size;
  179.         double mainx = 0;
  180.         double mainy = 0;
  181.         double W;
  182.         std::cout << "dla jakiego x :";
  183.         std::cin >> mainx;
  184.         double *x = new double[_size];
  185.         double *y = new double[_size];
  186.         double *a = new double[_size];
  187.         double *b = new double[_size];
  188.         double *c = new double[_size];
  189.         double *d = new double[_size];
  190.         double *h = new double[_size];
  191.         double *v = new double[_size];
  192.         double *u = new double[_size];
  193.         double *w = new double[_size];
  194.  
  195.  
  196.  
  197.         c[0] = 0;
  198.         c[_size - 1] = 0;
  199.         for (int i = 0;i < _size;i++)
  200.         {
  201.                 std::cout << "podaj x" << i << " :";
  202.                 std::cin >> x[i];
  203.                 std::cout << "podaj y" << i << " :";
  204.                 std::cin >> y[i];
  205.         }
  206.         for (int i = 0; i < _size; i++)
  207.         {
  208.                 a[i] = y[i];
  209.                 //std::cout << "a[" << i << "]" << a[i] << " ";
  210.         }
  211.         //std::cout << "nn";
  212.         for (int i = 0; i < _size - 1; i++)
  213.         {
  214.                 h[i] = x[i + 1] - x[i];
  215.                 //std::cout << "h[" << i << "]" << h[i] << " ";
  216.         }
  217.         //std::cout << "nn";
  218.         for (int i = 1; i < _size - 1; i++)
  219.         {
  220.                 u[i] = (h[i - 1] / (h[i - 1] + h[i]));
  221.                 //std::cout << "u[" << i << "]" << u[i] <<" ";
  222.         }
  223.         std::cout << "nn";
  224.         for (int i = 1; i < _size - 1; i++)
  225.         {
  226.                 w[i] = (h[i] / (h[i - 1] + h[i]));
  227.                 //std::cout << "w[" << i << "]" << w[i] << " ";
  228.         }
  229.         std::cout << "nn";
  230.         for (int i = 1; i < _size - 1; ++i)
  231.         {
  232.                 v[i] = (((y[i + 1] - y[i] / h[i]) - (y[i] - y[i - 1] / h[i - 1])) / (h[i - 1] + h[i]));
  233.                 //std::cout << "v[" << i << "]" << v[i] << " ";
  234.         }
  235.  
  236.         W = Wmaciez_CS(_size,v,u,w,0);
  237.         //std::cout << "nn wyznacznik = " << W << "nn";
  238.  
  239.         for (unsigned int i = 1; i < _size - 1; ++i)
  240.         {
  241.                 c[i] = (Wmaciez_CS(_size, v, u, w, i) / W);
  242.                 //std::cout << "c[" << i << "]" << c[i] << " ";
  243.         }
  244.         //std::cout << "nn";
  245.  
  246.         //for (unsigned int i = 1; i < _size - 1; ++i)
  247.         //{
  248.         //      std::cout << "w[" << i << "]" << Wmaciez_CS(_size, v, u, w, i) << " ";
  249.         //}
  250.         //std::cout << "nn";
  251.  
  252.         for (int i = 0; i < _size - 1; ++i)
  253.         {
  254.                 d[i] = ((c[i + 1] - c[i]) / 3 * h[i]);
  255.                 //std::cout << "d[" << i << "]" << d[i] << " ";
  256.         }
  257.         //std::cout << "nn";
  258.  
  259.         for (unsigned int i = 0; i < _size; i++)
  260.         {
  261.                 b[i] = (1 / h[i]) * (y[i + 1] - y[i] - c[i] * (h[i] * h[i]) - d[i] * (h[i] * h[i] * h[i]));
  262.  
  263.                 if (i == _size - 1)
  264.                 {
  265.                         b[i] = b[i - 1] + 2 * (c[i - 1] * h[i - 1]) + 3 * (d[i - 1] * h[i - 1]);
  266.                 }
  267.                 //std::cout << "b[" << i << "]" << b[i] << " ";
  268.         }
  269.         std::cout << "nn";
  270.         //x mniejsze
  271.         if (mainx < x[0])
  272.         {
  273.                 mainy = a[0] + b[0] * (mainx - x[0]);
  274.         }
  275.         //x wieksze
  276.         if (mainx > x[_size-1])
  277.         {
  278.                 mainy = a[_size - 1] + b[_size-2] * (mainx - x[_size - 1]);
  279.         }
  280.         //x w przedziale
  281.         for (int i = 0; i < _size - 1; i++)
  282.         {
  283.                 if (x[i] <= mainx && mainx <= x[i + 1])
  284.                 {
  285.                         mainy = a[i] + b[i] * (mainx - x[i]) + c[i] * ((mainx - x[i])*(mainx - x[i])) + d[i] * ((mainx - x[i])*(mainx - x[i])*(mainx - x[i]));
  286.                 }
  287.         }
  288.  
  289.         delete[] x,y,a,b,c,d,w,v,u,h;
  290.  
  291.         return mainy;
  292.        
  293. }
  294.  
  295. double Wmaciez_CS(int size, double * v, double * u, double * w, int zmiana)
  296. {
  297.         double **maciez = new double *[size];
  298.         //wyznacznik
  299.         double W = 1.0;        
  300.         size -= 2;
  301.         for (unsigned int i = 0; i < size; i++)
  302.         {
  303.                 maciez[i] = new double[size];
  304.         }
  305.         for (unsigned int i = 0; i < size; i++)
  306.         {
  307.                 for (unsigned int j = 0; j < size; j++) {
  308.  
  309.                         if (i == j) maciez[i][j] = 2;
  310.                         else if (i + 1 == j) maciez[i][j] = u[j];
  311.                         else if (i == j + 1) maciez[i][j] = w[j + 1];
  312.                         else maciez[i][j] = 0;
  313.                 }
  314.                 if (zmiana != 0)
  315.                 {
  316.                         for (unsigned int i = 0; i < size; i++)
  317.                         {
  318.                                 maciez[i][zmiana - 1] = 3 * v[i + 1];
  319.                         }
  320.                 }
  321.         }
  322.         for (int w = 0; w < size; w++) {
  323.  
  324.                 mciez_troj(size, maciez);//licze maciez trójkątną
  325.         }
  326.         for (int i = 0; i < size; i++)
  327.         {
  328.                 W *= maciez[i][i];
  329.         }
  330.        
  331.         for (unsigned int i = 0; i < size; i++)
  332.         {
  333.                 delete[] maciez[i];
  334.         }
  335.         delete[] maciez;
  336.  
  337.         return W;
  338. }
  339.  
  340. void mciez_troj(int size, double ** maciez)
  341. {
  342.         for (int i = 0; i < size - 1; i++)
  343.         {
  344.                 for (int j = i + 1; j < size; j++)
  345.                 {
  346.                         for (int q = size - 1; q >= i; q--)
  347.                         {
  348.                                 maciez[j][q] = maciez[j][q] - maciez[j][i] * maciez[i][q] / maciez[i][i];
  349.                                 }
  350.                 }
  351.         }
  352.  
  353. }
  354.  
  355. double metoda_bisekcji(double(*F)(double))
  356. {
  357.         double a,b;
  358.         double E = 0.000001;
  359.         double i = 0;
  360.         std::cout << "podaj a :";
  361.         std::cin >> a;
  362.         std::cout << "podaj b :";
  363.         std::cin >> b;
  364.         std::cout<< F(a) << " " << F(b) << "nn";
  365.         std::cout << F(a) * F(b) << "nn";
  366.         if (F(a) * F(b) > 0 /*|| (F(a) * F(b) != -INFINITY)*/)
  367.         {
  368.                 while (i<100 && F(a) * F(b) > 0)
  369.                 {
  370.                         b -= b / 100;
  371.                         //std::cout << "F(b) = " << F(b) << "n";
  372.                         i++;
  373.                 }
  374.                 if (F(a) * F(b) > 0)
  375.                 {
  376.                         std::cout << "nie posiada miejsca zerowego!!!!nFunkcja nie jest ciałga na podanym przedzialenZwracam zeronn";
  377.                         return 0.;
  378.                 }
  379.                 i = 0;
  380.         }
  381.  
  382.         while(b-a>E && i<60)
  383.         {
  384.                 if (F((a + b) / 2) * F(a) < 0)
  385.                         b = (a + b) / 2;
  386.                 else
  387.                 {
  388.                         a = (a + b) / 2;
  389.                 };
  390.                 i++;
  391.         }
  392.  
  393.         std::cout << "ilosc = " << i <<"nn" ;
  394.         return (a+b)/2;
  395. }
  396.  
  397. double metoda_zgadywana(double(*F)(double))
  398. {
  399.         double a, b;
  400.         double E = 0.000001;
  401.         double i = 0;
  402.         std::cout << "podaj a :";
  403.         std::cin >> a;
  404.         std::cout << "podaj b :";
  405.         std::cin >> b;
  406.         if (F(a) * F(b) > 0 /*|| (F(a) * F(b) != -INFINITY)*/)
  407.         {
  408.                 while (i<100 && F(a) * F(b) > 0)
  409.                 {
  410.                         b -= b / 100;
  411.                         //std::cout << "F(b) = " << F(b) << "n";
  412.                         i++;
  413.                 }
  414.                 if (F(a) * F(b) > 0)
  415.                 {
  416.                         std::cout << "nie posiada miejsca zerowego!!!!nFunkcja nie jest ciałga na podanym przedzialenZwracam zeronn";
  417.                         return 0.;
  418.                 }
  419.                 i = 0;
  420.         }
  421.         while (F(a) * F(b) < 0)
  422.         {
  423.                 a += (b - a) / 1000;
  424.         }
  425.  
  426.         return a;
  427. }
  428.  
  429. double zloty_podzial_min(double(*F)(double))
  430. {
  431.         double a,b;
  432.  
  433.         std::cout << "podaj a :";
  434.         std::cin >> a;
  435.         std::cout << "podaj b :";
  436.         std::cin >> b;
  437.         double k = (sqrt(5.) - 1.) / 2.;
  438.         double E = 0.00000001;
  439.         int  i = 0;
  440.         if (F(a) * F(b) > 0 /*|| (F(a) * F(b) != -INFINITY)*/)
  441.         {
  442.                 while (i<100 && F(a) * F(b) > 0)
  443.                 {
  444.                         b -= b / 100;
  445.                         //std::cout << "F(b) = " << F(b) << "n";
  446.                         i++;
  447.                 }
  448.                 if (F(a) * F(b) > 0)
  449.                 {
  450.                         std::cout << "nie posiada miejsca zerowego!!!!nFunkcja nie jest ciałga na podanym przedzialenZwracam zeronn";
  451.                         return 0.;
  452.                 }
  453.                 i = 0;
  454.         }
  455.  
  456.         while (b - a>E && i<60)
  457.         {
  458.                 if (F(a + (b - a)*k) * F(a) < 0)
  459.                         b = a + (b - a)*k;
  460.                 else
  461.                 {
  462.                         a = a + (b - a)*k;
  463.                 };
  464.                 i++;
  465.         }
  466.  
  467.         std::cout << "ilosc = " << i << "nn";
  468.         return (a + b) / 2;
  469. }
  470.  
  471. double zloty_podzial(double(*F)(double))
  472. {
  473.         double a, b;
  474.  
  475.         std::cout << "podaj a :";
  476.         std::cin >> a;
  477.         std::cout << "podaj b :";
  478.         std::cin >> b;
  479.         if (F(a) * F(b) > 0)
  480.         {
  481.                 std::cout << "nie posiada miejsca zerowego!!!!nFunkcja nie jest ciałga na podanym przedzialenZwracam zeronn";
  482.                 return 0.;
  483.         }
  484.         else
  485.         {
  486.                 double k = (sqrt(5.) - 1.) / 2.;
  487.                 double xL = b - k * (b - a);
  488.                 double xR = a + k * (b - a);
  489.                 double E = 0.0000001;
  490.                 std::cout << "F(xl) = " << F(xL) << " f(xr) = " << F(xR) << "n";
  491.                 std::cout << "xl = " << xL << " xr = " << xR << "n";
  492.                 std::cout << "a = " << a << " b = " << b << "n";
  493.                 //std::cout << "xl = " << F(xL) << " xr = " << F(xR) << "n";
  494.                 while (b - a > E)//dokladność
  495.                 {
  496.                         std::cout << "F(xl) = " << F(xL) << " f(xr) = " << F(xR) << "n";
  497.                         std::cout << "xl = " << xL << " xr = " << xR << "n";
  498.                         std::cout << "a = " << a << " b = " << b << "n";
  499.                         if (F(xL) < F(xR))
  500.                         {
  501.                                 // wybierz przedział [a, xR]
  502.                                 b = xR;
  503.                                 xR = xL;
  504.                                 xL = b - k * (b - a);
  505.                         }
  506.                         else
  507.                         {
  508.                                 // wybierz przedział [xL, b]
  509.                                 a = xL;
  510.                                 xL = xR;
  511.                                 xR = a + k * (b - a);
  512.                         }
  513.                         std::cout << "xl = " << xL << " xr = " << xR << "n";
  514.                 }
  515.                 return F((a + b) / 2.);
  516.         }
  517. }
  518.  
  519. double metoda_falsi(double(*F)(double))
  520. {
  521.         double x0, f0, fp;
  522.         double a, b;
  523.         double E = 0.0000001;
  524.  
  525.         std::cout << "podaj a :";
  526.         std::cin >> a;
  527.         std::cout << "podaj b :";
  528.         std::cin >> b;
  529.         do
  530.         {
  531.                 x0 = (a*F(b) - b*F(a)) / (F(b) - F(a));
  532.                 f0 = F(x0);
  533.                 fp = F(a);
  534.                 if (f0 * fp < 0) b = x0;
  535.                 else a = x0;
  536.         } while (fabs(f0) > E);
  537.  
  538.         return x0;
  539. }
  540.  
  541. double metoda_siecznych(double(*F)(double))
  542. {
  543.         double x0, f0, fp, fk;
  544.         double a, b;
  545.         double E = 0.0000001;
  546.  
  547.         std::cout << "podaj a :";
  548.         std::cin >> a;
  549.         std::cout << "podaj b :";
  550.         std::cin >> b;
  551.  
  552.         fp = F(a);
  553.         fk = F(b);
  554.  
  555.         do
  556.         {
  557.                 x0 = (a*fk - b*fp) / (fk - fp);
  558.                 f0 = F(x0);
  559.                 a = b;
  560.                 fp = fk;
  561.                 b = x0;
  562.                 fk = f0;
  563.         } while (fabs(f0) > E);
  564.  
  565.         return x0;
  566. }
  567.  
  568. double metoda_newtona_rapshona(double(*F)(double), double(*FP)(double))
  569. {
  570.         double a, b, x0, x1;
  571.         double E = 0.0000001;
  572.         std::cout << "podaj a :";
  573.         std::cin >> a;
  574.         std::cout << "podaj b :";
  575.         std::cin >> b;
  576.  
  577.         if (F(a)*F(b) >= 0)
  578.                 std::cout << "zly przedzial!!!";
  579.         else
  580.         {
  581.                 std::cout << "podaj miejsce startowe: ";
  582.                 std::cin >> x0;
  583.                 while (fabs(F(x0)) > E )
  584.                 {
  585.                         x1 = x0 - F(x0) / FP(x0);
  586.                         x0 = x1;
  587.                 }
  588.         }
  589.  
  590.  
  591.         return x0;
  592. }
  593.  
  594. double metoda_newtona_rapshona_2_stopnia(double(*F)(double), double(*FP)(double), double(*FPP)(double))
  595. {
  596.         double a, b, x0, x1;
  597.         double E = 0.0000001;
  598.         std::cout << "podaj a :";
  599.         std::cin >> a;
  600.         std::cout << "podaj b :";
  601.         std::cin >> b;
  602.  
  603.         if (F(a)*F(b) >= 0)
  604.                 std::cout << "zly przedzial!!!";
  605.         else
  606.         {
  607.                 std::cout << "podaj miejsce startowe: ";
  608.                 std::cin >> x0;
  609.                 while (fabs(F(x0)) > E)
  610.                 {
  611.                         x1 = x0 - ((FP(x0) - sqrt(pow(FP(x0), 2) - 2 * F(x0)*FPP(x0))) / FPP(x0));
  612.                         x0 = x1;
  613.                 }
  614.         }
  615.  
  616.         return x0;
  617. }
  618.  
  619. double metoda_halleya(double(*F)(double), double(*FP)(double), double(*FPP)(double))
  620. {
  621.         double a, b, x0, x1;
  622.         double E = 0.0000001;
  623.         std::cout << "podaj a :";
  624.         std::cin >> a;
  625.         std::cout << "podaj b :";
  626.         std::cin >> b;
  627.  
  628.  
  629.         if (F(a)*F(b) >= 0)
  630.                 std::cout << "zly przedzial!!!";
  631.         else
  632.         {
  633.                 std::cout << "podaj miejsce startowe: ";
  634.                 std::cin >> x0;
  635.                 std::cout << x0 << " ";
  636.                 while (fabs(F(x0)) > E)
  637.                 {
  638.                         x1 = x0 - (2 * F(x0)*FP(x0)) / (2 * pow(FP(x0), 2) - F(F(x0))*FPP(x0));
  639.                         x0 = x1;
  640.                         std::cout << x0 << " ";
  641.                 }
  642.         }
  643.  
  644.         return x0;
  645. }
  646.  
  647.  
  648. double funkcja(double x)
  649. {
  650.         if (x == 0)return -1.7e-308;
  651.         else return x - (4 / pow(x, 2));
  652. }
  653.  
  654. double funkcja1(double x)
  655. {
  656.         if (x == 2)return -1.7e-308;
  657.         else return (pow(x,2)-3)/(x-2);
  658. }
  659.  
  660. double funkcja2(double x)
  661. {
  662.         return pow(x, 2) - 4 + sin(x);
  663. }
  664.  
  665. double funkcja3(double x)
  666. {
  667.         return x*x;
  668. }
  669.  
  670. double funkcja4(double x)
  671. {
  672.         return pow(x,3)+pow(x,2)-3*x-3;
  673. }
  674.  
  675. double funkcja4P(double x)
  676. {
  677.         return 3*pow(x,2)+2*x-3;
  678. }
  679.  
  680. double funkcja4PP(double x)
  681. {
  682.         return 6 * x, +2;
  683. }
  684.  
  685. double funkcja5(double x)
  686. {
  687.         return pow(x, 2) - x + 4;
  688. }
  689.  
  690. double funkcja6(double x)
  691. {
  692.         return pow(x, 2) + 2*x ;
  693. }
  694.  
  695. double motoda_trapezow(double(*F)(double))
  696. {
  697.         double a, b, ile,k;
  698.         std::cout << "podaj poczatek przedziału: ";
  699.         std::cin >> a;
  700.         std::cout << "podaj koniec przedziału: ";
  701.         std::cin >> b;
  702.         std::cout << "podaj ile: ";
  703.         std::cin >> ile;
  704.         double suma = 0.;
  705.         k =  (b - a) / ile;
  706.  
  707.         for (int i = 1; i < ile; i++)
  708.         {
  709.                 suma += F(a + i * k);
  710.         }
  711.         suma = (suma + (F(a) + F(b)) / 2) * k;
  712.         return suma;
  713. }
  714.  
  715. double metoda_simpsona(double(*F)(double))
  716. {
  717.         double a, b, ile, k, x,s;
  718.         std::cout << "podaj poczatek przedziału: ";
  719.         std::cin >> a;
  720.         std::cout << "podaj koniec przedziału: ";
  721.         std::cin >> b;
  722.         std::cout << "podaj ile: ";
  723.         std::cin >> ile;
  724.         double suma = 0.;
  725.         s = 0.;
  726.         k = (b - a) / ile;
  727.  
  728.         for (int i = 1; i <= ile; i++)
  729.         {
  730.                 x = a + i*k;
  731.                 s += F(x - k / 2);
  732.                 if (i < ile) suma += F(x);
  733.         }
  734.         suma = k / 6 * (F(a) + F(b) + 2 * s + 4 * s);
  735.  
  736.         return suma;
  737. }
  738.  
  739. double metoda_monte_carlo(double(*F)(double))
  740. {
  741.         srand(time(NULL));
  742.         double a, b, ile, k, x, s;
  743.         std::cout << "podaj poczatek przedziału: ";
  744.         std::cin >> a;
  745.         std::cout << "podaj koniec przedziału: ";
  746.         std::cin >> b;
  747.         std::cout << "podaj ile: ";
  748.         std::cin >> ile;
  749.         double suma = 0.;
  750.         s = 0.;
  751.         k = b - a;
  752.  
  753.         for (int i = 1; i <= ile; i++)
  754.         {
  755.                 suma += F(a + ((double)rand() / (double)(RAND_MAX + 1)*k));
  756.         }
  757.         suma = k * suma / ile;
  758.  
  759.         return suma;
  760. }
  761.  
  762.  
  763.  

Replies to Untitled rss

Title Name Language When
Re: Untitled Tinct Human cpp 6 Years ago.