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

Методы вычисления интегралов - C++

Восстановить пароль Регистрация
 
repa4ek
18 / 18 / 1
Регистрация: 25.12.2011
Сообщений: 159
26.12.2011, 19:10     Методы вычисления интегралов #1
Уважаемые товарищи программисты, обращаюсь к вам уже не первый раз с надеждой что вы мне поможете. Мне нужно написать программу:
Массив (у0,у1, ... ,уn) представляет собой значения некоторой функции на
отрезке [a,b], причем a=y0,b=yn. Создать класс Integral, в котором
реализовано вычисление определенного интеграла методом прямоугольников,
методом трапеций и методом Симпсона.
Буду очень благодарен всем откликнувшимся, и если можно пожалуйста опишите подробно что и как делается Спасибо Вам огромное за то что вы делаете для нас юзеров С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 19:10     Методы вычисления интегралов
Посмотрите здесь:

C++ Методы вычисления определенного интеграла.
C++ Определить методы вычисления гипотенузы и площади прямоугольника
C++ Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел.
Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел. C++
C++ вычисление интегралов
C++ Расчет интегралов
Разработать методы вычисления длины отрезка по координатам вершин и периметра треугольника по длинам сторон C++
C++ Приближенное вычисление интегралов
C++ Библиотека для вычисления интегралов
C++ Создать описание класса, содержащего методы (функции) для вычисления и вывода на экран суммы четных чисел
Создать описание класса, содержащего методы (функции) для вычисления C++
Численные методы для вычисления определенного интеграла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
26.12.2011, 22:01     Методы вычисления интегралов #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
74
75
76
#include<iostream>
#include <string.h>
using namespace std; 
 
enum integralMethods {methRect, methTrap, methSymp};
class Integral
{
public:
    static double getIntegral(double (*fun)(double), double x1, double x2, integralMethods meth, int count = 1000)
    {
        if (count<2) return 0;
        double xx = x2 - x1, sum; 
        int c1 = count - 1; 
        switch (meth)
        {
            case methRect:
            sum = 0;
            for (int i = 0; i < c1; i++) sum += (*fun)(x1 + i * xx/c1);  
            break;
            case methTrap:
            sum = ((*fun)(x1) + (*fun)(x2))*0.5;
            for (int i = 1; i < c1; i++) sum += (*fun)(x1 + i * xx/c1);  
            break;
            case methSymp:
            sum = (*fun)(x1) + (*fun)(x2);
            c1 = (c1>>1)<<1;
            for (int i = 1; i < c1; i += 2) sum += 4 * (*fun)(x1 + i * xx/c1);  
            for (int i = 2; i < c1; i += 2) sum += 2 * (*fun)(x1 + i * xx/c1);  
            sum /= 3;
            break;
        }
        return sum * xx/c1;
    }
    static double getIntegral(double * array, double x1, double x2, integralMethods meth, int count)
    {
        if (count<2) return 0;
        double xx = x2 - x1, sum; 
        int c1 = count - 1;     
        switch (meth)
        {
            case methRect:
            sum = 0;
            for (int i = 0; i < c1; i++) sum += array[i];  
            break;
            case methTrap:
            sum = (array[0] + array[c1])*0.5;
            for (int i = 1; i < c1; i++) sum += array[i];  
            break;
            case methSymp:
            sum = array[0] + array[c1];
            for (int i = 1; i < c1; i += 2) sum += 4 * array[i];  
            for (int i = 2; i < c1; i += 2) sum += 2 * array[i];  
            sum /= 3;
            break;
        }
        return sum * xx/c1;
    }
};
 
static double parab(double x)
{
    return x*x;
}
 
int main()
{
    cout<<Integral::getIntegral(parab,0,4,methRect)<<endl;
    cout<<Integral::getIntegral(parab,0,4,methTrap)<<endl;
    
    int cnt = 1001;
    double * y = new double[cnt];
    double x1 = 0, x2 = 4;
    for (int i = 0; i<cnt; i++) y[i] = parab(x1 + i*(x2 - x1)/(cnt - 1));
    cout<<Integral::getIntegral(y,x1,x2,methRect,cnt)<<endl;
    return 0;
}
repa4ek
18 / 18 / 1
Регистрация: 25.12.2011
Сообщений: 159
27.12.2011, 11:54  [ТС]     Методы вычисления интегралов #3
Огромное спасибо, вы даже не представляете как помогли мне
Yandex
Объявления
27.12.2011, 11:54     Методы вычисления интегралов
Ответ Создать тему
Опции темы

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