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

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

Восстановить пароль Регистрация
 
Nimert
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 13
06.11.2013, 00:50     Интегрирование методом прямоугольников и трапеций #1
Такой вопрос, писал программу, которая вычисляет определенный интеграл методом трапеций и прямоугольников. Получил ответ, но нужно посчитать, сколько раз выполняется цикл суммирования в программе. Кто нибудь может помочь с этим? Я так понимаю, что они(количество суммирований в каждом способе) не намного будут отличаться.. Вообщем если кто может помогите, буду ОЧЕНЬ благодарен)

Код прилагается (свой старый стер, он корявей, поэтому прилагаю код покруче)

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
#include <iostream>
#include <math.h>
using namespace std;
 
void showIteration(int itteration,double result){
    cout<<"Itteration " << itteration << " = " << result <<endl;
}
 
 
double myFunction(double x){
    return exp(x)+cos(x);
}
 
 
double pryamugolnik(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 = 0;
 double b = 1;
 double h = 0.1;
 
 cout<< pryamugolnik(a,b,h) << endl;
 cout<< trapezoidal(a,b,h) <<endl<< endl;
 
 system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
06.11.2013, 00:53     Интегрирование методом прямоугольников и трапеций #2
Nimert, передавайте в параметрах ссылку на переменную из функции main. И после вычисления интегралов сравните эти переменные. А в этой переменной считайте кол-во итераций
Nimert
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 13
06.11.2013, 01:03  [ТС]     Интегрирование методом прямоугольников и трапеций #3
Это у меня как то и не получается, все таки только начал программировать.. Можете показать как?
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
06.11.2013, 01:08     Интегрирование методом прямоугольников и трапеций #4
Nimert,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void ttt (int &a)
{
    a++;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int x = 5;
    cout << x << endl;
    ttt(x);
    cout << x << endl;
    system("pause");
    return 0;
}
типа так) на выводе видно, что да как
Nimert
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 13
06.11.2013, 01:12  [ТС]     Интегрирование методом прямоугольников и трапеций #5
Честно говоря это мало помогло-я думал о том же, только проблема в том что я не знаю как это в программу запихнуть. Можете тогда написать эту процедуру в моей программе что ли..? У меня не выходит..
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
06.11.2013, 01:15     Интегрирование методом прямоугольников и трапеций #6
Nimert, ну вроде вот так
C++
1
2
3
4
5
6
7
8
9
10
double trapezoidal(double a,double b,double h, int &t){  //трапеции
   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);
     t++;
   }
   return sum;
}
Nimert
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 13
06.11.2013, 01:22  [ТС]     Интегрирование методом прямоугольников и трапеций #7
Если t-кол-во суммированний, то как его объявить? И как вывести в конце, там же return выводит только sum.. Вообщем что было то и есть, и я не очень понимаю вообще засчет чего там должны быть разное кол-во суммированний..

Не могли бы вы все таки написать эту функцию в изначальной программе так, чтоб она работала?
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
06.11.2013, 01:26     Интегрирование методом прямоугольников и трапеций #8
Nimert, ее не нужно выводить через return. Вы же видели, что в моем примере функция, изменяющая значение переменной, не возвращала никаких значений. Вы объявляете в main 2 переменные (по одной на каждый тип вычислений) и передаете их в функцию по той же схеме, что и в моем примере. После завершения функций у вас будет 2 переменных с числом итераций
Nimert
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 13
06.11.2013, 01:39  [ТС]     Интегрирование методом прямоугольников и трапеций #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
47
48
49
50
#include <iostream>
#include <math.h>
using namespace std;
 
void showIteration(int itteration,double result){
    cout<<"Itteration " << itteration << " = " << result <<endl;
}
 
 
double myFunction(double x){
    return exp(x)+cos(x);
}
 
 
double pryamugolnik(double a,double b,double h, double &s){   //центральные
   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);
      s++;
   }
   return sum;
}
 
double trapezoidal(double a,double b,double h, double &t){  //трапеции
   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);
     t++;
   }
   return sum;
}
 
int main(){
    double t=0;
    double s=0;
 double a = 0;
 double b = 1;
 double h = 0.1;
 
 cout<< pryamugolnik(a,b,h, s) << endl;
 cout<< s << endl;
 cout<< trapezoidal(a,b,h, t) <<endl<< endl;
  cout<< t << endl;
 
 system("pause");
}
Вопрос, который я не могу понять: чем кол-во суммирований этих методов отличается друг от друга?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 01:45     Интегрирование методом прямоугольников и трапеций
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
06.11.2013, 01:45     Интегрирование методом прямоугольников и трапеций #10
Nimert, это уже к математикам наверно) И можно было количество итераций сделать не double, а int. Количество итераций же не бывает дробным)
Yandex
Объявления
06.11.2013, 01:45     Интегрирование методом прямоугольников и трапеций
Ответ Создать тему
Опции темы

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