Компьютерное моделирование физических явлений. Малютин В.М - 111 стр.

UptoLike

1. Занимается одна затравочная ячейка решетки. Четыре соседних
ячейки образуют периметр затравочной ячейки.
2. Выбирается случайным образом ячейка периметра и генерируется
случайное число r. Если r p, то ячейка занимается, в противном
случае она остается свободной. Чтобы ячейки были свободными с
вероятностью 1 - p, данная ячейка больше не проверяется.
3. Если ячейка занята, то определяется, нет ли новых ячеек периметра,
т.е. непроверенных соседних ячеек. Эта процедура продолжается до
тех пор, пока не получитсяне вырастет») кластер требуемого
размера или пока не останется непроверенных ячеек.
Рис. 6.3. Пример роста перколяционного кластера: ячейки занимаются с
вероятностью p = 0.6 и остаются пустыми с вероятностью 1– р;
затравочная ячейка закрашена черным цветом, периметр обозначен
буквой p, а проверенные пустые ячейкибуквой x; для каждого шага
роста приведено число ячеек nper, расположенных по периметру
Программа для роста перкаляционного кластера
Epidemic[n_, p_]:=
Module[{choices = {{1,0},{0,1},{-1,0},{0,-1}},
reject, pickAndChoose, select, newpers},
reject = {};
pickAndChoose :=
(select = #[[2,Random[Integer,{1,Length[#[[2]]]}]]];
If[Random[] <= p,
newPers =
Complement[Union[Map[Function[y, y + select],
choices], #[[2]]],
{select}, #[[1]], reject];
{Join[#[[1]],{select}], newPers},
reject = Join[reject, {select}];
{#[[1]], Complement[#[[2]], {select}]}])&;
FixedPoint[pickAndChoose, {{{0, 0}}, choices}, n,
SameTest -> (#2[[2]] == {} ||
Length[#2[[1]]] == n &)][[1]]
]
111