ВУЗ:
Составители:
белых ячеек, другая из черных и нет соседних ячеек одного и того же цвета (диагональные
соседние ячейки не рассматриваем).
Обновление решетки выполняется в следующие два этапх:
а) значения спинов нечетных ячеек обновляются, используя значения четных соседних
ячеек
б) значения четных ячеек обновляются, используя уже обновленные значения (в
предыдущем этапе) нечетных соседних ячеек.
Каждая подрешетка обновляется, используя следующие семь правил
update[x_, -1, -1, 1, 1] := -x;
update[x_, -1, 1, -1, 1] := -x;
update[x_, -1, 1, 1, -1] := -x;
update[x_, 1, -1, -1, 1] := -x;
update[x_, 1, -1, 1, -1] := -x;
update[x_, 1, 1, -1, -1] := -x;
update[x_, _, _, _, _] := x;
Attributes[update] = Listable
Пять аргументов функции update - это ячейки соседствующие с выбранной (анализируемой
в настоящее время) ячейкой. Рассмотрим их по порядку: 1- выбранный участок (обозначен
как x), 2- верхний сосед, 3 - левый сосед, 4- правый сосед и 5 - сосед снизу. Первые шесть
правил переориентируют спин ячейки, если имеется равное число верхних и нижних спинов
в соседних ячейках. Последнее правило оставляет спин неизменным.
Используя функцию update, создадим линейные списки ячеек в каждой подрешетке и
возможных соседних ячеек для каждой подрешетки. Это можно продемонстрировать,
используя простую решетку
(mat = Partition[Range[30], 5])//MatrixForm
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
Следующие линейные списки можно создать с помощью mat:
oddSites = Flatten[Partition[Flatten[mat], 1, 2]]
{1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29}
evenSites = Flatten[Partition[Rest[Flatten[mat]], 1, 2]]
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30}
ngbrsNorthOfOddSites = RotateLeft[evenSites, (-5 - 1)/2]
{26, 28, 30, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24}
ngbrsWestOfOddSites = RotateLeft[evenSites, -1]
{30, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28}
ngbrsEastOfOddSites= RotateLeft[evenSites, 0]
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30}
ngbrsSouthOfOddSites = RotateLeft[evenSites , (5 - 1)/2]
{6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 2, 4}
ngbrsNorthOfEvenSites = RotateLeft[oddSites, (-5 + 1)/2]
{27, 29, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25}
ngbrsWestOfEvenSites = RotateLeft[oddSites, 0]
{1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29}
143
Страницы
- « первая
- ‹ предыдущая
- …
- 141
- 142
- 143
- 144
- 145
- …
- следующая ›
- последняя »