Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 20:11     Метод трапеций и прямоугольников #1
Выручайте.Если до понедельника не сделаю-не поставит препод зачет.Необходимо написать программу на 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))))-трапеции
С меня огромное спасибо и сотня на счет)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 20:11     Метод трапеций и прямоугольников
Посмотрите здесь:

Интеграл. Метод трапеций C++
C++ Метод трапеций
C++ С++ Метод прямоугольников
Интегрирование методом прямоугольников и трапеций C++
метод прямоугольников C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
22.12.2012, 20:12     Метод трапеций и прямоугольников #2
тебе в раздел с#
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 20:16  [ТС]     Метод трапеций и прямоугольников #3
C#/C++ язык реализации не имеет для меня значения.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 20:22     Метод трапеций и прямоугольников #4
ну во 1 . откуда формулы такие, это не классические формулы, во 2 интегратор этоже всего лишь цикл, вы что за год не научились цикл программировать? да и интересно С++ / C# похожие, но все таки сразу им обоим не обучают
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 20:24  [ТС]     Метод трапеций и прямоугольников #5
Цитата Сообщение от Nixy Посмотреть сообщение
ну во 1 . откуда формулы такие, это не классические формулы, во 2 интегратор этоже всего лишь цикл, вы что за год не научились цикл программировать? да и интересно С++ / C# похожие, но все таки сразу им обоим не обучают
Формулы уже готовые.Достаточно по ним сделать.Предмет выш.мат.Я обучаюсь далеко не на программиста,а на наноинженера. И программирования у нас тупо не было. Реализация данной программы-прихоть препода.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 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");
}
вообщем вот код , но вот его адекватность, точнее адекватность формул вызывает сомнение, точно ли это интегратор, и точно ли так задание стоит
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 шагов и сравнить с результатами ручного расчета.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 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");
}
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х методов.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 21:36     Метод трапеций и прямоугольников #10
ну смотри там есть функций myFunction туда вводится вырожение под функцией, дальше есть функция getStep, на основании а-начало интегрирования и в-конец интегрирования, и itterationCount - колличесвтои итераций расчитывается шаг, ну могу добавить функционал промежуточного выводаесли необходимо
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 21:39  [ТС]     Метод трапеций и прямоугольников #11
Цитата Сообщение от Nixy Посмотреть сообщение
ну смотри там есть функций myFunction туда вводится вырожение под функцией, дальше есть функция getStep, на основании а-начало интегрирования и в-конец интегрирования, и itterationCount - колличесвтои итераций расчитывается шаг, ну могу добавить функционал промежуточного выводаесли необходимо
Было бы хорошо.А как мне их разбить на 4 программы?Что бы куча информации небыла в одной.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 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)
и по одному из методов
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 22:50  [ТС]     Метод трапеций и прямоугольников #13
Все вроде работает.Но почему то итерации в конце выводит не сумму,а результат последней итерации
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 22:58     Метод трапеций и прямоугольников #14
так иттерация и есть сумма, или тебе нужны значения функции в i-ой иттерации
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.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 23:18     Метод трапеций и прямоугольников #16
не очень понимаю чего ты хочешь...
Shadowslayer
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 9
22.12.2012, 23:19  [ТС]     Метод трапеций и прямоугольников #17
Цитата Сообщение от Nixy Посмотреть сообщение
не очень понимаю чего ты хочешь...
Вот презентация.В ней все как надо.И мне нужно так же сделать только в программе.
Вложения
Тип файла: xlsx IDZ_5_vor.xlsx (21.7 Кб, 6 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 23:22     Метод трапеций и прямоугольников
Еще ссылки по теме:

Вычисление определенного интеграла функции y(x) численными методами прямоугольников и трапеций C++
C++ Численное интегрирование (метод трапеций). Как гарантировать нужную точность?
C++ Метод трапеций

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

Или воспользуйтесь поиском по форуму:
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 23:22     Метод трапеций и прямоугольников #18
можешь сам доделать, внутри каждой интегральной функции вместо sum в
C++
1
showIteration(count++,sum);
подставь то что суммируется с sum внутри функции( все что правее += )
Yandex
Объявления
22.12.2012, 23:22     Метод трапеций и прямоугольников
Ответ Создать тему
Опции темы

Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru