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

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

Войти
Регистрация
Восстановить пароль
 
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
#1

Метод Монте-Карло - C++

04.06.2014, 17:54. Просмотров 1099. Ответов 13
Метки нет (Все метки)

Помогите написать программу для вычисления определенного интеграла методом Монте-Карло.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gunslinger
случайный прохожий
1111 / 729 / 185
Регистрация: 20.07.2013
Сообщений: 1,995
04.06.2014, 18:08     Метод Монте-Карло #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
http://www.compmodel.ru/102/118/index.1.html
Рассчет определенного интеграла методом Монте-Карло.
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
05.06.2014, 17:40  [ТС]     Метод Монте-Карло #3
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
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include "windows.h"
int main()
{
    SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    double s=0, Integral, x;
    int Number_Of_Points, i, Lower_Limit, Upper_Limit;
    srand(time(NULL));
    printf("\nEnter the lower limit:\n");                      
    scanf_s("%d",&Lower_Limit);
    printf("Enter the upper limit:\n");                           
    scanf_s("%d",&Upper_Limit); 
    printf("Enter the number of points\n");                     
    scanf_s("%d",&Number_Of_Points);
    for (i=1; i<=Number_Of_Points; i++) {                   
        x=Lower_Limit+(Upper_Limit-Lower_Limit)*rand()/(1.0*RAND_MAX);
        s=s + x;
    }
    Integral=((Upper_Limit-Lower_Limit)*s)/Number_Of_Points ;
    printf("Integral = %f\n",Integral);
    _getch();
    return 0;
}
Вот, что получилось, помогите сделать выбор подинтегральной функции.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
05.06.2014, 17:49     Метод Монте-Карло #4
У Лукинова вычесление методом монте-калло очень хорошо прописано

Добавлено через 2 минуты
И rand замени он НЕ ПОДХОДИТ. Погрешность очень большая.
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
05.06.2014, 17:53  [ТС]     Метод Монте-Карло #5
Winorun, да нет, у меня все считает нормально, я на листочке решаю сам, погрешность где-то 0.01
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
05.06.2014, 18:00     Метод Монте-Карло #6
Сколько Number_Of_Points берешь? и 0.01 это много.

Добавлено через 1 минуту
У меня после 100000 расхождение пошли ответ вышел за предпологаемую точность.
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
05.06.2014, 18:02  [ТС]     Метод Монте-Карло #7
Winorun, ну меня это сейчас не интересует, нужно как-то замутить выбор функции, все никак не получается. Number_Of_Points примерно 100-200.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
05.06.2014, 18:18     Метод Монте-Карло #8
Я правильно понял ты хочешь чтобы пользователь задавал подинтергальную функцию?
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
05.06.2014, 18:32  [ТС]     Метод Монте-Карло #9
Winorun, хочу например создать так

***Меню***
1. sin(x)
2. cos(x) .... и так далее
пользователь вводит номер функции и вычисляется интеграл от нее, вот почему-то не получается у меня, можете помочь?
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
05.06.2014, 18:40     Метод Монте-Карло #10
Сылки на функцию
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
05.06.2014, 18:41  [ТС]     Метод Монте-Карло #11
Winorun, не понял??
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
05.06.2014, 18:43     Метод Монте-Карло #12
В Алгоритме вызываешь функцию по сылки, А при выборе меню приравневаешь сылку к функции.
Не сылки а указатель, Вот ссылка
http://lord-n.narod.ru/download/book..._C/05/0508.htm
karpinets2710
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 55
05.06.2014, 18:50  [ТС]     Метод Монте-Карло #13
Winorun, не до конца понял, можешь мой текст подредактировать хотя бы для двоих функций, остальные сам сделаю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 19:09     Метод Монте-Карло
Еще ссылки по теме:

Метод Монте-Карло. Объем сферы C++
Метод Монте-Карло (вероятность попадания при стрельбе) C++
C++ Метод Монте Карло (неправильные значения)
Метод Монте-Карло C++
C++ Метод Монте-Карло в вычислении площади многоугольника

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

Или воспользуйтесь поиском по форуму:
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
05.06.2014, 19:09     Метод Монте-Карло #14
Просто создаешь указатель на функцию. Допустим INT_FUN.
C++
1
bool (* INT_FUN)(int x);
Обьявляешь несколько фукций с одинаковым обьявлением.
C++
1
2
3
bool SIN(int x){/* тут код вычесляющий попал не попал*/};
bool COS(int x){/* тут код вычесляющий попал не попал*/};
...
В майне выводишь меню, считываешь пункт.
потом
C++
1
2
if(menu==1) INT_FUN=SIN;
if(menu==2) INT_FUN=COS;
Потом про SIN,COS и т.д. забываешь напрочь и считашь все через INT_FUN

Добавлено через 6 минут
Еще можешь привязать последним пунктом скрипт
Yandex
Объявления
05.06.2014, 19:09     Метод Монте-Карло
Ответ Создать тему
Опции темы

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