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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nuclear_Razor
49 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 104
Записей в блоге: 1
#1

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

08.10.2012, 13:04. Просмотров 984. Ответов 0
Метки нет (Все метки)

Всем привет, недавно столкнулся с проблемой вычисления двойных интегралов. Узнал о методе Монте-Карло, который много где используется, в том числе и для вычисления интегралов. Но, единственный вариант его использования нашел на этом форуме, и то алгоритм был как-то не до конца рабочий.
Если использовать обычный метод прямоугольников, то должно что-то получится вроде: "цикл в цикле", но у меня с этим совсем все туго. В западных источниках про этот метод мало чего вообще сказано, я так понял в плане реализации их на C++ у них там все туго. Использование всяких библиотек вроде aglib прошу не предлагать, мне интересна сама реализация.

Есть такой кусок года:

C++
1
2
3
4
5
6
7
8
9
        double dx = ( xk - x0 ) / n;
    double sum = 0.0;
    args[ var ] = x0;
 
    for ( int i = 0; i < n; i++ ) 
    {
        sum += dx * e->evaluate( args );
        args[ var ] += dx;
    }
Вычисляет все правильно для определенного интеграла, используются такие вещи:

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
        Parser p;
    std::string expr;
    std::string var;
        
        //  Независимая переменная, по которой ведется интегрирование
    std::cout << "\nВведите аргумент, по которому будет идти интегрирование: ";
    std::cin >> var;
 
    std::cout << "\nВведите нижний предел интегрирования: "; std::cin >> x0;
    std::cout << "\nВведите верхний предел интегрирования: "; std::cin >> xk;
    
 
    //  Парсим выражение и получаем его дерево
    Tree* e = p.parse( expr );
     
    //  Ассоциативный массив(таблица) для списка неизвестных в выражении
    SymbolTable args;
    //  Получаем список неизвестных(идентификаторов) из выражения
    getIdentifiers( e, args );
//  Предлагаем ввести значение каждого параметра кроме независимой переменной
    for ( SymbolTable::iterator it = args.begin(); it != args.end(); ++it )
    {
        //  Пропускаем независимую переменную
        if ( !it->first.compare( var ) )
        {
            continue;
        }
        //  Запрашиваем значение
        std::cout << it->first << " = ";
        std::cin >> it->second;
    }
Все это нужно для парсинга, но главный вопрос - в составлении правильного алгоритма. Насчет ввода пределов интегрирования вопрос тоже нет, так как можно задать либо число либо функцию, но вот как работать с этим...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2012, 13:04     Метод Монте-Карло для вычисления двойных интегралов
Посмотрите здесь:

метод Монте-Карло - C++
Трехмерное тело образовано объединением нескольких сфер произвольного размера и взаимного расположения. Найти объем этого тела, используя...

метод Монте-Карло - C++
всем привет, у меня вопрос по методу Монте - Карло, у меня есть код, #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt; ...

Метод монте Карло - C++
Здравствуйте! Посмотрите, пожалуйста, почему программа неправильно считает определенный интеграл методом Монте Карло. Считаю интеграл от -3...

Метод Монте-Карло - C++
Помогите написать программу для вычисления определенного интеграла методом Монте-Карло.

Метод Монте-Карло - C++
Помогите написать программу на С++. Из множества 1, 2, ..., n, случайным образом извлекается с возвращением по одному числу S раз. Пусть...

Метод Монте-Карло - C++
как мне перевести этот код на с++..... помогите пожалуста(( program MonteKarlo; uses crt; Label l1,l2; var ...

вроде метод монте карло - C++
распишите пожалуйста что делает это программа?? int i,a,b,n,k,c,d,e,f; double s1,s,x,y,z; int _tmain(int argc, _TCHAR* argv) { ...

Метод Монте-Карло. Объем сферы - C++
Задан радиус сферы и количество итераций. Найти объём сферы методом Монте-Карло и определить точность

Метод Монте Карло (неправильные значения) - C++
Пишу программу для подсчета определенного интеграла 3мя способами: прямоугольников, трапеций и Монте Карло. Первые 2 реализованы правильно,...

Процедура вычисления кратного интеграла методом Монте-Карло - C++
Создать функцию для вычисления кратных интегралов методом Монте Карло. Помогите написать рабочий код. Укажите на ошибки. #include...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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