Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/37: Рейтинг темы: голосов - 37, средняя оценка - 4.62
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
#1

Метод трапеций и прямоугольников

22.12.2012, 20:11. Просмотров 6819. Ответов 17
Метки нет (Все метки)

Выручайте.Если до понедельника не сделаю-не поставит препод зачет.Необходимо написать программу на c++/с#.Что бы в ней указать значение i-количество шагов,а далее программа по 4-м формулам рассчитывала значение.Вот эти формулы:
=0,4СУММ((36((1+i0,4)-1)/(5+(54(1+i0,4)))))-левые
=2/15СУММ((36((1+i2/15)-1)/(5+(54(1+i2/15)))))-правые
=0,4СУММ((36((1+i0,4+0,4/2)-1)/(5+(54(1+i0,4+0,4/2)))))-центральные
=(36((1+i1/15)-1)/(5+(54(1+i*1/15))))-трапеции
С меня огромное спасибо и сотня на счет)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 20:11
Ответы с готовыми решениями:

Интегрирование методом прямоугольников и трапеций
Такой вопрос, писал программу, которая вычисляет определенный интеграл методом...

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

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

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

Метод трапеций
Добрый день. Кто- то может составить программу вычисления интеграла полинома...

17
Дмитрий 93
74 / 59 / 24
Регистрация: 03.06.2011
Сообщений: 309
22.12.2012, 20:12 #2
тебе в раздел с#
0
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 20:16  [ТС] #3
C#/C++ язык реализации не имеет для меня значения.
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 20:22 #4
ну во 1 . откуда формулы такие, это не классические формулы, во 2 интегратор этоже всего лишь цикл, вы что за год не научились цикл программировать? да и интересно С++ / C# похожие, но все таки сразу им обоим не обучают
0
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 20:24  [ТС] #5
Цитата Сообщение от Nixy Посмотреть сообщение
ну во 1 . откуда формулы такие, это не классические формулы, во 2 интегратор этоже всего лишь цикл, вы что за год не научились цикл программировать? да и интересно С++ / C# похожие, но все таки сразу им обоим не обучают
Формулы уже готовые.Достаточно по ним сделать.Предмет выш.мат.Я обучаюсь далеко не на программиста,а на наноинженера. И программирования у нас тупо не было. Реализация данной программы-прихоть препода.
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 20:35 #6
ну шас помогу

Добавлено через 9 минут
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
#include <iostream>
using namespace std;
 
 
double leftSide(double a,double b,double h){  //левые
   double sum = 0;
   for (double i = a; i < b; i+=h) {
     sum+=36*((1+i*0.4)-1)/(5+(54*(1+i*0.4)));
   }
   return 0.4*sum;
}
 
double rightSide(double a,double b,double h){ //правые
   double sum = 0;
   for (double i = a; i < b; i+=h) {
     sum+=36*((1+i*2./15)-1)/(5+(54*(1+i*2./15)));
   }
   return 2./15*sum;
}
 
double central(double a,double b,double h){   //центральные
   double sum = 0;
   for (double i = a; i < b; i+=h) {
     sum+=36*((1+i*0.4+0.4/2)-1)/(5+(54*(1+i*0.4+0.4/2)));
   }
   return 0.4*sum;
}
 
double trapezoidal(double a,double b,double h){  //трапеции
   double sum = 0;
   for (double i = a; i < b; i+=h) {
     sum+=36*((1+i*1./15)-1)/(5+(54*(1+i*1./15)));
   }
   return sum;
}
 
int main(){
 double a = 0;
 double b = 1;
 double h = 0.5;
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) << endl;
 system("pause");
}
вообщем вот код , но вот его адекватность, точнее адекватность формул вызывает сомнение, точно ли это интегратор, и точно ли так задание стоит
1
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 20:54  [ТС] #7
Задание в оригинале такое:
Интеграл
http://www.cyberforum.ru/cgi-bin/latex.cgi?\int_{1}^{5} (2*18*x-1/5+3*18*x) dx
Необходимо посчитать его и посчитать методами прямоугольников и трапеций.С помощью 10 шагов итераций и 30.После вывести сумму 10 шагов и 30 шагов и сравнить с результатами ручного расчета.
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 21:27 #8
вот это уже другое дело щас поправлю

Добавлено через 15 минут
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
#include <iostream>
using namespace std;
 
double getStep(double a,double b,int itterationCount){
    return (fabs(a)+fabs(b))/itterationCount;
}
 
double myFunction(double x){
    return 60*x+0.2;
}
 
double leftSide(double a,double b,double h){  //левые
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
     sum+=myFunction(i)*h;
   }
   return sum;
}
 
double rightSide(double a,double b,double h){ //правые
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
      sum+=myFunction(i+h)*h;
   }
   return sum;
}
 
double central(double a,double b,double h){   //центральные
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
      sum+=myFunction(i+h/2)*h;
   }
   return sum;
}
 
double trapezoidal(double a,double b,double h){  //трапеции
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
     sum+=(myFunction(i)+myFunction(i+h))*h/2;
   }
   return sum;
}
 
int main(){
 double a = 1;
 double b = 5;
 double h = getStep(a,b,15);
 
 cout<< "15 itterations" <<endl;
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) <<endl<< endl;
 
 cout<< "30 itterations" <<endl;
 h = getStep(a,b,30);
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) << endl<< endl;
 
 system("pause");
}
2
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 21:33  [ТС] #9
Цитата Сообщение от Nixy Посмотреть сообщение
вот это уже другое дело щас поправлю

Добавлено через 15 минут
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
#include <iostream>
using namespace std;
 
double getStep(double a,double b,int itterationCount){
    return (fabs(a)+fabs(b))/itterationCount;
}
 
double myFunction(double x){
    return 60*x+0.2;
}
 
double leftSide(double a,double b,double h){  //левые
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
     sum+=myFunction(i)*h;
   }
   return sum;
}
 
double rightSide(double a,double b,double h){ //правые
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
      sum+=myFunction(i+h)*h;
   }
   return sum;
}
 
double central(double a,double b,double h){   //центральные
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
      sum+=myFunction(i+h/2)*h;
   }
   return sum;
}
 
double trapezoidal(double a,double b,double h){  //трапеции
   double sum = 0;
   for (double i = a; i < b+h; i+=h) {
     sum+=(myFunction(i)+myFunction(i+h))*h/2;
   }
   return sum;
}
 
int main(){
 double a = 1;
 double b = 5;
 double h = getStep(a,b,15);
 
 cout<< "15 itterations" <<endl;
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) <<endl<< endl;
 
 cout<< "30 itterations" <<endl;
 h = getStep(a,b,30);
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) << endl<< endl;
 
 system("pause");
}
А как теперь мой интеграл туда забить?И реально ли это реализовать что бы вначале ввести кол-во итераций.Например программа:
Введите кол-во шагов итераций:Вводишь 10
И она выводит результаты всех 10 шагов.И в конце суммирует их.И так по каждому из 4х методов.
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 21:36 #10
ну смотри там есть функций myFunction туда вводится вырожение под функцией, дальше есть функция getStep, на основании а-начало интегрирования и в-конец интегрирования, и itterationCount - колличесвтои итераций расчитывается шаг, ну могу добавить функционал промежуточного выводаесли необходимо
0
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 21:39  [ТС] #11
Цитата Сообщение от Nixy Посмотреть сообщение
ну смотри там есть функций myFunction туда вводится вырожение под функцией, дальше есть функция getStep, на основании а-начало интегрирования и в-конец интегрирования, и itterationCount - колличесвтои итераций расчитывается шаг, ну могу добавить функционал промежуточного выводаесли необходимо
Было бы хорошо.А как мне их разбить на 4 программы?Что бы куча информации небыла в одной.
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 21:49 #12
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
#include <iostream>
using namespace std;
 
void showIteration(int itteration,double result){
    cout<<"Itteration " << itteration << " = " << result <<endl;
}
 
double getStep(double a,double b,int itterationCount){
    return (fabs(b)-fabs(a))/itterationCount;
}
 
double myFunction(double x){
    return 60*x+0.2;
}
 
double leftSide(double a,double b,double h){  //левые
   double sum = 0;
   int count = 0;
   for (double i = a; i < b-h/2; i+=h) {
     sum+=myFunction(i)*h;
     showIteration(count++,sum);
   }
   return sum;
}
 
double rightSide(double a,double b,double h){ //правые
   double sum = 0;
   int count = 0;
   for (double i = a; i < b-h/2; i+=h) {
      sum+=myFunction(i+h)*h;
      showIteration(count++,sum);
   }
   return sum;
}
 
double central(double a,double b,double h){   //центральные
   double sum = 0;
   int count = 0;
   for (double i = a; i < b-h/2; i+=h) {
      sum+=myFunction(i+h/2)*h;
      showIteration(count++,sum);
   }
   return sum;
}
 
double trapezoidal(double a,double b,double h){  //трапеции
   double sum = 0;
   int count = 0;
   for (double i = a; i < b-h/2; i+=h) {
     sum+=(myFunction(i)+myFunction(i+h))*h/2;
     showIteration(count++,sum);
   }
   return sum;
}
 
int main(){
 double a = 1;
 double b = 5;
 double h = getStep(a,b,15);
 
 cout<< "15 itterations" <<endl;
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) <<endl<< endl;
 
 cout<< "30 itterations" <<endl;
 h = getStep(a,b,30);
 cout<< leftSide(a,b,h) << endl;
 cout<< rightSide(a,b,h) << endl;
 cout<< central(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) << endl<< endl;
 
 system("pause");
}
Добавлено через 23 секунды
я немного интеграторы поменял, чтоб более точно выводили результат

Добавлено через 2 минуты
в каждой программе точно должно быть
C++
1
2
3
4
5
void showIteration(int itteration,double result)
 
double getStep(double a,double b,int itterationCount)
 
double myFunction(double x)
и по одному из методов
0
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 22:50  [ТС] #13
Все вроде работает.Но почему то итерации в конце выводит не сумму,а результат последней итерации
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 22:58 #14
так иттерация и есть сумма, или тебе нужны значения функции в i-ой иттерации
0
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 23:05  [ТС] #15
Цитата Сообщение от Nixy Посмотреть сообщение
так иттерация и есть сумма, или тебе нужны значения функции в i-ой иттерации
мне нужно что бы считалась функция i=1 i=2 i=3
что бы программа тупо заменял i на числа от 1 до 10.
0
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 23:18 #16
не очень понимаю чего ты хочешь...
0
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 23:19  [ТС] #17
Цитата Сообщение от Nixy Посмотреть сообщение
не очень понимаю чего ты хочешь...
Вот презентация.В ней все как надо.И мне нужно так же сделать только в программе.
0
Вложения
Тип файла: xlsx IDZ_5_vor.xlsx (21.7 Кб, 9 просмотров)
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 23:22 #18
можешь сам доделать, внутри каждой интегральной функции вместо sum в
C++
1
showIteration(count++,sum);
подставь то что суммируется с sum внутри функции( все что правее += )
0
22.12.2012, 23:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 23:22

Метод трапеций
Здравствуйте! Задача состоит в нахождении интреграла методом трапеций. В...

Интеграл. Метод трапеций
Товарищи, прошу у Вас помощи. Необходимо решить интервал методом трапеции,...

Метод прямоугольников
Для построения прямоугольника использовать правый конец отрезка. y=sqrt(x),...


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

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

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