Форум программистов, компьютерный форум, киберфорум
Наши страницы

Нахождение интеграла методом Ньютона-Котеса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сортировка строк http://www.cyberforum.ru/cpp-beginners/thread824226.html
Сортирую указатели в массиве строк, но программа крашится. Помогите пожалуйста найти ошибку. #include <iostream> #include <cstring> #include <cctype> void sortByAlphabet( char **a, int size ) {...
C++ Как правильно вызывать функцию strcmp()? При вызове strcmp() можно использовать пространство имен std::, а так же можно и без него обойтись: strcmp(s1, s2); std::strcmp(s1, s2); Как же все таки будет правильно? http://www.cyberforum.ru/cpp-beginners/thread824216.html
Подсчитать количество пар символов C++
Задача: Подсчитать количество пар букв в строке, вывести ввиде массива двумерного. Пример: "Здесь какая то строка, желательно считать из файла"; вывод: "аб"=0; .... "зд"=1; "де"=1; ..
C++ unable to match function definition to an existing declaration
возникают ошибки, природа которых не слишком понятна: 1)в специализации функции FindEl показывает ошибку с таким текстом:"unable to match function definition to an existing declaration"...
C++ Циклы: нарисовать прямоугольник из звездочек с диагоналями http://www.cyberforum.ru/cpp-beginners/thread824184.html
Помогите,пожалуйста!Нужно с помощью циклов нарисовать прямоугольник из звездочек с диагоналями.Спасибо!
C++ Передача масива в функцию Каким способом можно передать массив в функцию? подробнее

Показать сообщение отдельно
Dimanchik
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 6
02.04.2013, 20:47  [ТС]
Функтор....с некоторыми методами вычисления интеграла....



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
/*
 2 * NewtonCotes.hpp
 3 *
 4 * 
 5 *  
 6 *  
 7 */
 8
 9#ifndef HPP_NEWTON_COTES
10#define HPP_NEWTON_COTES
11
12/*
13 * Note: My tests indicate that gcc -O3 should inline this function into the specific algorithms below
14 * resulting in identical code with the algorithms having the formula built in.
15 */
16template<typename T, typename F> T NewtonCotes(F f, T a, T b, unsigned int segments, unsigned int degree, unsigned int divisor, const T coeff[]){
17
18    T seg_step = (b - a)/segments;
19    T f_val = T(0);
20
21    for(unsigned int s = 0; s < segments; ++s){
22
23        T seg_a = a + seg_step*s;
24        T seg_b = seg_a + seg_step;
25        T f_subval = T(0);
26
27        for(unsigned int i = 0; i < degree + 1; ++i){
28            f_subval += coeff[i] * f(seg_a + i*(seg_b - seg_a)/degree);
29        }
30
31        f_val += ((seg_b - seg_a)/T(divisor)) * f_subval;
32    }
33
34    return f_val;
35}
36
37/*
38 * Simpsons Rule
39 */
40template<typename T, typename F> T Simpsons(F f, T a, T b, unsigned int segments){
41
42    const unsigned int degree = 2;
43    const unsigned int divisor = 6;
44    const T coeff[] = {1., 4., 1.};
45
46    return NewtonCotes<T, F>(f, a, b, segments, degree, divisor, coeff);
47}
48
49/*
50 * Simpsons 3/8 Rule
51 */
52template<typename T, typename F> T Simpsons3_8(F f, T a, T b, unsigned int segments){
53
54    const unsigned int degree = 3;
55    const unsigned int divisor = 8;
56    const T coeff[] = {1., 3., 3., 1.};
57
58    return NewtonCotes<T, F>(f, a, b, segments, degree, divisor, coeff);
59}
60
61/*
62 * Booles Rule
63 */
64template<typename T, typename F> T Booles(F f, T a, T b, unsigned int segments){
65
66    const unsigned int degree = 4;
67    const unsigned int divisor = 90;
68    const T coeff[] = {7., 32., 12., 32., 7.};
69
70    return NewtonCotes<T, F>(f, a, b, segments, degree, divisor, coeff);
71}
72
73#endif // HPP_NEWTON_COTES
Добавлено через 2 минуты
Полный рабочий пример с функтором....
для функции Ф(х)=sin(t)*sin(t) + cos(t)*cos(t)

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
#include "NewtonCotes.hpp"
 2#include <iostream>
 3#include <cmath>
 4
 5#define Pi 3.14159265
 6
 7using namespace std;
 8
 9struct ConstTest{
10    float operator()(float t) { return 1;}
11};
12
13struct PythagorianTest{
14    float operator()(float t) {
15        return sin(t)*sin(t) + cos(t)*cos(t);
16    }
17};
18
19int main(){
20    cout<<"Simpsons: "<<Simpsons<float, PythagorianTest>(PythagorianTest(), 0, Pi, 10)<<endl;
21    cout<<"Simpsons3_8: "<<Simpsons3_8<float, PythagorianTest>(PythagorianTest(), 0, Pi, 10)<<endl;
22    cout<<"Booles: "<<Booles<float, PythagorianTest>(PythagorianTest(), 0, Pi, 10)<<endl;
23    return 0;
24}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru