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

Вычисление объема произвольного тела методом Монте-Карло - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
02.12.2012, 19:23     Вычисление объема произвольного тела методом Монте-Карло #1
Всем доброго время суток. Написать программу для вычисления методом Монте-Карло объема V тела, ограниченного поверхностями:
http://www.cyberforum.ru/cgi-bin/latex.cgi?z = {x}^{2} + {y}^{2}, y = {x}^{2},  y = 1 и http://www.cyberforum.ru/cgi-bin/latex.cgi?z = 0.
Сравнить с точным значением http://www.cyberforum.ru/cgi-bin/latex.cgi?V = \frac{88}{105}.
Насколько я правильно понял http://www.cyberforum.ru/cgi-bin/latex.cgi?z = {x}^{2} + {y}^{2} - это конус, http://www.cyberforum.ru/cgi-bin/latex.cgi?y = {x}^{2} - парабола, http://www.cyberforum.ru/cgi-bin/latex.cgi? y = 1 - прямая, проходящая через точку 1 и параллельная оси OX и http://www.cyberforum.ru/cgi-bin/latex.cgi?z = 0 - это плоскость XOY. Если не правильно, то поправьте. Для вычисления искомой фигуры мысленно все это нужно поместить в куб, вычислить объем куба умножить его на число точек попавших в куб поделить на общее число точек. Как это реализовать на C+++ ума не приложу?????? Чему должны равняться стороны куба ума не приложу?????? Помогите пожалуйста заранее огромное спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
05.12.2012, 18:53     Вычисление объема произвольного тела методом Монте-Карло #2
Цитата Сообщение от isaak Посмотреть сообщение
это конус
Точнее, два конуса, составленных острыми концами в точке O, центральной осью которых является ось OZ
Цитата Сообщение от isaak Посмотреть сообщение
парабола
это парабола, "протянутая" вдоль оси Z в плюс и минус бесконечность. Нечто вроде листа бумаги, изогнутого параболой.
Цитата Сообщение от isaak Посмотреть сообщение
прямая, проходящая через точку 1
Плоскость, параллельная XOZ и проходящая через точку y = 1
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
05.12.2012, 20:44     Вычисление объема произвольного тела методом Монте-Карло #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Точнее, два конуса, составленных острыми концами в точке O, центральной осью которых является ось OZ
вы действительно допускаете, что в уравнении
z = x ^ 2 + y ^ 2
z может быть отрицательным?
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
05.12.2012, 20:53     Вычисление объема произвольного тела методом Монте-Карло #4
Вопрос явно с подвохом...
Нет, не допускаю, оплошал со вторым конусом.
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
05.12.2012, 22:46  [ТС]     Вычисление объема произвольного тела методом Монте-Карло #5
Спасибо за ответ, а как здесь записан формулу для вычисления объема куба и чему равна сторона куба??????
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
06.12.2012, 18:47     Вычисление объема произвольного тела методом Монте-Карло #6
И не конус это, а параболоид... Почти как у инженера Гарина.
Надо взять рисовалку 3D-графиков и посмотреть, что это за фигуры и как пересекутся. Найти решения систем уравнений, составленных попарно, решением будут линии в пространстве. Найти габаритные ограничения тех линий.
Например, решением системы http://www.cyberforum.ru/cgi-bin/latex.cgi?y = x^2 и http://www.cyberforum.ru/cgi-bin/latex.cgi?y =1 будут параллельные OZ линии {x = 1, y = 1} и {x = -1, y = 1}. Снизу (если ось Y считаем вертикальной) фигура, ограниченная этими двумя уравнениями, "подпирается" плоскостью XOZ (её уравнение y = 0). Это даёт нам 4 ограничивающие плоскости: x = -1, x = 1, y = 0, y = 1. Добавляем другие уравнения, вводим новые габаритные ограничения.
kent_05
4 / 4 / 0
Регистрация: 18.12.2011
Сообщений: 59
09.12.2012, 06:22     Вычисление объема произвольного тела методом Монте-Карло #7
А мне требуется вычислить интеграл по данному методу, кто нибудь может мне помочь или скинуть FAQ для вычисления интеграла методом монте-карло, заранее огромное спасибо..
Интеграл: верхняя граница = 3, нижняя = 1, интегральная функция : x^2/(x^2+5*x-1)
-=ЮрА=-
Заблокирован
Автор FAQ
20.03.2013, 23:52     Вычисление объема произвольного тела методом Монте-Карло #8
isaak, в формулах поверхностей нет ошибки?

Скажем z = x2 - y2 потому как с плюсом я вообще не вижу пространства для тела
Миниатюры
Вычисление объема произвольного тела методом Монте-Карло  
-=ЮрА=-
Заблокирован
Автор FAQ
21.03.2013, 00:00     Вычисление объема произвольного тела методом Монте-Карло #9
Думаю так должно выглядеть уравнение первой поверхности
Миниатюры
Вычисление объема произвольного тела методом Монте-Карло  
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
21.03.2013, 10:23  [ТС]     Вычисление объема произвольного тела методом Монте-Карло #10
-=ЮрА= формула взята из книги, я не знаю может быть там и опечатки есть????? Спасибо за ответ.
Shor Kun
0 / 0 / 0
Регистрация: 24.09.2015
Сообщений: 7
13.02.2016, 19:07     Вычисление объема произвольного тела методом Монте-Карло #11
Тема конечно уже умерла, но мне её выкинуло в поиске по методу Монте-Карло, когда искал решение для сына, и у него оказалась точно такая же задача, поэтому приведу всё-таки решение думаю кому-нибудь пригодиться.

Для начала кому непонятен сам метод вот толковое описание метод Монте-Карло. Итак для начала надо определиться с фигурой, вопреки мнению предыдущих авторов формулы задающие поверхность правильные и вот какая получается фигура:
Вычисление объема произвольного тела методом Монте-Карло
Прошу прощения за оформление рисовал вручную, до Matlab-a herb не дошли
Соответственно ограничивающей фигурой будет параллелепипед ABCDA1B1C1D1 в него и будем пихать наши точки, соответственно его объём как нетрудно вычислить равен 4.
Ну вот собственно и сама программа:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main(int argc, char** argv) {
    const double n=10000.0;
    double x,y,z;
    int c=0;
    for(int i=0;i<n;i++)
    {
     x=rand()%2001/1000.00-1;
     y=rand()%1001/1000.00;
     z=rand()%2001/1000.00;
     if ((y>=x*x)&&(z<=x*x+y*y))  c=c+1;
}
cout << c << endl;
cout << c/n*4 << endl;
cout << 88/105.0 << endl;
 
    return 0;
}
Shor Kun
0 / 0 / 0
Регистрация: 24.09.2015
Сообщений: 7
13.02.2016, 19:20     Вычисление объема произвольного тела методом Монте-Карло #12
К предыдущем посту добавлю небольшой комментарий, вообще условия должно быть четыре по одному на каждую функцию, но поскольку функции z=0 и y=1 задают плоскости которые являются гранями нашего параллелепипеда, то соответственно точек за их пределами появиться не может таким образом необходимость в этих условиях отпадает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2016, 20:41     Вычисление объема произвольного тела методом Монте-Карло
Еще ссылки по теме:

Таблица умножения методом Монте-Карло C++
C++ Вычисление интеграла методом Монте-Карло
Определить площадь фигуры (методом Монте-Карло) C++

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

Или воспользуйтесь поиском по форуму:
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
13.02.2016, 20:41  [ТС]     Вычисление объема произвольного тела методом Монте-Карло #13
Shor Kun тема конечно уже стара, но вам все равно спасибо за бескорыстный ответ.
Yandex
Объявления
13.02.2016, 20:41     Вычисление объема произвольного тела методом Монте-Карло
Ответ Создать тему

Метки
Вычисление, методом, МонтеКарло, объема, произвольного, тела
Опции темы

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