Advertisement
Toliak

integral aga

Oct 4th, 2018
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. inline double foo(double x) {
  5.     return exp(x) * (1 + sin(x)) / (1 + cos(x));
  6. }
  7.  
  8. // Первообразная
  9. inline double fooPrimitive(double x) {
  10.     return exp(x) * tan(x / 2);             // Counted in wolfram
  11. }
  12.  
  13. // Интеграл через сумму трапеций
  14. double integralSum(unsigned int points, double start, double end) {
  15.     double result = 0;
  16.     double step = (end - start) / points;
  17.     for (int i = 0; i < points; i++) {
  18.         result += foo(start + step * i) * step;
  19.     }
  20.     return result;
  21. }
  22.  
  23. // Определенный интеграл через формулу Ньютона-Лейбница
  24. double integral(double start, double end) {
  25.     return fooPrimitive(end) - fooPrimitive(start);
  26. }
  27.  
  28. int main(int argc, char* argv[]) {
  29.     double epsilon;                     // Точность
  30.     std::cout << "Enter Epsilon: ";
  31.     std::cin >> epsilon;
  32.    
  33.     const double integralStart = 0;     // Циферка под знаком интеграла
  34.     const double integralStop = 2;      // Циферка над знаком интеграла
  35.     unsigned int pointsAmount = 5;      // Количество трапеций
  36.     double valuePrev, valueCurrent = 0;         // Результат текущий и предыдущий
  37.     do {
  38.         valuePrev = valueCurrent;
  39.         valueCurrent = integralSum(pointsAmount, integralStart, integralStop);
  40.         pointsAmount++;
  41.  
  42.         if (pointsAmount < 10) {
  43.             std::cout << "Current amount of points: " << pointsAmount
  44.                 << " ; Current trapezoidal integral: " << valueCurrent << std::endl;
  45.         }
  46.     } while (!(fabs(valueCurrent - valuePrev) < epsilon));          // Пока | Xn+1 - Xn | < Epsilon
  47.  
  48.     std::cout << "Trapezoidal integral: " << valueCurrent << std::endl;
  49.     std::cout << "Accuracy integral value: " << integral(integralStart, integralStop) << std::endl;
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement