Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118

Методом Монте-Карло определить площадь геометрической фигуры

09.10.2020, 22:40. Показов 9695. Ответов 17

Студворк — интернет-сервис помощи студентам
Используя метод Монте-Карло определить площадь геометрической фигуры. Найти среднее и дисперсию эксперимеww

Дано: Площадь поверхности пирамиды с квадратным основанием, стороной 1 и высотой 1

То, что я уже сделала. Я не могу понять что я сделала не так. Помогите пожалуйста, целый день сижу, уже глаз "замылился". Не могу понять в чем проблема. Буду очень благодарна если подскажите!

Python
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
from random import random # рандом от 0 до 1
import math # математическая библиотека
array = [] # массив
VisotaTreyg = math.sqrt(1+0.25) # расчёт высоты треугольника
print("VisotaTreyg",VisotaTreyg)
for i in range(5): # цикл 5 раз
  m=0
  for j in range(1000): # рандом 1 000 точек
    x = random()
    y = 0 + random() * VisotaTreyg
    if y>=0 and -x*VisotaTreyg+0.5*y<=0 and x+0.5*y<=VisotaTreyg:  # условие на попадание точки
        m+=1
  S=1*1*m/1000 # площадь по формуле Монте Карло
  print("m",m) # кол-во точек попавших в фигуру за проход   
  array.append(S)
  print("Проход",i+1,":" ,S*4)
sum=0
for i in range(5):
  sum+=array[i]
mathWait = 0
mathWaitinPow = 0
for i in range(5):
  mathWait+=array[i]*(1/len(array))
for i in range(5):
  mathWaitinPow+=(array[i]**2)*(1/len(array))
print("Среднее значение площади:", sum/len(array))
print("Мат ожидание:", mathWait)
print("Мат ожидание от x в квадрате:", mathWaitinPow)
print("Дисперсия:", mathWaitinPow - mathWait**2)
MatTreyg = 2.2361 # математическая формула для проверки
print("Площадь боковой поверхности треугольника:" ,MatTreyg)
MatPiramida = 3.236 
print("Площадь поверхности пирамиды через высоту и сторону основания:" ,MatPiramida)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2020, 22:40
Ответы с готовыми решениями:

Вычислить площадь фигуры методом монте-карло без использования рандомных чисел
Вычислить площадь фигуры методом монте-карло без использования рандомных чисел. Срочно.

Вычисление площади фигуры методом Монте-Карло
всем привет вопрос в шапке помогите составить программу а точнее логику ...

Нахождение площади фигуры методом Монте Карло (python)
Добрый вечер, у меня возникла проблема с точностью площади, при нахождении методом Монет Карло. И я думаю что проблема заключается в том...

17
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
09.10.2020, 23:07
Цитата Сообщение от Fady Посмотреть сообщение
Я не могу понять что я сделала не так
А как ты поняла, что сделала что-то не так?) Давай более точную ошибку. Например, неправильно считает площадь или неправильно считает мат ожидание...

Добавлено через 7 минут
Цитата Сообщение от Fady Посмотреть сообщение
print("Площадь боковой поверхности треугольника:" ,MatTreyg)
А что такое 'боковая поверхность треугольника'?
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
09.10.2020, 23:07  [ТС]
Я сравниваю результаты которые были вычислены математически, т.е. площадь боковой поверхности и результаты приблизительного прогона, они сильно отличаются, то есть либо условия я задала не правильно, либо что-то не так с вычислентями
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
09.10.2020, 23:18
Ну на глаз, мне не понятно условие попадания точки...
Можно это разбить на сумму двухмерных задач, то есть найти площадь треугольника через метод МК, являющегося гранью призмы, с основанием 1 и высотой, которую ты должна посчитать через высоту призмы. Так же посчитать площадь квадрата, лежащего в основании призмы, через метод МК. После чего твоя искомая площадь будет четыре площади треугольника плюс площадь квадрата.
Если нельзя по условию разбивать на двухмерные задачи, то надо явно переписать условие попадания точки в область.

Добавлено через 3 минуты
Цитата Сообщение от Fady Посмотреть сообщение
"Площадь боковой поверхности треугольника:"
Тут должно быть что-то типа "Площадь боковой поверхности призмы", то есть площадь поверхности без основания.
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
09.10.2020, 23:37  [ТС]
Я выбрала такие условия для подсчёта точек, чтобы они попадали в область.
Название: Границы.PNG
Просмотров: 213

Размер: 7.9 Кб
Но так как верх пирамиды будет не ровно один, а примерно 1.118, то я через теорему Пифагора вычисляю вначале высоту VisotaTreyg, а потом я её поставляю для того чтобы y был равен высоте, а не единице
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
09.10.2020, 23:54
Лучший ответ Сообщение было отмечено Fady как решение

Решение

Крч, извини, что тебя замучал) Вообщем косяк там, где ты кладешь площадь в список array.
Ты кладешь площадь одного треугольника, а надо площадь четырех.
И не забудь, что это будет только среднее значение площади 4 треугольников, тебе еще надо площадь квадрата прибавить.

Добавлено через 1 минуту
То есть у тебя
Python
1
2
array.append(S)
print("Проход",i+1,":" ,S*4)
Ты кладешь одну площадь, а печатаешь 4. Поэтому ты могла и не заметить эту ошибку.

Добавлено через 1 минуту
Исправив там S на S * 4, ты вот тут
Цитата Сообщение от Fady Посмотреть сообщение
print("Среднее значение площади:", sum/len(array))
получишь среднее значение площади без площади квадрата в основании.
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.10.2020, 00:11  [ТС]
Спасибо, убрала. Как я понимаю это только часть проделанной работы, теперь необходимо найти площадь квадрата основания. Почему это тоже необходимо делать через МК? если известно сторону a=1. Можно ли просто https://www.cyberforum.ru/cgi-bin/latex.cgi?Soc=\frac{\sqrt{3}}{4*{a}^{2}}? и тогда уже суммировать. Или я что-то не так понимаю?
Это вы извините, если утруждаю вас
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
10.10.2020, 00:16
Цитата Сообщение от Fady Посмотреть сообщение
Почему это тоже необходимо делать через МК?
У тебя же в условии написано, что площадь надо считать через МК. Можешь и без МК попробовать, но тут, как преподаватель отреагирует, никто не знает.

Добавлено через 34 секунды
Цитата Сообщение от Fady Посмотреть сообщение
тогда уже суммировать
Ну да. У тебя должно быть S * 4 + T
Где T - площадь квадрата.
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.10.2020, 00:33  [ТС]
Я думаю что Метод МК я уже использовала когда искала значение площади без площади квадрата в основании. А так как нам остальные цифры известны, то можно ими воспользоваться. Я не правильно написала формулу, для правильной четырехугольной пирамиды это будет просто Sосн=a^2.

Видимо, я опять что-то не так делаю. Так как число всё равно даже близко не попадает
Python
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
from random import random # рандом от 0 до 1
import math # математическая библиотека
array = [] # массив
VisotaTreyg = math.sqrt(1+0.25) # расчёт высоты треугольника
print("VisotaTreyg",VisotaTreyg)
for i in range(5): # цикл 5 раз
  m=0
  for j in range(1000): # рандом 1 000 точек
    x = random()
    y = 0 + random() * VisotaTreyg
    if y>=0 and -x*VisotaTreyg+0.5*y<=0 and x+0.5*y<=VisotaTreyg:  # условие на попадание точки
        m+=1
  S=1*1*m/1000 # площадь по формуле Монте Карло
  array.append(S)
  print("Проход",i+1,":" ,S)
sum=0
for i in range(5):
  sum+=array[i]
mathWait = 0
mathWaitinPow = 0
for i in range(5):
  mathWait+=array[i]*(1/len(array))
for i in range(5):
  mathWaitinPow+=(array[i]**2)*(1/len(array))
print("Среднее значение площади:", (sum/len(array))*4+1)
print("Мат ожидание:", mathWait)
print("Мат ожидание от x в квадрате:", mathWaitinPow)
print("Дисперсия:", mathWaitinPow - mathWait**2)
 
MatPiramida = 3.236 
print("Площадь поверхности пирамиды через высоту и сторону основания:" ,MatPiramida)
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
10.10.2020, 00:35
Цитата Сообщение от Fady Посмотреть сообщение
Среднее значение площади без площади квадрата в основании:
Это уже с квадратом в основании.
Близкое же число, что не так? 3.28 и 3.24 близкие.

Добавлено через 36 секунд
Цитата Сообщение от Fady Посмотреть сообщение
+1
Ты же прибавила 1, значит прибавила площадь квадрата.
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.10.2020, 00:43  [ТС]
Заметила, исправила. А не считается ли это большой погрешностью? Или третий знак уже так сильно не решает?

Так как необходимо найти среднее и дисперсию экспериментальных данных по значениям площади, то я вынесла отдельным ответом

Python
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
from random import random # рандом от 0 до 1
import math # математическая библиотека
array = [] # массив
VisotaTreyg = math.sqrt(1+0.25) # расчёт высоты треугольника
print("VisotaTreyg",VisotaTreyg)
for i in range(5): # цикл 5 раз
  m=0
  for j in range(1000): # рандом 1 000 точек
    x = random()
    y = 0 + random() * VisotaTreyg
    if y>=0 and -x*VisotaTreyg+0.5*y<=0 and x+0.5*y<=VisotaTreyg:  # условие на попадание точки
        m+=1
  S=1*1*m/1000 # площадь по формуле Монте Карло
  array.append(S)
  print("Проход",i+1,":" ,S)
sum=0
for i in range(5):
  sum+=array[i]
mathWait = 0
mathWaitinPow = 0
for i in range(5):
  mathWait+=array[i]*(1/len(array))
for i in range(5):
  mathWaitinPow+=(array[i]**2)*(1/len(array))
print("Среднее значение площади без площади квадрата в основании:", sum/len(array))
print("Мат ожидание:", mathWait)
print("Мат ожидание от x в квадрате:", mathWaitinPow)
print("Дисперсия:", mathWaitinPow - mathWait**2)
print("Значение площади:", (sum/len(array))*4+1)
MatPiramida = 3.236 
print("Площадь поверхности пирамиды через высоту и сторону основания:" ,MatPiramida)
Можно еще у вас спросить по поводу такой же задачи, но другой вариант, решённой мной, но свежим взглядом, правильно ли она была решена?

Дано: Объем цилиндра диаметра 2 и высотой 1.



Python
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
from random import random #импорт рандома от 0 до 1
import math #библиотека
array = [] #массив для площади
for i in range(5): # цикл пройдёт пять раз
  m=0
  for j in range(1000): #рандомно 1000 точек
    x = -1.5 + random() * 3  #рандом точки от -1.5 до 3, центр окружности
    y = -1.5 + random() * 3
    if x ** 2 + y ** 2 <= 2:  #условия на попадание точки
        m+=1
  S=3*3*m/1000 #площадь по ф-ле Монте Карло
  array.append(S)
  print("Проход",i+1,":" ,S)
sum=0
for i in range(5):
  sum+=array[i]
mathWait = 0
mathWaitinPow = 0
for i in range(5):
  mathWait+=array[i]*(1/len(array))
for i in range(5):
  mathWaitinPow+=(array[i]**2)*(1/len(array))
print("Среднее значение площади:", sum/len(array))
print("Мат ожидание:", mathWait)
print("Мат ожидание от x в квадрате:", mathWaitinPow)
print("Дисперсия:", mathWaitinPow - mathWait**2)
MatFormula = math.pi * 2 * 1
print("Объём найденной фигуры:" ,MatFormula)
0
10.10.2020, 00:51

Не по теме:

Удалено

0
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.10.2020, 00:59  [ТС]
Fury67, https://www.cyberforum.ru/cgi-bin/latex.cgi?{R}^{2}=\sqrt{{2}}^{2}, так как мне известен диаметр =2
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
10.10.2020, 01:01
Цитата Сообщение от Fady Посмотреть сообщение
#рандом точки от -1.5 до 3, центр окружности
Это рандом от -1.5 до 1.5.
Цитата Сообщение от Fady Посмотреть сообщение
if x ** 2 + y ** 2 <= 2
У тебя диаметр 2, а не радиус в квадрате.

Добавлено через 1 минуту
Цитата Сообщение от Fady Посмотреть сообщение
диаметр =2
Диаметр = 2 * радиус => радиус равен 1/2 * диаметр
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.10.2020, 01:07  [ТС]
Цитата Сообщение от Fury67 Посмотреть сообщение
Диаметр = 2 * радиус => радиус равен 1/2 * диаметр
Следовательно необходимо записать так?
Python
1
 if x ** 2 + y ** 2 <= 1:  #условия на попадание точки
Тогда значения совсем не совпадают
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
10.10.2020, 01:09
Цитата Сообщение от Fady Посмотреть сообщение
Тогда значения совсем не совпадают
Логично, ты же в
Цитата Сообщение от Fady Посмотреть сообщение
MatFormula = math.pi * 2 * 1
Не поменяла 2 на 1.
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.10.2020, 01:12  [ТС]
Спасибо, поняла. Исправила. Теперь сходиться отлично.
Последний вопрос,

Не по теме:

извините если мешаю отдыхать

, можно ли считать это решением конечным вариантом? так как высота равна 1?

0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
10.10.2020, 01:13
Цитата Сообщение от Fady Посмотреть сообщение
можно ли считать это решением конечным вариантом?
Наверное
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2020, 01:13
Помогаю со студенческими работами здесь

Как найти площадь треугольника методом Монте-Карло?
Здравствуйте. Не могу разрешить задачу суть ее такова. Мне дана плоскость на которой нарисован прямоугольник в него вписан треугольник и...

Площадь n мерной сферы единичного радиуса методом Монте-Карло
1) Как вычисляется площадь обычной сферы методом Монте-Карло ? 2) Как это сделать в произвольном n мерном пространстве ? радиус = 1

Расcчитать методом Монте-Карло интеграл
Помогите пожалуйста с этими задачами: Примеров нет как их делать,ничего непонятно 1)Расcчитать методом Монте-Карло интеграл ф-ции...

Найти приближённое значение Пи методом Монте-Карло
При помощи метода Монте-Карло определите приближённое значение числа π. Метод Монте-Карло — общее название группы численных методов,...

Вычислить интеграл с заданной точностью методом Монте-Карло
вычислите с точностью до двух десятичных знаков интеграл, используя в качестве оценки вероятной ошибки величину.


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru