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

Вычисление двойного интеграла методом ячеек - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.62
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
14.04.2011, 16:45     Вычисление двойного интеграла методом ячеек #1
Всех приветствую.Ситуация тяжелая(для меня по крайней мере), помогите пожалуйста с решением двойного интеграла, методом ячеек, просто здесь мои мат. познания заканчиваются.Если у кого-то есть время и желание, помогите пожалуйста, буду очень признателен.Если кто-то напишет на С, а не на С++, то ничего, с программированием нормально все у меня, перевести смогу. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
14.04.2011, 16:48     Вычисление двойного интеграла методом ячеек #2
А где интеграл?
IrineK
Заблокирован
14.04.2011, 17:02     Вычисление двойного интеграла методом ячеек #3
Тогда на общий вопрос - общий ответ:
Миниатюры
Вычисление двойного интеграла методом ячеек  
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
14.04.2011, 22:08  [ТС]     Вычисление двойного интеграла методом ячеек #4
Понимаете, мне прожка нужна на С++ которая будет вычислять любой подставленный интеграл, подставить в подинтегральную функцию я то смогу, а вот прогу не могу написать, не понимаю этот метод, или блок схема мне тоже подойдет,спасибо.
IrineK
Заблокирован
15.04.2011, 02:55     Вычисление двойного интеграла методом ячеек #5
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
#include <iostream>
#define m 1000  //кво разбиений по Х
#define n 1000  //кво разбиений по У
 
double f(double x, double y)
{   return x*x+x*y-y*y;     //наша функция 
}
 
int main()
{
    double a = 0.0, b = 5.0, c = 0.0, d = 8.0; //пределы интегрирования по х(a,b), y(c,d)
    double integral = 0.0;  //начальное значение интеграла
    int i,j;
 
    double dx = (b-a)/m;
    double dy = (d-c)/n;
    double x0,y0,x1,y1;
 
    for(i=1, x0=a; i<m+1; i++)
    {   x1 = x0+dx;
        for(j=1, y0=c; j<n+1; j++)
        {   y1 = y0+dy;
            integral += f((x0+x1)/2.,(y0+y1)/2.); //накопление интегральной суммы
            y0 = y1;
        }
        x0 = x1;
    }
 
    integral *= dx*dy;
    std::cout<<"\nI = "<<integral<<"\n"; //результат
 
    std::cin.get();
    return 0;
}

Считает интеграл от x^2+x*y-y^2 в пределах по Х от 0 до 5, по У от 0 до 8.
Прямое интегрирование дает -120.
При очень мелком разбиении ~ 1000 получаем практически точный ответ -120.
SanSanch
Сообщений: n/a
27.05.2013, 09:17     Вычисление двойного интеграла методом ячеек #6
IrineK, не знаю, где у Вас ошибка - на первый взгляд всё написано верно. Но результат выдаёт неправильный (может и у меня руки кривые, не обессудьте). Вот мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
double methodCell(double xa, double xb, int n, double ya, double yb, int m) {
    double xh((xb-xa)/n);
    double yh((yb-ya)/m);
    double s(0);
    for (double xi = xa + xh/2; xi < xb; xi += xh) {
        for (double yi = ya + yh/2; yi < yb; yi += yh) {
            s += f(xi, yi);
        }
    }
    return xh * yh * s;
}
Yandex
Объявления
27.05.2013, 09:17     Вычисление двойного интеграла методом ячеек
Ответ Создать тему
Опции темы

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