ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6572
Скачиваний: 50
666
Рис.
7.59.
wl
= 10,
w2 =
10 (кризис наступил)
Программа 153.
Имитационное моделирование очереди
Program Bank;
Uses Graph, Crt;
Var Gm, Gd, P, X, Qq, I, T, V : Integer; St : String[1O];
Begin
Qq := 0; P := 6; V := 2; Randomize; DetectGraph(Gd, Gm);
InitGraph(Gd, Gm, ' ');
SetColor(2); RectAngle(300, 100, 500, 300); Т :- 0;
Repeat
Т := Т + 1; Str(T, St); SetTextStyle(0, 0, 1) ;
SetColor(4); OutTextXY(600, 50, St); X := Random(ll) ;
If X < P Then Qq := Qq + 1; SetColor(15) ;
For I := 0 To Qq Do Circle(490 - I * 30, 200, 15);
Delay(1000); SetColor(0);
For I := 0 To Qq Do Circle(490 - I * 30, 200, 15);
If T Mod V = О
Then Begin
Qq := Qq - 1; If Qq < 0 Then Qq :- 0; Setcolor(15) ;
For I := 0 To Qq Do Circle(490 - I * 30, 200, 15);
End;
SetColor(O); OutTextXY(600, 50, St)
Until KeyPressed Or (Qq > 15); ReadLn;
End.
6.3. РАЗЛИЧНЫЕ ПРИМЕРЫ МОДЕЛИРОВАНИЯ СЛУЧАЙНЫХ ПРОЦЕССОВ
Метод статистического моделирования имеет множество приложений. Чаще всего он за-
ключается в том, что для решения математической задачи строится некоторая случайная величина
ζ, такая, что математическое ожидание этой случайной величины
E
(ζ) является значением искомо-
го решения. Проводя достаточное количество раз эксперимент со случайной величиной ζ, можно
найти приближенное решение как среднее значение результатов эксперимента.
1. Вычисление площадей.
Найти площадь фигуры
G,
вписанной в прямоугольник с разме-
рами сторон
а
и
b. С
помощью датчика равновероятно распределенных случайных чисел много-
кратно генерируются координаты точки, принадлежащей прямоугольнику. Очевидно, что при
большом числе испытаний площадь фигуры
G
приближенно равна отношению числа точек, по-
павших в область
G,
к числу всех разыгранных точек. В качестве примера приведем программу
вычисления числа
π
, находя указанным методом площадь круга, вписанного в квадрат, по 100000
испытаний. Оценку точности полученного результата оставляем читателям.
Программа 154.
Вычисление числа
π
методом Монте-Карло
Program Chislo_Pi;
Uses Crt; Var I, N : Longint; X, Y : Real;
667
Begin
Randomize; N := 0;
For I := 1 To 100000 Do
Begin
X
:=
Random; Y := Random;
If Sqr(X - 0.5) + Sqr(Y - 0.5) < 0.25 Then N := N + 1
End;
WriteLn ('pi=', (N / 100000 / Sqr(0.5)) : 8 : 5) ;
Repeat Until KeyPressed End.
2. Задача Бюффона.
На поле, разграфленное параллельными прямыми, расстояние между
которыми
L,
бросается наугад игла длиной
l
(рис. 7.60). Какова вероятность того, что игла, упав,
пересечег хотя бы одну прямую?
Рис. 7.60. К.
задаче Бюффона
Ж.Бюффон (XVIII в.) подсчитал:
р
=
L
l
2 . Таким образом, если
L =
2
l,
то
р
=
1 . Кроме того,
р
=
N
N
1
,
где
N -
число бросаний,
N
1
- число пересечений иглы с линиями.
Относительная доля случаев, когда игла пересечет хотя бы одну
из параллельных
прямых
равно
р
=
1 . Это был один
из старинных способов опредения числа
π.
Имитационное моделирование проведем следующим образом. Примем
L
= 1 и
l
=
2
1 . «Иг-
лу» будем «бросать» в квадрат размером, скажем, 20х20, левый нижний угол которого имеет ко-
ординаты (0, 0). Положение концов иглы будем задавать с помощью датчика равномерно распре-
деленные, случайных чисел в диапазоне от 0 до 20. Точнее говоря, эти числа определят направле-
ние отрезка, вдоль которого находится очередная игла; для того, чтобы ее длина была равна
2
1
,
вторую из случайных точек - концов отрезка - подвинем вдоль него до достижения указанной
длины иглы. В математическом отношении это сводится к следующей несложной процедуре;
• генерация координат точек
А(х
1
, y
1
), B(x
2
, у
2
);
•
определение координат точки
В
1
(х
1
+
α(х
2
– х
1
), у
1
+
α(у
2
– у
1
)),
где
Поскольку расстояние между горизонтальными линиями взято равным единице, а сами ли-
нии имеют целочисленные координаты по
у,
то определить, пересекает ли игла прямую, очень
просто - да, если целые части ординат тoчeк
A
и
В
1
различны.
Программа 155
Решение задачи Бюффона.
Program Buffon;
Uses Crt; Var I, J, K, M, N : Integer; XI, X2, Y1, Y2, Al : Real;
Begin
Randomize; M := 30000; N := 1;
For I := 1 To M Do
Begin
X1 := Random * 20; Yl := Random * 20; X2 := Random * 20;
Y2 := Random * 20;
A1 := 0.5 / Sqrt(Sqr(X2 – X1) + Sqr(Y2 - Yl) ) ;
J := Round(Yl); К := Round(Yl + A1 * (Y2 – Y1));
668
If J <> К Then N := H + 1
End;
WriteLn('pi=', W / N) : 8 : 5); Repeat Until KeyPressed
End.
Создание демонстрационной программы, которая выводит на экран несколько параллель-
ных прямых из общего набора и имеющие к ним отношение «иглы», предоставляем читателю.
Рекомендуем провести с предложенной программой несколько экспериментов. Понятно,
что чем больше значение
т,
тем, по-видимому, точнее результат. Однако. почему он постоянно
слегка занижен? Все ли учтено на краях той зоны, в которой разыгрываются броски иглы? Чтобы
почувствовать проблему, следует увеличить число параллельных прямых, что в данной программе
очень легко сделать. Почему результат становится лучше? Отметим, что проблема краевых усло-
вий, когда события должны по условиям задачи разыгрываться на бесконечном поле, а при имита-
ционном моделировании фактически разыгрываются на конечном (и даже не очень большом),
возникает часто и решение ее нетривиально.
3. Нефтяное месторождение.
Дано нефтяное месторождение, в котором область залегания
нефти
G
ограничивается кривой
С.
Дебит скважины, т.е. количество получаемой из нее нефти в
единицу времени, зависит от пластового давления нефти
U
в точке скважины. Поэтом) для про-
гнозирования нефтедобычи важно знать распределение пластового давления на всем месторожде-
нии при условии, что оно экспериментально измерено лишь на его границе. В математическом
плане функция
U(r)
удовлетворяет уравнению Лапласа
)
(
2
r
U
= 0; задача нахождения его реше-
ния внутри области при заданном значении
U(r)
на границе - так называемая, краевая задача Ди-
рихле; в данной задаче это решение, которое часто совсем не просто найти аналитически, позво-
лило бы правильно определить точку для скважины.
Рис. 7.61. Наложение сетки на заданную область
Покроем область
G
мелкой сеткой. Отметим узлы, наиболее близкие к границе
С,
и будем
считать, что значения функции
U
в этих узлах приблизительно равны значениям этой функции в
ближайших к ним точках границы. Будем искать значение функции
U(A)
в некотором внутреннем
узле
A
(рис. 7.61).
Поместим в точке
А
блуждающую частицу, которая может перемещаться по области в по-
следовательные моменты времени, переходя из одного угла в соседний. Направления перемеще-
ний случайны, равновероятны и не зависят от ее положения и предыстории блуждания. Случай-
ный эксперимент состоит в наблюдении факта выхода блуждающей частицы в некоторый гранич-
ный узел. Когда блуждание прекращается, запоминается значение функции
f
(
с
i
) в этой точке, и так
далее,
N
раз. Замечательный факт состоит в том, что решение в точке
Другими словами, среднее значение приближенно равно решению задачи Дирихле в точке
А.
4. Модель «пьяницы» (модель случайного блуждания).
Зададим блуждание точки (объ-
екта) по горизонтальной линии по правилу: если случайное число из интервала [0, 1] меньше 0,5,
то точка делает шаг вправо
x
= х +
h
, в противном случае
x
= х - h.
669
Программа 156.
Модель случайного блуждания
Program Tochka;
Uses Crt, Graph; Var I, J : Integer; Z, P, X, H, Y : Integer;
Begin
X := 320; Y := 240; H := 10; P := 4; DetectGraph(I, J) ;
InitGraphd, J, ");
SetColor(15); Line(10, 312, 630, 312); Randomize;
Repeat
Z := Random(8); If Z >= P Then X := X + H Else X := X - H;
SetColor(Green); Circle(X, Y, 10); Delay(200);
SetColor(0); Circle(X, Y, 10)
Until KeyPressed Or (X >= 640) Or (X <= 0); CloseGraph
End.
В программе шаг является постоянным, но никто не мешает нам сделать его переменным,
выбирая из интервала [0, hmax] случайным образом. Для этого зададим максимально возможный
шаг
НМах
и в цикле определим
H := Random(HMax).
Если задать аналогичным образом вероятности движения точки вверх – вниз, вправо - вле-
во (0 <
рх <
1, 0
< рy <
1), получим хаотическое блуждание точки на плоскости. Для моделирова-
ния блуждания точки в замкнутом прямоугольном объеме примем абсолютно упругое (зеркаль-
ное) отражение от стенок.
Программа 157.
Хаотическое блуждание точки
Program Broun;
Uses Crt, Graph;
Var I, J, X, Y, HxMax, HyMax, Hx, Ну : Integer; PI, P2, Z1, Z2 : Real;
Begin
X := 320; Y :== 240; HxMax := 30; PI := 0.5; P2 := 0.5; HyMax := 30;
DetectGraph (I, J) ; InitGraph (1, J, ''); SetColor(15);
Randomize; RectAngle(100, 100, 540, 380);
SetColor(Green); Circle(X, Y, 10); Delay(200); SetColor(0);
Circle(X, У, 10);
Repeat
Zl := Random; Z2 := Random; Hx := Random(HxMax);
Ну := Random(HyMax) ;
If (Zl < PI) Then X := X + Hx Else X := X - Hx;
If (Z2 < P2) Then Y := Y + Ну Else Y :" У - Ну;
If X <= 110 Then X := X + 2 * (110 - X) ;
If X >= 530 Then X := X - 2 * (-530 + X) ;
If Y <= 110 Then Y := Y + 2 * (110 - Y) ;
If Y >= 370 Then Y := Y - 2 * (Y - 370);
SetColor(Green); Circle(X, Y, 10); Delay(100);
SetColor(0); Circle(X, Y, 10)
Until Keypressed; CloseGraph
End.
Подобным (хотя и более сложным) образом происходит броуновское движение, хорошо из-
вестное из курса физики. Если след точки не стирать, то можно будет наблюдать на экране траек-
торию такого движения. Нет большого труда перейти к случаю
п
частиц. Для этого необходимо
завести два массива координат точек и аналогично предыдущему примеру организовать их дви-
жение.
Программа 158.
Броуновское движение
Program Gaz;
Uses Crt, Graph;
Var I, J, HxMax, HyMax, Hx, Ну, N, I : Integer;
X, Y : Array[0..500] Of Integer; PI, P2, Z1, Z2 : Real;
670
Begin N := 100;
For I := 1 To N Do Begin X[I] := 320; Y[I] := 240 End;
HxMax := 10; PI := 0.5; P2 := 0.5; HyMax := 10;
DetectGraph (1, J) ; InitGraphd, J, ' '); SetColor(15);
Randomize; RectAngle(100, 100, 540, 380);
For I := 1 To N Do PutPixel(X[I], Y[I], White); Delay(200);
For I := 1 To N Do PutPixel(X(I], Y[I], 0) ;
Repeat
For I := 1 To N Do
Begin
Zl := Random; Z2 := Random;
Hx := Random(HxMax); Ну := Random(HyMax);
If Zl < PI Then X[I] := X[I] + Hx Else X[I] := X[I]— Hx;
If Z2 < P2 Then Y[I] := Y[I] + Ну Else Y[I] := Y[I] - Ну;
If X[I] <= 110 Then X[I] := X[I] + 2 * (110 - X[I]);
If X(I] >= 530 Then X[I] := X[I] - 2 * (-530 + Х[I];
If Y[I] <= 110 Then Y(I] := Y[I] + 2 * (110 - Y[I]);
If Y[I] >= 370 Then Y[I] := Y[I] - 2 * (Y[I] - 370);
PutPixel (X[I], Y[I], 15)
End; Delay(100);
For I := 1 To N Do PutPixel(X[I], Y[I], 0)
Until KeyPressed; CloseGraph
End.
Построенная компьютерная модель в первом приближении может позволить моделировать
многие явления и процессы, происходящие в газах: рассеивание облака, диффузия газов. С ее по-
мощью можно получить многие зависимости параметров газа друг от друга. В частности, давление
(число соударений частиц на стенки) от длины свободного пробега (величин
HxMax
и
HyMax)
или от числа частиц.
Представляет значительный интерес имитационное моделирование явлений в сплошных
средах, удовлетворяющих законам идеального газа, таких, как истечение газа в вакуум, ударная
волна, волны разрежения и т.п. Для модернизации модели можно ввести в алгоритм упругое
столкновение частиц друг с другом, возникновение кластерных ансамблей и многое другое.
При вероятностном моделировании используют
различные методы, которые
позволяют
решать задачи из различных областей. Ниже перечислены сферы применения вероятностных ме-
тодов.
Метод статистического моделирования: решение краевых задач математической физики,
решение систем линейных алгебраических уравнений, обращение матриц и сводящиеся к ним се-
точные методы решения систем дифференциальных уравнений, вычисление кратных интегралов,
решение интегральных и интегродифференциальных уравнений, задач ядерной физики, газовой
динамики, фильтрации, теплотехники.
Метод имитационного моделирования: моделирование систем массового обслуживания, за-
дачи АСУ, АСУП и АСУТП, задачи защиты информации, моделирование сложных игровых си-
туаций и динамических систем.
Метод стохастической аппроксимации: рекуррентные алгоритмы решения задач статисти-
ческого оценивания.
Метод случайного поиска: решение задач оптимизации систем, зависящих от большого
числа параметров, нахождение экстремумов функции большого числа переменных.
Другие методы: вероятностные методы распознавания образов, модели адаптации, обуче-
ния и самообучения.
Контрольные вопросы и задания
Для ответов на эти вопросы может понадобиться выход за пределы кратких сведений, из-
ложенных в данном параграфе.
1. Какие случайные события называют достоверными? невозможными? несовместимыми?
противоположными?