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

UptoLike

Использование функции livingNghbrs можно продемонстрировать на простом примере
TableForm[board=Table[Random[Integer],{3},{3}]]
0 0 0 0
1 1 0 1
0 1 0 0
0 1 1 1
TableForm[livingNghbrs[board]]
5 4 5 4
3 2 3 1
6 4 6 4
3 2 3 1
Элемент в матрице livingNghbrs[board]] представляет собой число живущих соседей
соответствующего элемента матрицы board с учетом границ.
bc = Join[{Last[#]}, #, {First[#]}]&;
TableForm[Partition[bc[Map[bc, board]],
{3,3}, {1,1}] ]
1 0 1 0 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 1 0 1 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 1 0 1 0 1 1
0 0 1 0 1 0 1 0 0 0 0 0
1 1 1 1 1 0 1 0 1 0 1 1
0 0 1 0 1 0 1 0 0 0 0 0
1 0 1 0 1 1 1 1 1 1 1 0
0 0 1 0 1 0 1 0 0 0 0 0
1 0 1 0 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0
3. Правил преобразований для определения рождения и смерти клетки необходимо задать
столько, сколько необходимо - не больше некоторого оптимального их количества.
Например, мы можем определить для каждого возможного соседа update[{{0,1,0},
{0,1,0}, {0,1,0}, {0,0,0}}] := 0 ), но такой подход привел бы к 9^2=512 условиям,
т.к. каждая из 9-ти клеток может иметь два значения. Ввести такое количество правил в
текст программы затруднительно. Вместо этого условия рождения и смерти можно выразить
минимальным количеством правил с помощью следующих функций:
update[1, 2] := 1;
update[_, 3] := 1;
update[_, _] := 0;
Attributes[update] = Listable;
Первый аргумент update’а - это значение центральной клетки окрестности (из 9-ти клеток),
а второйэто число ближайших живых соседей. Функция update является атрибутом
(свойством) Listable. И когда update применяется к матрице значений клеток (board) и к
матрице количества живущих соседей этих клеток (livingNghbrs[board]), то она
создает матрицу с элементами в виде update-функций, аргументами которых являются
соответствующие элементы этих двух матриц.
134