C++ Bc. 30 cpp

Z GeoWikiCZ
#include <iostream>
#include <cmath>

double simpson(double (*f)(double), double a, double b, int m);

int main()
{
  using namespace std;

  for (int m=2; m<=8; m+=2)
    {
      cout << "\n    a    "
           << "    b    "
           << " simpson "
           << "  chyba  "
           << "   m = " << m << endl;
      cout << "--------------------------------------------\n";

      double a=0, b=1;
      for (int k=1; k<=5; k++)
        {
          double s = simpson(sin, a, b, m);
          double e = cos(a) - cos(b);

          cout.setf(ios_base::fixed, ios_base::floatfield);
          cout << a << " " << b << " " << s << " ";
          cout.setf(ios_base::scientific, ios_base::floatfield);
          cout << e-s << endl;

          a += 0.1;
          b += 0.2;
        }

    }
}



// Priblizny vypocet urciteho integralu

double simpson(double (*f)(double), double a, double b, int m)
{
  m = std::max(2, m);    // m >= 2
  m = (m+1)/2*2;         // m musi byt sude

  double h = (b - a)/m;  // integracni krok
  double s = f(a) + 4.0*f(a+h) + f(b);

  double t = m, i = 2; 
  while (i < t)
    {
      s += 2.0*f(a + h*i);
      i++;
      s += 4.0*f(a + h*i);      
      i++;
    }

  return s*h/3.0;
}
    a        b     simpson   chyba     m = 2
--------------------------------------------
0.000000 1.000000 0.459862 -1.644957e-04
0.100000 1.200000 0.632980 -3.335789e-04
0.200000 1.400000 0.810709 -6.092499e-04
0.300000 1.600000 0.985564 -1.027751e-03
0.400000 1.800000 1.149889 -1.625841e-03

    a        b     simpson   chyba     m = 4
--------------------------------------------
0.000000 1.000000 0.459708 -1.005080e-05
0.100000 1.200000 0.632667 -2.028349e-05
0.200000 1.400000 0.810136 -3.684878e-05
0.300000 1.600000 0.984598 -6.179879e-05
0.400000 1.800000 1.148360 -9.714269e-05

    a        b     simpson   chyba     m = 6
--------------------------------------------
0.000000 1.000000 0.459700 -1.977119e-06
0.100000 1.200000 0.632650 -3.986527e-06
0.200000 1.400000 0.810107 -7.235318e-06
0.300000 1.600000 0.984548 -1.212160e-05
0.400000 1.800000 1.148282 -1.903259e-05

    a        b     simpson   chyba     m = 8
--------------------------------------------
0.000000 1.000000 0.459698 -6.246666e-07
0.100000 1.200000 0.632648 -1.259151e-06
0.200000 1.400000 0.810102 -2.284522e-06
0.300000 1.600000 0.984540 -3.825951e-06
0.400000 1.800000 1.148269 -6.004912e-06

[ Zpět ]