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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Dimanchik
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 6
31.03.2013, 21:06     Нахождение интеграла методом Ньютона-Котеса #1
Добрый вечер,Ребят, помогите пожалуйста написать код на С++ Нахождение интеграла методом Ньютона-Котеса
Для функции f(x)=(3*x^3)-(x^2)+3*x вычисляется определенный интеграл в заданный пределах от 2 до 5.Примерное число интервалов n...= 70.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 21:06     Нахождение интеграла методом Ньютона-Котеса
Посмотрите здесь:

C++ Програмно организовать метод решения интеграла методом Ньютона
Нахождение интеграла методом Симпсона C++
C++ Формулы Гауса и Ньютона-Котеса
C++ Вычисление определенного интеграла и решение уравнений методом Ньютона.
C++ Нахождение определенного интеграла методом Гаусса
C++ Нахождение интеграла методом Симпсона
Нахождение корней методом Ньютона C++
Нахождение комплексных корней методом Ньютона C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dimanchik
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 6
02.04.2013, 20:47  [ТС]     Нахождение интеграла методом Ньютона-Котеса #2
Функтор....с некоторыми методами вычисления интеграла....



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}
Yandex
Объявления
02.04.2013, 20:47     Нахождение интеграла методом Ньютона-Котеса
Ответ Создать тему
Опции темы

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