рдиреНрдпреВрдЯрди-рдХреЛрдЯреНрд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ рд▓рдЧрднрдЧ рдЖрдзрд╛рд░рд┐рдд рдПрдХреАрдХрд░рдг рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИрдВ:
- рдПрдХреАрдХрд░рдг рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдмрд░рд╛рдмрд░ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛;
- рдмрд╣реБрдкрдж рджреНрд╡рд╛рд░рд╛ рдЪрдпрдирд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЗрдВрдЯреАрдЧреНрд░реИрдВрдб рдХреЗ рд╕рдиреНрдирд┐рдХрдЯрди;
- рдкреНрд░рд╛рдкреНрдд рдШреБрдорд╛рд╡рджрд╛рд░ рдЯреНрд░реЗрдкреЛрдЬрд╝реЙрдЗрдб рдХрд╛ рдХреБрд▓ рдХреНрд╖реЗрддреНрд░рдлрд▓ рдЬреНрдЮрд╛рдд рдХрд░рдирд╛ред
рдпрд╣ рд▓реЗрдЦ рдиреНрдпреВрдЯрди-рдХреЛрдЯреНрд╕ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛:
- рдЯреНрд░реЗрдкреЗрдЬрд╝реЙрдЗрдб рд╡рд┐рдзрд┐;
- рд╕рд┐рдореНрдкрд╕рди рдХреА рд╡рд┐рдзрд┐;
- рд░реЛрдордмрд░реНрдЧ рд╡рд┐рдзрд┐ред
рдЯреНрд░реЗрдкреЗрдЬрд╝реЙрдЗрдб рд╡рд┐рдзрд┐
рдЯреНрд░реИрдкреЗрдЬрд╝реЙрдЗрдб рд╡рд┐рдзрд┐ рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рдиреНрди рдХреЛ рд▓реЗрдВ:

рд╕рдиреНрдирд┐рдХрдЯрди рдХреА рд╕рдЯреАрдХрддрд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ N рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХреАрдХрд░рдг рдЕрдВрддрд░рд╛рд▓ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдВрддрд░рд╛рд▓ рдХреА рд▓рдВрдмрд╛рдИ:


рд╕рдорд▓рдореНрдмрд╛рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдЗрдВрдЯреАрдЧреНрд░рд▓ рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:

рд╕рдорд▓рдореНрдмрд╛рдХрд╛рд░ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рдиреНрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ 4 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрдиреЗ рдЪрд╛рд╣рд┐рдП:
- рдПрдХреАрдХрд░рдг рдЦрдВрдб рдХреА рд╕реАрдорд╛рдПрдВ;
- рдЕрднрд┐рдиреНрди рдХрд╛рд░реНрдп;
- рд╡рд┐рднрд╛рдЬрди рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдиред
double trapezoidalIntegral(double a, double b, int n, const std::function<double (double)> &f) { const double width = (ba)/n; double trapezoidal_integral = 0; for(int step = 0; step < n; step++) { const double x1 = a + step*width; const double x2 = a + (step+1)*width; trapezoidal_integral += 0.5*(x2-x1)*(f(x1) + f(x2)); } return trapezoidal_integral; }
рд╕рд┐рдореНрдкрд╕рди рд╡рд┐рдзрд┐
рд╕рд┐рдореНрдкрд╕рди рд╡рд┐рдзрд┐ рдлрдВрдХреНрд╢рди x (x) рдХреЗ рджреВрд╕рд░реЗ-рдбрд┐рдЧреНрд░реА рдкреНрд░рдХреНрд╖реЗрдк рдмрд╣реБрдкрдж рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ a, b, рдФрд░ m = (a + b) / 2, parabolas p (x) рд╣реЛрддрд╛ рд╣реИред рд╕рдЯреАрдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХреАрдХрд░рдг рдЕрдВрддрд░рд╛рд▓ рдХреЛ N рдмрд░рд╛рдмрд░ рдЕрдВрддрд░рд╛рд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЯреНрд░реИрдкреЛрдЬрд╝реЙрдЗрдб рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛), рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╕рд┐рдореНрдкрд╕рди рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред

рдмрд░рд╛рдмрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ 6 рдЖрдпрддреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкрд░рдмреЛрд▓рд╛ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реА рдХреА рдКрдВрдЪрд╛рдИ рдЪ (рдП) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреАрд╕рд░реЗ рд╕реЗ рдкрд╛рдВрдЪрд╡реЗрдВ рд╕реЗ - рдПрдл (рдПрдо), рдЫрдареЗ - рдПрдл (рдПрдо) рд╕реЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд┐рдореНрдкрд╕рди рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рди рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

double simpsonIntegral(double a, double b, int n, const std::function<double (double)> &f) { const double width = (ba)/n; double simpson_integral = 0; for(int step = 0; step < n; step++) { const double x1 = a + step*width; const double x2 = a + (step+1)*width; simpson_integral += (x2-x1)/6.0*(f(x1) + 4.0*f(0.5*(x1+x2)) + f(x2)); } return simpson_integral; }
рд░реЛрдордмрд░реНрдЧ рд╡рд┐рдзрд┐
T (x) рдЪрд░рдг x рдХреЗ рд╕рд╛рде рд╕рдорд▓рдореНрдмрд╛рдХрд╛рд░ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЕрднрд┐рдиреНрди рд╕рдиреНрдирд┐рдХрдЯрди рд╣реИред рд╣рдореЗрдВ 3 рдРрд╕реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЪрд░рдг рдЖрдХрд╛рд░ рдХреЛ 2 рдЧреБрдирд╛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо y рдЕрдХреНрд╖ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рдкрд░рд╡рд▓рдп рд╕рдордорд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдВрдХ 0 (T) рдФрд░ T (1/2) рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддреЗ рд╣реБрдП x рдХреЛ 0 рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдорд╛рдиреЛрдВ рдХреЛ рдПрдХреНрд╕рдЯреНрд░рдкрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд░реЛрдордмрд░реНрдЧ рд╕рдиреНрдирд┐рдХрдЯрди рдХреЗ рдкрд╣рд▓реЗ рд╕реНрддрдВрдн R (n, 0) рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рд╕рдорд▓рдореНрдмрд╛рдХрд╛рд░ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ R (n, 1) рдХреЗ рджреВрд╕рд░реЗ рд╕реНрддрдВрдн рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдзрд╛рди рд╕рд┐рдореНрдкрд╕рди рд╡рд┐рдзрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░реЛрдордмрд░реНрдЧ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдПрдХреАрдХрд░рдг рдХреЗ рд╕реВрддреНрд░:



C ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
std::vector<std::vector<double>> rombergIntegral(double a, double b, size_t n, const std::function<double (double)> &f) { std::vector<std::vector<double>> romberg_integral(n, std::vector<double>(n)); romberg_integral.front().front() = trapezoidalIntegral(a, b, 1, f); double h = ba; for(size_t step = 1; step < n; step++) { h *= 0.5; double trapezoidal_integration = 0; size_t stepEnd = pow(2, step - 1); for(size_t tzStep = 1; tzStep <= stepEnd; tzStep++) { const double deltaX = (2*tzStep - 1)*h; trapezoidal_integration += f(a + deltaX); } romberg_integral[step].front() = 0.5*romberg_integral[step - 1].front() + trapezoidal_integration*h; for(size_t rbStep = 1; rbStep <= step; rbStep++) { const double k = pow(4, rbStep); romberg_integral[step][rbStep] = (k*romberg_integral[step][rbStep-1] - romberg_integral[step-1][rbStep-1])/(k-1); } } return romberg_integral; }