Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<vector>
- using namespace std;
- double function(double x) {
- double func = tanh(x);
- return func;
- }
- double INTEGRAL_Trapecia(double a, double b,int n) {
- double dy = abs((b - a) / n);
- double y = (function(a) + function(b))/2;
- for (int i =1; i <n; i++) {
- y += function(a+i*dy);
- }
- y *= dy;
- return y;
- }
- double INTEGRAL_Simpsona(double a, double b, int n) {
- double dy = abs((b - a) /(double)n);
- double y1 = 0, y2 = 0;
- double y = function(a) + function(b);
- for (int k = 1; k <n ; k+=2) {
- y1 += function(a+k*dy);
- }
- for (int k = 2; k < n ; k+=2) {
- y2 += function(a+k*dy);
- }
- y += 4. * y1 + 2. * y2;
- y *= dy / 3.;
- return y;
- }
- double INTEGRAL_Rectangle(double a, double b, int n) {
- double dy = (b - a) / n;
- double m=0;
- for (int k = 1; k < n; k++) {
- m += function((a + k * dy) - dy / 2);
- }
- m *= dy;
- return m;
- }
- int main() {
- setlocale(LC_ALL, "russian");
- cout << "Выберите метод которым хотите посчитать:\n1.Метод трапеций\n2.Метод Симпсона\n3.Метод прямоугольников\n";
- while (true) {
- int z;
- cin >> z;
- if (z == 1) {
- double a, b, eps;
- cout << "Введите пределы интегрирования" << endl;
- cout << "a=";
- cin >> a;
- cout << "b=";
- cin >> b;
- cout << "Введите точность ";
- cin >> eps;
- int count = 0;
- int n = 2;
- while (abs(INTEGRAL_Trapecia(a, b, n) - INTEGRAL_Trapecia(a, b, 2 * n)) > eps) {
- cout.precision(15);
- cout << INTEGRAL_Trapecia(a, b, n) << endl;
- count++;
- n*=2;
- }
- cout << count << endl;
- double y = INTEGRAL_Trapecia(a, b, n);
- cout << "Значение интеграла в этих пределах " << y << endl;
- cout << "Количество разбиений " << n << endl;
- }
- if (z == 2) {
- double a, b, eps;
- cout << "Введите пределы интегрирования" << endl;
- cout << "a=";
- cin >> a;
- cout << "b=";
- cin >> b;
- cout << "Введите точность ";
- cin >> eps;
- int count = 0;
- int n = 2;
- while (abs(INTEGRAL_Simpsona(a, b, n) - INTEGRAL_Simpsona(a, b, 2 * n)) > eps) {
- cout.precision(15);
- cout << INTEGRAL_Simpsona(a, b, n) << endl;
- n *= 2;
- count++;
- }
- cout << count << endl;
- double y = INTEGRAL_Simpsona(a, b, n);
- cout << "Значение интеграла в этих пределах " << y << endl;
- cout << "Количество разбиений " << n << endl;
- }
- if (z == 3) {
- double a, b, eps;
- cout << "Введите пределы интегрирования" << endl;
- cout << "a=";
- cin >> a;
- cout << "b=";
- cin >> b;
- cout << "Введите точность ";
- cin >> eps;
- int n = 2;
- int count = 0;
- while (abs(INTEGRAL_Rectangle(a, b, n) - INTEGRAL_Rectangle(a, b, 2 * n)) > eps) {
- cout.precision(15);
- cout << INTEGRAL_Rectangle(a, b, n) << endl;
- count++;
- n*=2;
- }
- cout << count << endl;
- double y = INTEGRAL_Rectangle(a, b, n);
- cout << "Значение интеграла в этих пределах " << y << endl;
- cout << "Количество разбиений " <<n<< endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement