Красавин Компютерныы практикум в среде МатЛаб 2015
.pdf
x(k) = x1(i); % массив чисел, имеющих заданный закон распределения
end
end
x(k+1:end) = []; % незаполненные элементы массива x удаляются
D = max(x); delta = D/20;
figure % рис. 16.5 H = hist(x,20);
bar(H) % построение гистограммы распределения
hold on
xr = [0 : 0.05 : 20*delta];
f = H(1) * exp(-xr.^2); % нормировка функции на первый столбец гистограммы
plot(xr/delta,f,'r','LineWidth',3) % построение огибающей функции set(gca, 'LineWidth',1)
set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)
set(gca, 'FontWeight', 'bold')
title('\xi: p(x)=exp(-x^2); x\in[0,\infty]','FontSize', 12, 'FontName', 'Trebuchet MS')
Рис. 16.5. Гистограмма случайных чисел, распределенных с плотностью на интервале
191
Задания
16.1. Методом обратной функции сгенерировать случайные
числа, |
распределенные |
на |
отрезке |
|
с плотностью: |
|||
а) |
α |
; |
б) |
β |
|
|
гистограммы распределе- |
|
ний. |
|
|
. |
Построить |
0,3 |
|
||
16.2. Методом Неймана сгенерировать случайные числа,
распределенные с плотностью |
|
|
на отрезке |
0,3 |
. |
|
√ |
||||||
Построить гистограммы распределений. |
|
|
||||
192
17
Расчет интегралов методом Монте-Карло
Рассмотрим функцию |
, заданную на интервале |
, |
. Пусть |
необходимо вычислить интеграл |
|
||
.
Для расчета выберем произвольную плотность распределения |
, |
определенную на том же интервале, причем |
|
1.
Определим случайную величину |
|
|
|
|
|
|
|||||||
|
|
|
η |
|
ξ |
, |
|
|
|
|
|
|
|
где |
ξ |
– случайная величина, распределеннаяξ |
с плотностью |
на |
|||||||||
|
. Тогда математическое ожидание |
η |
будет равно искомому |
||||||||||
интегралу, : |
η |
|
|
|
|
|
. |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
Рассмотрим |
независимых |
случайных |
величин |
|
и |
||||||||
применим к их сумме центральную предельную |
теорему, тогда |
|
|||||||||||
|
η ,η ,…,η |
|
|||||||||||
193
1 |
η |
3 |
η |
0.997. |
|
||
Таким образом, если выбрано |
случайных значений ξ ,ξ ,…,ξ |
, |
|||||
то при достаточно большом |
|
||||||
|
1 |
|
ξ |
, |
|
|
|
|
|
|
|
ξ |
|
|
|
и погрешность расчета не превосходит 3 |
η/ |
, где |
|
|||||
η |
η |
|
|
1 |
|
ξ |
. |
|
|
|
|
|
|
ξ |
|||
Следует отметить, что сходимость результата к точному значению следует также из закона больших чисел, согласно
которому для любого ε |
0 |
|
|
|
lim |
1 |
η |
ε |
1. |
Более того, справедлив усиленный закон больших чисел:
lim |
1 |
η |
1. |
Для оптимального расчета интеграла с минимальной погрешностью следует выбирать распределение , пропорциональное | | или, по возможности, близкое к этому. Докажем это утверждение.
Воспользуемся известным неравенством Коши–Буняковского в интегральном виде:
194
| |
| |
. |
Положим
; ,
тогда
| |
| |
|
|
|
. |
|
|
Отсюда находим оценку снизу для дисперсии:
η |
| |
| |
. |
Выберем распределение
| |
|; |
| |
| |
. |
Из распределения следует, что
1 |
| |
| |
| |
| |
. |
Подставив это выражение в выражение для дисперсии, имеем
η |
| |
| |
. |
195
Таким образом, выбор |
функции |
| |
в качестве |
функции распределения |
приводит к наименьшей| |
ошибке, т.е. |
низшей границе неравенства для дисперсии. Такой расчет
интеграла с наиболее близкой к |
плотностью распределения |
называется существенной выборкой. |
|
Для иллюстрации эффективности такого выбора рассмотрим интеграл
/
sin 1.
Используем для расчета интеграла различные нормированные функции распределения, также определенные на интервале 0,π/2
(рис. 17.1):
2 |
; |
8 |
. |
π |
π |
Рис. 17.1. Подынтегральная функция и различные плотности распределения для расчета интеграла методом Монте-Карло
196
Методом обратной функции найдем случайные числа, распределенные на интервале 0,π/2 с плотностями и соответственно:
ξ |
π |
; |
|
||
2 |
|
|
|||
|
π |
|
|
|
|
|
|
|
|
||
ξ |
2 |
√ |
, |
||
где – случайное число, равномерно распределенное на интервале
0,1 .
Соответственно, для оценки |
интеграла |
после |
итераций |
|
получаем: |
|
|
|
|
π |
|
sinξ |
; |
|
2 |
|
|
||
π |
|
sinξ . |
|
|
8 |
|
ξ |
|
|
На рис. 17.2 показан процесс сходимости расчетного значения интеграла к точному значению в зависимости от числа сгенерированных случайных точек.
Видно, что значения |
быстрее сходятся к точному ответу |
|||
при выборе функции распределения |
. |
Это объясняется тем, |
||
что распределение |
близко к подынтегральной функции |
|
||
(см. рис. 17.1), поэтому дисперсия значений |
при выборе этого |
|||
распределения будет меньше, чем при выборе распределения |
. |
|||
Эффективность метода Монте-Карло растет с размерностью рассчитываемого интеграла. Расчет двумерных и трехмерных интегралов методом Монте-Карло более эффективен, чем расчет при помощи разностных схем. Метод Монте-Карло с успехом используется для различных физических и математических задач и процессов: для моделирования систем массового обслуживания,
197
информационных потоков, процессов протекания, процессов распространения нейтронов в средах и т.д.
Рис. 17.2. Выбор функции распределения сильно влияет на скорость сходимости расчета интеграла методом Монте-Карло
В примере 17.1 приведен код, реализующий приближение интеграла с распределениями и .
Пример 17.1. function IntMonte(N)
R = rand(1,N);
I1 = zeros(1,N);
I2 = zeros(1,N);
for i = 1 : N
I1(i) = pi/2/i*sum(sin(pi/2*R(1:i)));
I2(i) = pi/4/i*sum(sin(pi*sqrt(R(1:i))/2)./sqrt(R(1:i))); end
198
figure plot(I1,'b','LineWidth',2) hold on plot(I2,'r','LineWidth',2) set(gca, 'LineWidth',1)
set(gca, 'FontName', 'Trebuchet MS') set(gca, 'FontSize', 8)
set(gca, 'FontWeight', 'bold')
leg = legend('p(x)=2/\pi', 'p(x)=8x/\pi^2', 'Location', 'SouthEast');
set(leg, 'Box', 'off', 'FontName', 'Trebuchet MS', 'FontAngle', 'italic', 'FontSize', 10, 'FontWeight', 'bold')
Задания
17.1. Оптимизировать код из примера 17.1, использовав
рекуррентные соотношения для |
. |
|
|
|
|
|
17.2. Аппроксимировать интеграл |
при помощи |
случайных |
||||
чисел, распределенных с плотностью |
|
|
|
|
|
|
|
β√ . |
Сравнить |
||||
скорость сходимости с первыми двумя случаями. |
||||||
17.3. Аппроксимировать интеграл
,
использовав распределения
const;
.
Сравнить скорость сходимости интеграла к точному значению.
199
18
Алгоритм Метрополиса
18.1. Марковская цепь. Понятие эргодичности
Допустим, моделируется броуновское движение, и на каждом вычислительном (и временном) шаге одна из частиц перемещается на какое-то расстояние, что приводит к новому расположению частиц. После передвижения частица «не помнит» своего начального положения, т.е. информация о предыдущем состоянии «стирается». Случайное блуждание является примером марковской цепи. На каждом шаге появляется новое состояние системы, и процесс представляет собой цепь последовательных состояний. Переход из предыдущего состояния в новое зависит только от предыдущего состояния, или, точнее, вероятность нахождения системы в данном состоянии зависит только от предыдущего состояния. Обозначим через
|
|
, ,…, ,… |
подразумеваются все |
|
последовательность состояний, где под |
||||
степени |
свободы |
рассматриваемой |
системы |
(например, |
совокупность координат и импульсов), описывающие ее состояние (система может быть многочастичной). Например, может обозначать какую-либо из базисных функций системы, и тогда последовательность описывает переходы от одной базисной функции к другой.
Обозначим через
|
|
, ,…, |
|
|
|
при условии |
вероятность |
появления |
нового |
состояния |
|
||
реализации |
предыдущих |
состояний |
, |
,…, |
(условная |
|
200 |
|
|
||||
