Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 40

Определенный интеграл от функции методом левых прямоугольников с заданной точностью

22.03.2018, 13:18. Показов 4251. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Данная программа считает определенный интеграл от функции методом левых прямоугольников с заданной точностью и считает кол-во итераций.

Название: 027.png
Просмотров: 190

Размер: 1.8 Кб - формула метода левых прямоугольников

Все вроде бы понятно, задаем функцию, в цикле описываем эту формулу.. не понятно только, для чего тут используется "typedef" и непонятно, что такое "pointFunc"... в целом не понятна эта строчка
C++
1
typedef double(*pointFunc)(double);
.
Еще не понятен этот цикл.. зачем мы умножаем на 2 кол-во разбиений и для чего вообще нужен этот цикл?
C++
1
2
3
4
5
6
7
  do {
    s = s1;    
    n = 2 * n; 
    s1 = rectangle_integral(f, a, b, n);
    k++;
  }
  while (fabs(s1 - s) > eps);
Код писал не я, я просто его нашел, хочу разобрать его и по аналогии сделать свой сам.
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
#include <iostream>
#include <math.h>
#include <cmath>
using namespace std;
typedef double(*pointFunc)(double);
double f(double x)
{
    if (x==-0.9)
    {
        cout<<"-0.9 isn't allowed!"<<endl;
        
    }
    else
    {
        return x+0.5/(x+0.9)-sin(x)-5;
    }
}
double rectangle_integral(pointFunc f, double a, double b, int n) {
  double x, h;
  double sum = 0.0;
  double fx;
  h = (b - a) / n;  //Шаг
  
  for (int i = 0; i < n; i++) {
    x = a + i*h;
    fx = f(x);
    sum += fx;
  }
  return (sum * h);
}
int main(){
  setlocale(LC_ALL, "Russian");
  double a, b, eps;
  double s1, s;
  int n = 1; 
  
  cout << "\nЛевый предел интегрирования a = ";
  cin >> a;
  cout << "\nПравый предел интегрирования b = ";
  cin >> b;
  cout << "\nТочность eps = ";
  cin >> eps;
  cout << "\nКол-во разбиений n = ";
  cin >> n;
  s1 = rectangle_integral(f, a, b, n); 
  int k=0;
  do {
    s = s1;    
    n = 2 * n; 
    s1 = rectangle_integral(f, a, b, n);
    k++;
  }
  while (fabs(s1 - s) > eps);
  cout << "\nИнтеграл = " << s1 << endl;
  cout<<"Итераций:"<<k<<endl;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2018, 13:18
Ответы с готовыми решениями:

Вычислить интеграл методами левых прямоугольников, трапеций и Симпсона с заданной точностью
Вычислить интеграл 14 ∫ x^3lnxd 06 методами левых прямоугольников, трапеций и Симпсона с заданной точностью (вводится с...

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

Найти определенный интеграл методом левых прямоугольников
f(x)=f(x)=(x^3)+(x^2)+x+1 интервал

2
0 / 0 / 1
Регистрация: 28.04.2017
Сообщений: 40
22.03.2018, 14:22  [ТС]
Цитата Сообщение от infaCplus Посмотреть сообщение
Еще не понятен этот цикл.. зачем мы умножаем на 2 кол-во разбиений и для чего вообще нужен этот цикл?
C++
1
2
3
4
5
6
7
  do {
    s = s1;    
    n = 2 * n; 
    s1 = rectangle_integral(f, a, b, n);
    k++;
  }
  while (fabs(s1 - s) > eps);
а, насколько я понял, это подсчитывается кол-во итераций

Добавлено через 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
for (int i(0); i < h*2 ; i++)
 
{
 
y1 = fabs(f(c));
 
c = c - n1;
 
vt = fabs(y1*n1);
 
st = st + vt;
 
}
 
kt = (fabs(s - st) / 2);
 
cout << "kt= " << kt << " st= " << st << " n= " << n << endl;
 
if (kt < n)
 
{ cout << "точность допустимая. метод Рунге выполняется" << endl;
 
true;
 
}
 
else
 
{
 
cout << "низкая точность. увеличте точность" << endl;
 
break;
 
return s;
 
}
 
}
 
}
Весь код:
Кликните здесь для просмотра всего текста
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
//#include "stdafx.h"
 
#include <iostream>
 
#include <math.h>
 
double integral1(double);
 
double integral(double a, double b, double h, double(*f)(double));
 
using namespace std;
 
using namespace std;
 
int main()
 
{
 
setlocale(LC_ALL, "rus_rus.1251");// русский язык вкл
 
double a, b;// пределы интегрирования
 
double h;//шаг
 
cout << "введите пределы интегрирования а= и б= " << endl;
 
cin >> a >> b;
 
// кол-во разбиений
 
cout << "введите кол-во разбиений h =" << endl;
 
cin >> h;
 
//cout << "кол-во =" << n << endl;
 
cout << "integral=" << integral(a, b, h, integral1) << endl;
 
//cout << " = " << n << endl;
 
system("pause");
 
return 0;
 
}
 
double integral(double a, double b, double h, double(*f)(double))
 
{
 
double y(0), s(0), c(0), x(0), n1(0), y1(0);
 
double v(0), v1(0), st(0), vt(0), kt(0);
 
c = b;
 
// cout << " n=" << n << endl;
 
x = b;
 
double n(0);
 
n = (b - a) / h;
 
n1 = (b - a) / ( h*3);
 
while (true)
 
{
 
kt = 0;
 
cout << " h = " << h << endl;
 
s = 0;// обнуление суммы
 
st = 0;
 
for (int i(0); i < h; i++)
 
{
 
y = fabs(f(x));
 
x = x - n;
 
v1 = fabs(y*n);
 
s = s + v1;
 
}
 
for (int i(0); i < h*2 ; i++)
 
{
 
y1 = fabs(f(c));
 
c = c - n1;
 
vt = fabs(y1*n1);
 
st = st + vt;
 
}
 
kt = (fabs(s - st) / 2);
 
cout << "kt= " << kt << " st= " << st << " n= " << n << endl;
 
if (kt < n)
 
{ cout << "точность допустимая. метод Рунге выполняется" << endl;
 
true;
 
}
 
else
 
{
 
cout << "низкая точность. увеличте точность" << endl;
 
break;
 
return s;
 
}
 
}
 
}
 
double integral1(double x)
 
{
 
//return x;
 
return sin(x*2+1)/(x+0.1);
 
}


Добавлено через 20 минут
Так, ну я вроде бы все понял, кроме
C++
1
typedef double(*pointFunc)(double);
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.03.2018, 14:25
Цитата Сообщение от infaCplus Посмотреть сообщение
Так, ну я вроде бы все понял, кроме
аллиас указателя на фукцию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2018, 14:25
Помогаю со студенческими работами здесь

Найти определенный интеграл от функции методом прямоугольников
Найти определенный интеграл от функции на отрезке методом прямоугольников, разделив этот отрезок на 40 частей. Помогите пожалуйста,...

Вычислить определенный интеграл методом трапеций с заданной точностью
Непосредственно программа вычисления интеграла затруднений не вызывает, непонятно, как реализовать вычисление с точностью. Если приравнять...

Вычислить интеграл b a f (x)dx методом левых прямоугольников
Вычислить интеграл f (x)dx заданным методом, воспольвавшись критерием двойного пересчета с точностью 10–6: s1 = 0, s2 = 0,5,dS = 0,1,...

Определенный интеграл методом прямоугольников
\int_{1,2}^{0,2}(sin(2*x+0,5))\div ( 2+cos(x^2+0,6)) помогите сделать определенный интеграл методом прямоугольников :3

Вычислить определенный интеграл методом Симпсона и методом прямоугольников
Помогите плеаз!! методом Симпсона и методом прямоугольников!


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru