Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Ted333
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 15
1

Вычисление определенного интеграла методом средних прямоугольников

08.06.2018, 11:58. Просмотров 327. Ответов 8

Вот написал прогу для вычисления определенного интеграла.

http://www.cyberforum.ru/cgi-bin/latex.cgi?\int_{0}^{2}\left(x^3\cdot e^x \right)dx\\F\left(x \right)=e^x\cdot\left(x^3-3x^2+6x-6 \right)

Вроде интеграл и кол-во шагов считает,но первообразную f(b)-f(a)
и погрешность нет.
Не могу понять в чем проблема.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>  // Библиотека ввода ввывода                                                                                                
#include <cmath>  
#include <iomanip>  // библиотека для контроля цифр после запятой 
 
const double e = 2.7;  // число epx
const double pogr = 0.0001; // погрешность 
const double a = 0; // точка а 
const double b = 2; // точка b
 
using namespace std;
 
float vinteg(float way)                // Функция для вычисления интеграла 
{
    float Save = 0.0;                  // Save - сумма всех y
    for (float x = a; x < b; x += way)
        Save += (pow(x,3)*pow(e,3));
    Save *= way;               // умножаем сумму на шаг(way)используя метод прямоугольника.
    return Save;
}
 
float razpervoob()    // функция для вычисления первообразных 
{
    float raz,x;
    raz = fabs(pow(e,3)*(pow(x,3)-3*pow(x,2)+6*x-6));  // вычисляем F(b) - F(a)
    return raz;
}
 
int main()                    //главная функция 
{
    setlocale(0, "");               
    float colway, way;        // colway - количество шагов. way - шаг.
    float otvin2 = razpervoob();
    colway = 2;
    bool yep = false;
 
    do            // Цикл для вычисления кол-во шагов 
    {
        yep = true;
        way = (b - a) / colway;
        if (fabs(fabs(vinteg(way)) - otvin2) >= pogr) { yep = false; colway *= 2.0; }
    } while (yep != true);
 
    float otvin = fabs(vinteg(way));
    cout << "\n\n F(b) - F(a) = " << setprecision(15) << otvin2;      // Вывод F(b) - F(a)
    cout << "\n\n Integral = " << setprecision(15) << otvin;          // Вывод значения интеграла 
    cout << "\n\n ÏîãðåøГ*îñòü âû÷èñëåГ*ГЁГї = " << fabs(otvin - otvin2);        // вывод погрешности 
    cout << "\n\n Êîë-ГўГ® ïðîäåëГ*Г*Г*ûõ ГёГ*ãîâ = " << setprecision(25) << colway << "\n\n";     // Вывод количества шагов
    system("pause");   
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2018, 11:58
Ответы с готовыми решениями:

Вычисление определенного интеграла методом средних прямоугольников для функции
Вот само задание : Разработать программу для вычисления определенного...

Разработать программу для вычисления определенного интеграла методом средних прямоугольников. Проверка курсовой
Будьте добры , проверьте правильно ли считает данная программа.И можно ли её...

Вычисление определенного интеграла методом центральных прямоугольников
Создал программу для вычисления определенного интеграла методом центральных...

Метод средних прямоугольников и количество вычислений для вычисления определенного интеграла
Задание:Вычислить значение определенного интеграла методом средних...

Метод средних прямоугольников и количество вычислений для вычисления определенного интеграла (Си -> C++)
Задание:Вычислить значение определенного интеграла методом средних...

8
slava_psk
201 / 169 / 81
Регистрация: 10.06.2016
Сообщений: 779
08.06.2018, 13:19 2
Ted333, имеется в виду разность первообразных F(b)-F(a). Вообще намудрено у вас, откуда этот код взяли?
Вот пример, правда с методом трапеций.Вычисление определенного интеграла методом трапеций
0
Ted333
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 15
08.06.2018, 14:23  [ТС] 3
Да,разность первообразных я уже исправил
C++
1
raz = fabs((pow(e, 3)*(pow(b, 3) - 3 * pow(b, 2) + 6 * b - 6)) - (pow(e, 3)*(pow(a, 3) - 3 * pow(a, 2) + 6 * a - 6)));
Добавлено через 38 минут
Почему-то после исправления.Не вывод ответ просто пустое консольное приложение.
0
slava_psk
201 / 169 / 81
Регистрация: 10.06.2016
Сообщений: 779
08.06.2018, 15:45 4
Ted333, откуда там модуль fabs ?

Добавлено через 56 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <cstdlib> // для system
#include <iostream> 
#include <string>
 
using std::cout;
using std::cin;
using std::endl;
        int n,i;
        double a,b,h,x,s,e;
        double fun(double x);
        double fun_a (double a,double b);
int main()
{    
        setlocale(0, "");
        e=exp(1.0);
        cout<<e<<endl;
        /*
        cout<<"Введите начало интервала a=";
        cin>>a;
        cout<<endl;
        cout<<"Введите конец интервала b=";
        cin>>b;
        cout<<endl;
        cout<<"Введите количество разбиений интервала n=";
        cin>>n;
        cout<<endl;
        */
        n=100;
        a=0;
        b=2;
        h=(b-a)/n;
        x=a;
        s=0;
        for (i = 0; i<n; i++) 
        {
            s=s+0.5*(fun(x)+fun(x+0.5*h))*h;
            x=x+h;
        }
        cout << "Интеграл="<< s <<" "<< fun_a( a,b)<<endl;
        system("pause"); // Только для тех, у кого MS Visual Studio
}
 
double fun (double x)
{
    return pow(x,3)*pow(e,x);
}
double fun_a (double a,double b)
{
    return (pow(e,a)*(pow(a,3)-3*pow(a,2)+6*a-6))-(pow(e,b)*(pow(b,3)-3*pow(b,2)+6*b-6));
}
Добавлено через 12 минут
Только там будет
C++
1
s=s+fun(x+0.5*h)*h;
1
Ted333
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 15
08.06.2018, 20:40  [ТС] 5
Функция fun_a это получается интеграл
а fun_a(a,b) это уже первообразная?
C++
1
fun_a( a,b)
Добавлено через 3 часа 35 минут
и как найти погрешность и количество проделанных шагов?
0
Ted333
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 15
08.06.2018, 20:57  [ТС] 6
Не могли бы помочь чтобы примерно находило так
0
Миниатюры
Вычисление определенного интеграла методом средних прямоугольников  
Ted333
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 15
09.06.2018, 00:15  [ТС] 7
Интеграл и первообразную нашел.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream> //ïîäêëþ÷åГ*ГЁГҐ Г±++
#include <math.h> //áèáëèîòåêГ* äëÿ âû÷èñëåГ*ГЁГ©
#include <cmath>  
using std::cout;
int n, i; 
double a, b, h,s, x, e; //
//ГґГіГ*êöèÿ âû÷èñëåГ*ГЁГї ГЁГ*ГІГҐГЈГ°Г*Г«Г*
float integ(double x)
{
    return pow(x, 3) * pow(e, x);
}
//ÔóГ*êöèÿ âû÷èñëåГ*ГЁГї ïåðâîîáðГ*Г§Г*îé 
float integ_a(double a, double b)
{
    return (pow(e, a) * (pow(a, 3) - 3 * pow(a, 2) + 6 * a - 6)) - (pow(e, b) * (pow(b, 3) - 3 * pow(b, 2) + 6 * b - 6));
}
//ГЈГ«Г*ГўГ*Г*Гї ГґГіГ*êöèÿ ïðîãðГ*ììû
int main()
{
    //îáúÿâëåГ*ГЁГҐ ïåðåìåГ*Г*ûõ ïåðåìåГ*Г*ûõ(ГЄГ®Г*Г±ГІГ*Г*ГІ)
    setlocale(0, ""); 
    e =exp(1.0);
    n = 100;
    a = 0;
    b = 2;
    
    h = (b - a) / n;
    x = a;
    s = 0;
    for (i = 0; i < n; i++)
    {
        s += integ(x + 0.5 * h) * h;
        x  += h;
    }
    cout << "\n\Интеграл: " << s << integ;//âûâîä ГЁГ*ГІГҐГЈГ°Г*Г«Г*
     cout <<"\n"  ;
       cout << "\nf(b)-f(a): " << fabs(integ_a(a,b));//âûâîä F(b)-F(a)
       cout <<"\n";
    system("pause");//ГЇГ*ГіГ§Г*
}
0
slava_psk
201 / 169 / 81
Регистрация: 10.06.2016
Сообщений: 779
09.06.2018, 10:16 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <cstdlib> // для system
#include <iostream> 
#include <string>
 
using std::cout;
using std::cin;
using std::endl;
        int n,i;
        double a,b,h,x,s,e,eps,int_check;
        double fun(double x);
        double fun_a (double a,double b);
int main()
{    
        setlocale(0, "");
        e=exp(1.0);
        /*
        cout<<"Введите начало интервала a=";
        cin>>a;
        cout<<endl;
        cout<<"Введите конец интервала b=";
        cin>>b;
        cout<<endl;
        */
        n=0;
        a=0;
        b=2;
        int_check=fun_a(a,b);
        do{
            n=n+10;
            h=(b-a)/n;
            s=0;
            x=a;
        for (i = 0; i<n; i++) 
        {
            s=s+fun(x+0.5*h)*h;
            x=x+h;
        }
        eps=fabs(s-int_check);
        //cout << "Интеграл="<< s <<" "<< int_check<<" "<<eps<<endl;
        }while (eps>0.001);
        cout << "F(b)-F(a)="<< int_check <<endl;
        cout << "Интеграл="<< s <<endl;
        cout << "Точность="<< eps <<endl;
        cout << "Число шагов разбиения="<< n <<endl;
 
        system("pause"); // Только для тех, у кого MS Visual Studio
}
 
double fun (double x)
{
    return pow(x,3)*pow(e,x);
}
 
double fun_a (double a,double b)
{
    return (pow(e,b)*(pow(b,3)-3*pow(b,2)+6*b-6))-(pow(e,a)*(pow(a,3)-3*pow(a,2)+6*a-6));
}
1
Ted333
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 15
09.06.2018, 15:34  [ТС] 9
Благодарю.
0
09.06.2018, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2018, 15:34

Нахождение определенного интеграла методом прямоугольников и методом трапеций
Написать программу, которая находит определенный интеграл \int_{a}^{b}f(x)dx...

Вычисление определенного интеграла функции y(x) численными методами прямоугольников и трапеций
Разработать компьютерную программу вычисления определенного интеграла функции...

Вычисление интеграла методом прямоугольников
Помогите решить задачу! Необходимо использовать метод прямоугольников. Для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru