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

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

09.10.2020, 22:40. Показов 9559. Ответов 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
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru