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

Нахождение интеграла методом Ньютона-Котеса - 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
/*
  * NewtonCotes.hpp
  *
  * 
  *  
  *  
  */
 
 #ifndef HPP_NEWTON_COTES
#define HPP_NEWTON_COTES
 
/*
 * Note: My tests indicate that gcc -O3 should inline this function into the specific algorithms below
 * resulting in identical code with the algorithms having the formula built in.
 */
template<typename T, typename F> T NewtonCotes(F f, T a, T b, unsigned int segments, unsigned int degree, unsigned int divisor, const T coeff[]){
 
    T seg_step = (b - a)/segments;
    T f_val = T(0);
 
    for(unsigned int s = 0; s < segments; ++s){
 
        T seg_a = a + seg_step*s;
        T seg_b = seg_a + seg_step;
        T f_subval = T(0);
 
        for(unsigned int i = 0; i < degree + 1; ++i){
            f_subval += coeff[i] * f(seg_a + i*(seg_b - seg_a)/degree);
        }
 
        f_val += ((seg_b - seg_a)/T(divisor)) * f_subval;
    }
 
    return f_val;
}
 
/*
 * Simpsons Rule
 */
template<typename T, typename F> T Simpsons(F f, T a, T b, unsigned int segments){
 
    const unsigned int degree = 2;
    const unsigned int divisor = 6;
    const T coeff[] = {1., 4., 1.};
 
    return NewtonCotes<T, F>(f, a, b, segments, degree, divisor, coeff);
}
 
/*
 * Simpsons 3/8 Rule
 */
template<typename T, typename F> T Simpsons3_8(F f, T a, T b, unsigned int segments){
 
    const unsigned int degree = 3;
    const unsigned int divisor = 8;
    const T coeff[] = {1., 3., 3., 1.};
 
    return NewtonCotes<T, F>(f, a, b, segments, degree, divisor, coeff);
}
 
/*
 * Booles Rule
 */
template<typename T, typename F> T Booles(F f, T a, T b, unsigned int segments){
 
    const unsigned int degree = 4;
    const unsigned int divisor = 90;
    const T coeff[] = {7., 32., 12., 32., 7.};
 
    return NewtonCotes<T, F>(f, a, b, segments, degree, divisor, coeff);
}
 
#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 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru