Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- double FX(double x) {
- return x;
- }
- double FXX(double x) {
- return x * x;
- }
- double MetodSrednihPryamougolnikov(double a, double b, double countOfParts, double(*func)(double)) {
- double sum = (func(a) + func(b)) / 2.0, step = (b - a) / countOfParts;
- for(double x = a + step; x < b; x += step)
- sum += func(x);
- return sum / countOfParts;
- }
- double MetodLevihPryamougolnikov(double a, double b, double countOfParts, double(*func)(double)) {
- double sum = 0, step = (b - a) / countOfParts;
- for(double x = a; x < b; x += step)
- sum += func(x);
- return sum / countOfParts;
- }
- double MetodPravihPryamougolnikov(double a, double b, double countOfParts, double(*func)(double)) {
- double sum = 0, step = (b - a) / countOfParts;
- for(double x = b; x > a; x -= step)
- sum += func(x);
- return sum / countOfParts;
- }
- double CalcIntegral(double a, double b, double eps, double(*method)(double, double, double, double(*func)(double)), double(*func)(double)) {
- double countOfParts = 4, lastIntegral = method(a, b, countOfParts, func), currentIntegral, diff;
- do {
- currentIntegral = method(a, b, (countOfParts *= 2), func);
- diff = fabs(lastIntegral - currentIntegral);
- lastIntegral = currentIntegral;
- } while(diff > eps);
- return lastIntegral;
- }
- int main() {
- double a, b, eps;
- std::cout << "Get a:";
- std::cin >> a;
- std::cout << "Get b:";
- std::cin >> b;
- std::cout << "Get eps:";
- std::cin >> eps;
- std::cout << "(f = x, MetodLevihPryamougolnikov): " << CalcIntegral(a, b, eps, MetodLevihPryamougolnikov, FX) << std::endl;
- std::cout << "(f = x, MetodSrednihPryamougolnikov):" << CalcIntegral(a, b, eps, MetodSrednihPryamougolnikov, FX) << std::endl;
- std::cout << "(f = x, MetodPravihPryamougolnikov): " << CalcIntegral(a, b, eps, MetodPravihPryamougolnikov, FX) << std::endl;
- std::cout << "(f = x*x, MetodLevihPryamouholnikov): " << CalcIntegral(a, b, eps, MetodLevihPryamougolnikov, FXX) << std::endl;
- std::cout << "(f = x*x, MetodSrednihPryamougolnikov):" << CalcIntegral(a, b, eps, MetodSrednihPryamougolnikov, FXX) << std::endl;
- std::cout << "(f = x*x, MetodPravihPryamouholnikov): " << CalcIntegral(a, b, eps, MetodPravihPryamougolnikov, FXX) << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement