Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- inline double foo(double x) {
- return exp(x) * (1 + sin(x)) / (1 + cos(x));
- }
- // Первообразная
- inline double fooPrimitive(double x) {
- return exp(x) * tan(x / 2); // Counted in wolfram
- }
- // Интеграл через сумму трапеций
- double integralSum(unsigned int points, double start, double end) {
- double result = 0;
- double step = (end - start) / points;
- for (int i = 0; i < points; i++) {
- result += foo(start + step * i) * step;
- }
- return result;
- }
- // Определенный интеграл через формулу Ньютона-Лейбница
- double integral(double start, double end) {
- return fooPrimitive(end) - fooPrimitive(start);
- }
- int main(int argc, char* argv[]) {
- double epsilon; // Точность
- std::cout << "Enter Epsilon: ";
- std::cin >> epsilon;
- const double integralStart = 0; // Циферка под знаком интеграла
- const double integralStop = 2; // Циферка над знаком интеграла
- unsigned int pointsAmount = 5; // Количество трапеций
- double valuePrev, valueCurrent = 0; // Результат текущий и предыдущий
- do {
- valuePrev = valueCurrent;
- valueCurrent = integralSum(pointsAmount, integralStart, integralStop);
- pointsAmount++;
- if (pointsAmount < 10) {
- std::cout << "Current amount of points: " << pointsAmount
- << " ; Current trapezoidal integral: " << valueCurrent << std::endl;
- }
- } while (!(fabs(valueCurrent - valuePrev) < epsilon)); // Пока | Xn+1 - Xn | < Epsilon
- std::cout << "Trapezoidal integral: " << valueCurrent << std::endl;
- std::cout << "Accuracy integral value: " << integral(integralStart, integralStop) << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement