Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019...

32
Лекция 5 Метод Монте - Карло Имитационное моделирование Лекция 5

Upload: others

Post on 11-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Лекция 5

Метод Монте-Карло

Имитационное моделирование

Лекция 5

Page 2: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 13

Метод Монте-Карло

- численный метод решения различных задач (в том

числе физических) при помощи моделирования

случайных событий.

В широком смысле метод Монте-Карло – метод,

использующий псевдослучайные числа.

Метод Монте-Карло сформулирован в 1949 г. в

работах Дж. Неймана, С. Улама, Н. Метрополиса

(первые ЭВМ, проект создания атомной бомбы)

Page 3: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 14

Идея метода Монте-Карло

Площадь озера?

N Nвс

1 12 13 2

Sкв~N Sозера~Nвc

кввс

озера SN

NS

consty)(x, :тноРавновероя

y)dS(x,dP

1) , (0 события ьвероятност

P

Page 4: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 5

кввс

озера SN

NS

14.11.2019 15

Предшественники метода: игла Бюффона

R = 1

кв

кр

N

NS 4кр R

Sкр = πR2 = π Sкв = 4

5,38

74

Число реализаций!

Page 5: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 16

Генератор псевдослучайных чисел

Равномерно распределенные целые числа на

интервале от 0 до RAND_MAX

int rand(void);

void srand(unsigned int); /* смена начальной точки генератора */

Пример.

#include <stdlib.h>

#include <time.h>

int i,j;

srand( (unsigned)time( NULL ));

i = rand(); /* 41 */

j = rand(); /* 18467 */

Базовый генератор: линейный конгруэнтный метод

Xn+1 = (M*Xn+C) mod m

Page 6: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 17

Пример генератора псевдослучайных чисел

#define RAND_MAX 32767

static unsigned long int next = 1;

int rand(void)

{

next = next * 1103515245 + 12345;

return (unsigned int)(next/65536) % RAND_MAX;

}

void srand(unsigned int seed)

{

next = seed;

}

Page 7: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 18

Вещественные числа на интервале [0, 1]

double r;

r = (double) rand()/RAND_MAX; /* 0.171534 */

;

#define RAND_MAX 0x7fff /* (32767, Visual C */

0 … 743 … 1059 … 6493 … RAND_MAX

Page 8: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 19

Вещественные числа на интервале [a, b]

Линейное преобразование

ξ = α*r + β

0 1

a b

r

ξ

a = α*0 + β → β = a

b = α*1 + β → α = b - a

ξ = (b-a)*r + a

b

a

1)(1)()(

нормировки Условие

b] [a, на)(

ababdd

const

Page 9: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 20

Численное интегрированиеметодом Монте-Карло

Надо вычислить определенный интеграл:

dfab

abdf

b

a

b

a

)()(

1)()(

N

i

i

b

aN

fabdfab

1

)()()()()(

Среднее значение

функции f() на [a,b]

ab

1)(

Пусть - случайная величина, равномерно

распределенная на [a, b], т.е.

Page 10: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 21

Приближенное вычисление определенного интеграла методом Монте-Карло

1. Исходная задача – регулярная! Псевдослучайные

числа используются для ее приближенного решения.

2. Возможно, не самый лучший способ численного

интегрирования. Особенно для одномерных

интегралов.

b

a

N

i

ifN

abdf

1

)()(

)(

Page 11: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 22

Обобщение на многомерное интегрирование

b

a

N

i

ii

d

c

fN

cdabddf

1

),())((

),(

Двумерный интеграл

ab

1)(

сd

1)(

Пример: вычисление числа π

Page 12: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 23

Вычисление числа π методом Монте-Карло

b

a

d

c

cdabdd ))((

Сведем задачу к двумерному интегралу выбором f(ξ, η)

Если f(ξ, η) ≡ 1, то

x

y

a b

c

d

Используя f(ξ, η), нужно выделить круг

единичного радиуса R = 1

x

y

и посчитать его площадь S = π

R

Page 13: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 24

Вычисление числа π методом Монте-Карло

x

y

1,0

1,1),(

22

22

yx

yxyxf

R

-1

-1 1

1

1

1 1

1

1

),(4

),(N

i

iifN

dydxyxf

]1,1[,

Page 14: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 25

Вычисление числа π методом Монте-Карло

x

y

-1

-1 1

1double pi, x, y;

int i, icircle, N = 10000;

for(i=1, icircle=0; i<=N; i++)

{

x = rand()/(double)RAND_MAX*2.-1.;

y = rand()/(double)RAND_MAX*2.-1.;

if (x*x+y*y <= 1) icircle++;

}

pi = 4*(double)icircle/(double)N;

printf("\n pi = %10.4f", pi);

pi = 3.1464

N = 1 000 000 pi = 3.1414

http://en.wikipedia.org/wiki/Monte_Carlo_method

Page 15: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 26

Качество псевдослучайных чисел.Гистограммы распределений

nk

ξ ξ

const)(],1,0[ Число испытаний

(чисел) N = 100

10 10 10 10 10 10 10 10 10 10

0

10

20

30

40

50

60

0.5 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.950.05

10

50

40

0 0 0 0 0 0 00

10

20

30

40

50

60

0.5 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.950.05

Page 16: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 27

Гистограмма для 100 псевдослучайных чисел, равномерно распределенных на

отрезке [0, 1]

nk

ξ

]1,0[Число испытаний

(чисел) N = 100

11 108

119

12 10 10 11 10

0

10

20

30

40

50

60

0.5 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.950.05

Page 17: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 28

Тестирование генераторов. χ2-критерий

nk

ξ

r

k k

kk

n

nny

1 T

2

T

правдоподобности гипотезы о

некотором распределении

1 … k … r

kk Npn T

При N → ∞ сходится по вероятности

к χ2-распределению с r-1 степенями

свободы

Статистика y слишком велика – плохо!

Статистика y слишком мала – плохо!

Таблицы «хороших» значений для разных N и r

11 10 811 9 12 10 10 11 10

0

10

20

30

40

50

60

0.5 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.950.05

Page 18: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 29

Тестирование генераторов. K-равномерность

0 1

0 1

ξi

1

ξi, ξi+11 - равномерность

2 - равномерность

0 1

1

1

3 - равномерность

Известны датчики, для которых

ξk+2 = α ξk+1 + βξk

Page 19: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 30

int randbad()

{

int i;

static int count = 0, i1,i2;

switch (++count)

{

case 1: return (i1 = rand());

case 2: return (i2 = rand());

case 3: i = (i1 + i2)/2;

count = 0;

return i;

}

}

«Плохой» генератор псевдослучайных чисел

2

213

Page 20: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 31

Вычисление числа π с использованием «плохого» генератора

x

y

-1

-1 1

1double pi, x, y;

int i, icircle, N = 10000;

for(i=1, icircle=0; i<=N; i++)

{

x = randbad()/(double)RAND_MAX*2.-1.;

y = randbad()/(double)RAND_MAX*2.-1.;

if (x*x+y*y <= 1) icircle++;

}

pi = 4*(double)icircle/(double)N;

printf("\n pi = %10.4f", pi);

pi = 3.4192

Page 21: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 32

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

y

x

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

y

x

randbad() rand ()

N = 100

pi = 3.52 pi = 3.28

pi = 3.4040N = 1 000 000 pi = 3.1414

Распределение «плохих» чисел на плоскости

Page 22: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 33

Псевдослучайные числа с нормальным распределением

2

2

2

)(

22

1)(:

a

e

aaa),( aaa

Page 23: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 34

Генерация псевдослучайных чисел с нормальным распределением (0,1). Способ 1

1)()(]1,[0, Пусть 2121

a

212

211

ln2)2cos(

ln2)2sin(

Преобразование Бокса — Мюллера

Page 24: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 35

Генерация псевдослучайных чисел с нормальным распределением (0,1)

14

1

3

1

4

1

2

1

062

16

]1,0[2

16

12

1

12

1

2

212

1

222

12

1

12

1

12

1

12

1

kk

kk

k

k

kk

k

k

k

k

k

k

В соответствии с ЦПТСпособ 2

Page 25: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 36

Общая схема имитационного моделированияметодом Монте-Карло

1. Разыгрывание событий в соответствии с их

вероятностями (псевдослучайные числа)

2. Имитация распространения частицы,

регистрация в плоскости наблюдения

3. Многократное повторение опыта

4. Усреднение результатов

Page 26: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 37

Текущее среднее

Пусть x1, x2, …, xN – случайные числа

Оценка среднего по конечному числу реализаций N:

N

xx

N

N

N

x

N

x

N

N

N

x

N

x

N

Nxxx

x

N

N

N

N

i

N

N

i

N

N

i

N

i

N

1

1

1

i

1

1

i

1

1

i

1

i

1

1

1

1

1

NN

Page 27: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 5

0 1P1

14.11.2019 38

Прямое имитационное моделирование физических явлений и процессов

Пример 1.

122

111

1)(

),,,()(

PAP

trPAP

События

A1 – поглощение

A2 – рассеяние

),,,()(

trlсв

ξ = (double)rand()/RAND_MAX;

if (ξ<P1) ->A1

else ->A2

свсвсв lll -

10

00

11

11

|)()( PddPPP

PP

Page 28: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 39

Прямое имитационное моделирование.Результат статистических испытаний

x, см

Page 29: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 40

Перколяция или задача о протекании

Пример 2. Перколяция (задача о протекании)

Решетка – N*N ячеек (N = 7)

«Занятая» ячейка

– вероятность p (p = 0,33)

«Свободная» ячейка – (1-p)

Кластер

– соседние занятые ячейки

Стягивающий кластер

Page 30: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 41

Вероятность образования стягивающего кластера

Реализация решетки с N = 25 и p = 0,7

Есть стягивающий кластер!M - число реализаций решетки

Мст – число реализаций со

стягивающим кластером

Pст ≈ Мст / M

Pст

p

1

1

p*геометрический фазовый переход

0

Page 31: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 514.11.2019 42

Литература

1. Н.Н. Калиткин. Численные методы. – BHV, 2011, 592 с.

1. И.М. Соболь. Метод Монте-Карло. – М.: Наука, 1968, 64 с.

2. К. Биндер, Д.В. Хеерман. Моделирование методом Монте-Карло в статистической физике. М.: Наука, 1995.

Page 32: Лекция 5 - ofvp.phys.msu.ruofvp.phys.msu.ru/upload/iblock/98e/lecture5_2019.pdf · 14.11.2019 Программирование и информатика: Лекция 5 13 Метод

Программирование и информатика: Лекция 5

void function(void)

{

int i = 0;

static int j = 0;

printf ("\n i = %d, j = %d", i++, j++);

}

int main(int argc, char* argv[])

{

function();

function();

}

Язык Си. Автоматические и статические переменные. Время «жизни»

i = 0 j = 0

i = 0 j = 1

53