Добрый день. Я приступила сегодня к самостоятельному изучению курса "Моделирование систем". Хочу понять - необходимо ли отсылать мои решения практических заданий на сайт, (и если да - то где найти волшебную кнопку "Загрузить...") или практические задания остаются полностью на моей совести? (никто не проверяет, и отчётности по ним я предоставлять не обязана?) P.S.: тьютора я не брала |
Выборочный метод Монте-Карло
Практическая часть
Пример 1. Рассчитайте с помощью метода Монте-Карло площадь круга радиусом и с координатами центра . Число испытаний примите 500. Выполните графические построения, поясняющие расчет.
Для определения площади плоской фигуры ее вписывают в соответствующую известную фигуру, площадь которой достаточно просто вычисляется. Вычисление площади круга может быть произведено через вычисление площади квадрата, в который вписывается круг. Выборочный метод Монте-Карло предполагает генерирование случайных (псевдослучайных) равномерно распределенных чисел. Этим числам сопоставляются координаты точек для рассматриваемой фигуры — квадрата, в которую вписывается круг. Если площадь квадрата подсчитана, то задается число испытаний , из которых исходов могут оказаться внутри круга или на его границе, т. е. на окружности. Тогда площадь круга будет определяться выражением
где:
— число сгенерированных случайных чисел, соответствующих количеству точек, находящихся в данном квадрате:
— число случайных чисел (точек), которые попали в круг. Граница круга — это окружность, уравнение которой имеет вид
где:
, — координаты центра окружности;
, — текущие значения переменных;
— радиус окружности.
Программный код решения примера:
clear all, clc,close all %%%%%%% Расчет площади круга методом Монте-Карло %% Параметры r = 5; x0 = 1; y0 = 2; %%% Построение окружности t = 0 : r/500 : 2*pi; x = r*cos(t) + x0; y = r*sin(t) + y0; line(x, y, 'linew', 2, 'color','r') %%% Центр круга line(x0,y0,'marker','o','markerfacecolor','r','color', 'r' ) %%% Построение квадрата, в который вписан круг line([x0-r, x0+r],[y0+r, y0+r], 'lines','-.') line([x0-r, x0+r],[y0-r, y0-r], 'lines','-.') line([x0+r, x0+r],[y0-r, y0+r], 'lines','-.') line([x0-r, x0-r],[y0-r, y0+r], 'lines','-.') %%% Гененрирование случайных чисел для области D* N = 500; %%% число испытаний %%% Генерация чисел по горизонтальной стороне квадрата rx = min(x) + (max(x) - min(x))*rand(N,1); %%% Генерация чисел по вертикальной стороне квадрата ry = min(y) + (max(y) - min(y))*rand(N,1); %%%% Заполнение случайными числами квадрата с кругом for J = 1 : N line(rx(J),ry(J),'marker','o','markersize',2,'color', 'k',... 'markerfacecolor', 'k' ) end %%% Подсчет количества случайных чисел, попавших в круг m = 0; for J = 1 : N if (rx(J) - x0)^2 + (ry(J) - y0)^2 <= r^2 m = m + 1; end end %%%%% Расчет площади квадрата S = ((x0+r) - (x0-r))^2; %%% Расчет площади круга методом Монте-Карло S0 = m/N*S %%% Проверка расчета Scontrol = pi*r^2 %%% Заголовок для диаграммы str = sprintf('%s Радиус круга r = %g, координаты центра x_0 = %g, y_0 = %g.%s%g%s%g. %s%g', '\bf',r,x0,y0, ... '\newline Теоретическая площадь круга S = ', Scontrol, ... '\newline Площадь круга по методу Монте-Карло S0 = ', S0, ... 'Число испытаний N = ', N); title(str) grid on xlabel('\bf - - - - - - - X - - - - - - - ') ylabel('\bf - - - - - - - Y - - - - - - - ') %%% Ограничения по осям xlim([x0 - r - r/10, x0 + r + r/10]) ylim([y0 - r - r/10, y0 + r + r/10]) axis equal
Задание 1
- Видоизмените программу так, чтобы выполнялось условие непревышения относительной погрешности заданной величины (например, 1%) и чтобы производился необходимый подсчет числа испытаний.
- Предусмотрите, чтобы точки, попавшие в круг, были красного цвета, а не попавшие в него – синего цвета.
- Напишите программу расчета числа по методу Монте-Карло. Расчет числа произведите с точностью в четыре знака после десятичной точки.
Пример 2. Рассчитайте с помощью метода Монте-Карло площадь фигуры, ограниченной эллипсом с большой осью и малой осью . Координаты пересечения осей эллипса , , оси коллинеарны декартовым осям.
Теоретическая площадь эллипса вычисляется по формуле
где:
— большая ось эллипса;
— малая ось эллипса.
Каноническое уравнение эллипса (относительно центра координат):
Программный код решения примера:
clear all, clc, close all %%%% Расчет площади эллипса методом Монте-Карло %%% Параметры эллипса a = 6; b = 4; x0 = -2; y0 = 3; %%% Построение эллипса t = 0 : min([a, b])/500 : 2*pi; x = a*cos(t) + x0; y = b*sin(t) + y0; line(x,y, 'linew', 2, 'color', [1,0,0]) %%% Центр пересечения осей эллипса line(x0,y0,'marker','o','markerfacecolor','r','color','r' ) %%% Построение прямоугольника, в который вписан эллипс line([x0-a, x0+a],[y0+b,y0+b], 'lines','-.') line([x0-a, x0+a],[y0-b,y0-b], 'lines','-.') line([x0-a, x0-a],[y0-b,y0+b], 'lines','-.') line([x0+a, x0+a],[y0-b,y0+b], 'lines','-.') %%% Гененрирование случайных чисел для области D* - области прямоугольника N = 500; %%% число испытаний %%% Генерация чисел по горизонтальной стороне прямоугольника rx = (x0-a) + (x0+a - (x0-a))*rand(N,1); %%% Генерация чисел по вертикальной стороне прямоугольника ry = (y0-b) + (y0+b - (y0-b))*rand(N,1); %%%% Заполнение случайными числами прямоугольника с эллипсом for J = 1 : N line(rx(J),ry(J),'marker','o','markersize',2,'color', 'k',... 'markerfacecolor', 'k' ) end %%% Подсчет количества случайных чисел, попавших в эллипс m = 0; for J = 1 : N if ((rx(J) - x0)/a)^2 + ((ry(J) - y0)/b)^2 <= 1 m = m + 1; end end %%%%% Расчет площади прямоугольника S = ((x0+a) - (x0-a))*((y0+b)-(y0-b)); %%% Расчет площади эллипса методом Монте-Карло S0 = m/N*S %%% Проверка расчета Scontrol = pi*a*b %%% Заголовок для диаграммы str = sprintf('%s Оси эллипса a = %g, b = %g, координаты центра x_0 = %g, y_0 = %g.%s%g%s%g. %s%g', '\bf',a, b,x0,y0, ... '\newline Теоретическая площадь эллипса S = ', Scontrol, ... '\newline Площадь эллипса по методу Монте-Карло S0 = ', S0, ... 'Число испытаний N = ', N); title(str) grid off %% выключение сетки на диаграмме xlabel('\bf - - - - - - - X - - - - - - - ') ylabel('\bf - - - - - - - Y - - - - - - - ') %%% Установление размеров и свойств графического окна gfig = get(0, 'screensize'); set(gcf, 'color', 'w', 'position', [gfig(1) + 100, gfig(2) + 100, gfig(3)*0.8, gfig(4)*0.7]) %%% Ограничения по осям xlim([x0-a-a/10, x0+a+a/10]) ylim([y0-b-b/10, y0+b+b/10]) axis equal
Задание 2
- Для построения эллипса используйте его каноническое уравнение.
- Предусмотрите, чтобы точки, попавшие в эллипс, были красного цвета, а не попавшие в него — синего цвета.
- Координаты центра пересечения осей эллипса примите случайными при использовании функции .
- Оси эллипса примите случайными, равномерно распределенными из интервала , где — номер компьютера, за которым выполняется лабораторная работа ( .).
- В программу включите расчет общего числа испытаний, при котором достигается заданная относительная погрешность в 2%.
- В программу включите построение графика относительной погрешности от числа испытаний начиная с и более.
Пример 3. Найдите оценку значения тройного интеграла методом Монте-Карло
где — область, ограниченная круговым конусом и плоскостью , , .
Программный код решения примера:
clear all, clc, close all %%% Вычисление тройного интеграла методом Монте-Карло, R = 2; h = 5; %%% Для построения конуса [x,y] = meshgrid(-1.2*R:0.02:1.2*R, -1.2*R:0.02:1.2*R); z = h/R*sqrt(x.^2 + y.^2); xmax = 1.2*R; %% Радиус окружности в сечении конуса на высоте max(z) rmax = sqrt(xmax^2 + xmax^2); %%% Максимальное значение аппликаты zmax = h/R*sqrt(xmax^2 + xmax^2); %%% Тангенс угла фронтального сечения конуса koef = (rmax/zmax); %%% Радиус окружности в сечении конуса на высоте h rh = h*(koef); %%% Круговой конус mesh(x,y,z) %% функция построения пространственных фигур hold on %%% Плоскость на высоте h line(x, y, h*ones(size(x))) %%% Параллелепипед line([-rh, rh],[-rh,-rh],[0,0]) line([-rh, -rh],[-rh,-rh],[0,h]) line([rh, rh],[-rh,-rh],[0,h]) line([-rh, rh],[rh,rh],[0,0]) line([-rh, -rh],[rh,rh],[0,h]) line([rh, rh],[rh,rh],[0,h]) line([-rh, -rh],[-rh,rh],[0,0]) line([rh, rh],[-rh,rh],[0,0]) %%% Вычисление тройного интеграла по встроенным функциям int syms x y z In0 = int(int(int(z, z, h/R*sqrt(x^2+y^2), h), ... y, -sqrt(rh^2 - x^2), sqrt(rh^2 - x^2)), x, -rh, rh); In = double(In0) %%% Расчет тройного интеграла методом Монте-Карло N = 1000; %%% Число испытаний S = 0; for J = 1 : N xr = -rh + (rh - (-rh))*rand; yr = -rh + (rh - (-rh))*rand ; zr = h*rand; if zr^2<=h^2/R^2*(xr^2 + yr^2) & h/R*sqrt(xr^2 + yr^2)>=0 & ... h/R*sqrt(xr^2 + yr^2) <= h S = S + zr; end end mD = [2*rh]*[2*rh]*[h]; %%% Объем параллелепипеда, мера In_Car = (mD/N)*S grid on str = sprintf('%s%g;%s Точное значение тройного интеграла: %g',... '\bf Значение интеграла по методу Монте-Карло: ', In_Car, '\newline', In); title(str) view(-30,20) axis equal
Задание 3
- Формирование случайных переменных , , вынесите за пределы цикла.
- Объясните расстановку пределов интегрирования.
- Вычислите по методу Монте-Карло объем тела для полученных пределов интегрирования. Сравните со значением, вычисленным аналитически.
Задание 4
В нижеприводимых заданиях выполните графические построения заданных плоских фигур и напишите программы по расчету площадей этих фигур в системе MATLAB.
-
Рассчитайте с помощью метода Монте-Карло площадь фигуры, ограниченной гипоциклоидой с параметрами ; ; . Параметрическое уравнение гипоциклоиды:
Подберите массив значений параметра .
-
Рассчитайте с помощью метода Монте-Карло площадь фигуры, ограниченной кривой Штейнера с параметром . Параметрическое уравнение кривой Штейнера:
Подберите массив значений параметра .
-
Рассчитайте с помощью метода Монте-Карло площадь фигуры, ограниченной астроидой с параметром . Параметрическое уравнение астроиды:
Подберите массив значений параметра .
Задание 5
В нижеприводимых заданиях выполните графические построения заданных пространственных тел и напишите программы по вычислению объемов этих тел в системе MATLAB.
-
Вычислите с помощью метода Монте-Карло объем тела, ограниченного параболоидом и плоскостью .
-
Вычислите с помощью метода Монте-Карло объем тела, ограниченного поверхностями:
-
С помощью метода Монте-Карло вычислите объем тела, ограниченного поверхностями и (рассмотреть ту из областей внутри конуса, для которой ).
Контрольные вопросы
- Какой закон распределения случайной величины используется при вычислении кратных интегралов методом Монте-Карло?
- Чему равен интегрант трехкратного интеграла при вычислении объема тел методом Монте-Карло?
- От чего зависит точность метода Монте-Карло?
- Как определяется оценка "исправленного" среднеквадратического отклонения?