|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
|
Вычисление площади методом Монте-Карло11.11.2012, 16:05. Показов 39268. Ответов 28
Метки нет (Все метки)
Всем доброго время суток. Написать программу для вычисления методом Монте-Карло площади S тела, ограниченного кривыми x*y = a и
![]() Заранее огромное спасибо.
0
|
|
| 11.11.2012, 16:05 | |
|
Ответы с готовыми решениями:
28
Определение площади заштрихованной фигуры методом Монте-Карло
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 12.11.2012, 18:46 | |
|
В чём проблемы-то? Неясен сам принцип Монте-Карло, или логарифмы считать не получается?
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
|
| 12.11.2012, 23:12 [ТС] | |
|
Суть метода начал понимать: Фигура лежит внутри некоторой области известной площади So. Случайным образом кидаем n точек в эту область. Подсчитываем количество m точек попавших внутрь фигуры (внутрь хотя бы одного прямоугольника). Площадь искомой фигуры Sf = So * m / n. Чем больше точек, тем точнее результат. Но как это реализовать программно тем более на C++ ума не приложу????
![]() ![]() Добавлено через 4 минуты Вот что еще удалось найти, но это только сухая теория: "Предположим, что нам нужно вычислить площадь плоской фигуры S. Это может быть совсем произвольная фигура с криволинейной границей, заданная графически или аналитически, связная или состоящая из нескольких кусков. Пусть это будет фигура, изображенная на рис. 1, и предположим, что она вся расположена внутри единичного квадрата. Выберем в квадрате N случайных точек. Обозначим через N' число точек, попавших при этом внутрь S. Геометрически очевидно, что площадь S приближенно равна отношению N'/N. Чем больше будет N, тем больше будет точность этой оценки. Например,выбрано N=40 точек. Из них N'=12 точек оказались внутри фигуры S. Отношение N'/N=12/40=0,30, в то время как истинная площадь S равна 0,35). Две особенности метода Монте-Карло. Первая особенность метода — простая структура вычислительного алгоритма. Как правило, составляется программа для осуществления одного случайного испытания (в примере надо выбрать случайную точку в квадрате и проверить, принадлежит ли она S). Затем это испытание повторяется N раз, причем каждый опыт не зависит от всех остальных, и результаты всех опытов усредняются. Поэтому иногда метод Монте-Карло называют методом статистических испытаний. Вторая особенность метода: ошибка вычислений, как правило пропорциональна , где D – некоторая постоянная, a N – число испытаний. Из этой формулы видно, что для того, чтобы уменьшить ошибку в 10 раз (иначе говоря, чтобы получить в ответе еще один верный десятичный знак), нужно увеличить N (то есть объем работы) в 100 раз. Ясно, что добиться высокой точности на таком пути невозможно. Поэтому обычно говорят, что метод Монте-Карло особенно эффективен при решении тех задач, в которых результат нужен с небольшой точностью (5-10%)." Добавлено через 50 минут Гипербола - ![]() Заранее огромное спасибо.
0
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 13.11.2012, 19:06 | |
|
Проверка осуществляется очень просто. Очевидно, что прямая будет проходить над гиперболой. Слева и снизу наша фигура ограничена осями X и Y. Верхнюю и правую планку возьмём по корням, численно они совпадут, потому что фигура симметрична относительно линии в 45 градусов. Ибо и прямая, и гипербола относительно этой линии симметричны. Итак, мы получим ограничивающую площадь - квадрат со стороной b (эту величину, надеюсь, вычислить сумеешь), диапазоны x и y - от 0 до b. Начинаешь генерировать пары координат в этом диапазоне. Точка находится внутри фигуры, если она выше гиперболы, то есть
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
||||||
| 13.11.2012, 22:28 [ТС] | ||||||
|
Спасибо за пояснения попробовал сам, кое-что написать, но получается полный бред с границами по x и y и с вычислением площади:
![]() . Заранее огромное спасибо.
0
|
||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 14.11.2012, 18:39 | |
|
Замечание первое. Не найдено решение системы уравнений, определяющее границы квадрата (то самое b).
Замечание второе. Вычисления, выполняющиеся внутри циклов, лишены какого бы то ни было смысла. Замечание третье. Метод Монте-Карло подразумевает использование не регулярной сетки, а случайных чисел.
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
|
| 14.11.2012, 21:16 [ТС] | |
|
Я не знаю как вычислить параметр b или как его выразить через a???? Весь интернет облазил кругом сухая теория нет ни одного практического примера. На сколько я понял площадь искомой фигуры есть разность площадей отрезка прямой и отрезка гиперболы, помещенные в квадрат. Ума не приложу как это реализовать на C++???? Люди добрые помогите пожалуйста???? Четвертые сутки бьюсь.
![]() Заранее огромное спасибо.Добавлено через 5 минут Если бы на парах вместо сухой теории разбирали больше практику не пришлось бы так часто спрашивать на форуме. Препод отвратный приверженец Бейсика и Паскаля, C++ не в зуб нагой поэтому дает сухую теорию.
0
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 14.11.2012, 22:11 | |
|
Для начала надо определиться с математикой. Решить простую скучную систему уравнений
Насчёт "площадей" прямой и гиперболы можно не заморачиваться, суть не в этом. Надо сгенерировать нужное количество пар случайных чисел, в интервале от 0 до b. Это будут координаты наших пробных точек. Те точки, что попадают в фигуры (то есть, удовлетворяют приведённому мной ранее условию), надо подсчитывать. Соотношение количества этих точек с общим количеством - примерно такое же, как соотношение площади квадрата и площади нашей фигуры. Простая пропорция.
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
|
| 15.11.2012, 12:03 [ТС] | |
|
Решил систему уравнений у меня получились два корня:
Люди добрые помогите пожалуйста!!!! Заранее огромное спасибо.
0
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 15.11.2012, 18:46 | |
|
Система решена неверно. Решения не подходят второму уравнению.
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
||||||
| 18.11.2012, 16:29 [ТС] | ||||||
|
x1 = 2*a, y1= a/2; x2 = a/2, y2 = 2*a.
![]() Заранее огромное спасибо.
0
|
||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||
| 19.11.2012, 16:10 | ||||||
|
Вот теперь программа похожа на правду.
Рекомендации: - квадрат a проще и эффективнее записать как a*a; - воспользоваться тем, что x1 = y2 и x2 = y1; - сократить ненужные и повторяющиеся вычисления; - использовать double вместо float; - объявлять переменные там, где они используются впервые; - написать RandFloat с использованием стандартного rand; - написать InsideFigure. Для простоты предположим положительное a
Проверка принадлежности InsideFigure - функция, возвращающая значение bool и проверяющая соблюдение описанных выше условий.
1
|
||||||
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
|||||||
| 19.11.2012, 23:20 [ТС] | |||||||
![]() Вот, что то сделал, но это бред:
![]() Заранее огромное спасибо.
0
|
|||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||||||||||||
| 20.11.2012, 18:26 | ||||||||||||||||
|
Для RandFloat условия не нужны, там обычное вычисление. Надо перевести число из диапазона [0; RAND_MAX] в диапазон
1
|
||||||||||||||||
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
||||||||||||||||
| 20.11.2012, 23:08 [ТС] | ||||||||||||||||
|
Спасибо огромное за ответ. На сколько я понял для проверки InsideFigure нужно выполнить два условия ограничение сверху:
![]() Заранее огромное спасибо.
0
|
||||||||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 21.11.2012, 17:59 | |
|
Функция InsideFigure будет одна, но в ней будет проверяться выполнение обоих условий.
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
||||||
| 21.11.2012, 21:59 [ТС] | ||||||
|
Подскажите пожалуйста как правильно записать программу уже все пере пробовал:
![]() Заранее огромное спасибо.
0
|
||||||
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
||||||
| 25.11.2012, 15:04 [ТС] | ||||||
|
Записал условие для InsideFigure() используя операции &&. Но осталась еще одна проблема записал функцию для RandFloat():
1 IntelliSense: too few arguments in function call c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1923\monte-carlo method\monte-carlo method\monte-carlo method.cpp 32 42 Monte-Carlo method 2 IntelliSense: too few arguments in function call c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1923\monte-carlo method\monte-carlo method\monte-carlo method.cpp 32 61 Monte-Carlo method 3 IntelliSense: too few arguments in function call c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1923\monte-carlo method\monte-carlo method\monte-carlo method.cpp 32 62 Monte-Carlo method Каких исправить???? ![]() Заранее огромное спасибо.
0
|
||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 25.11.2012, 15:45 | |
|
Посмотрим на запись функций. InsideFigure принимает 2 координаты и параметр a. Теперь поглядим, как её вызывают. Координаты, вычисленные через RandFloat, ей передаются, а третий параметр - упущен.
Функции RandFloat не нужны параметры min, max. Достаточно b0, b1.
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
|
||||||
| 25.11.2012, 22:10 [ТС] | ||||||
|
Спасибо за ответ исправил как вы советуете:
1 IntelliSense: too few arguments in function call c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1923\monte-carlo method\monte-carlo method\monte-carlo method.cpp 32 62 Monte-Carlo method??????? ![]()
0
|
||||||
| 25.11.2012, 22:10 | |
|
Помогаю со студенческими работами здесь
20
Вычисление интеграла методом Монте-Карло Вычисление интеграла методом Монте-Карло Вычисление числа Пи методом Монте-Карло Вычисление интеграла методом Монте-Карло Вычисление интеграла геометрическим методом Монте-Карло Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|