Моделирование перколяционного кластера. Гуньков В.В. - 6 стр.

UptoLike

Составители: 

Рубрика: 

метку соседней. В случае, если заняты одновременно ячейки и снизу, и
слева, необходимо выбрать наименьшую из меток соседей. Такая ситуация
впервые встречается в ячейке (6,2): слева имеется занятая ячейка,
помеченная 5, снизуячейка с меткой 4. Необходимо выбрать метку 4 и в
дальнейшем все время метку 5 заменять на метку 4.
Для запоминания меток, подлежащих замене, вводится
одномерный массив index. Количество элементов массива должно
заведомо превышать количество возможных меток, в большинстве случаев
можно предполагать, что меток будет не больше numx*numy*p.
Изначально каждому элементу массива index присваивается его
порядковый номер:
index=Table[i,{i,numx numy p}];
Если необходимо запомнить, что, например, вместо метки 5 нужно
использовать метку 4, в массиве index элементу номер 5 присваивается
значение 4.
Ниже приведен цикл, который просматривает все ячейки и
проводит их предварительную индексацию.
Do[
If[m[[i,1]]!=0,
If[m[[i-1,1]]!=0,
m[[i,1]]=index[[m[[i-1,1]]]],
mark=mark+1;m[[i,1]]=mark]];
Do[
If[m[[i,j]]!=0,
If[m[[i-1,j]]!=0&&m[[i,j-1]]!=0,
m[[i,j]]=
index[[Min[m[[i-1,j]],m[[i,j-1]]]]];
index[[Max[m[[i-1,j]],m[[i,j-1]]]]]=
Min[m[[i-1,j]],m[[i,j-1]]],
If[m[[i,j-1]]!=0,
m[[i,j]]=index[[m[[i,j-1]]]],
If[m[[i-1,j]]!=0,
m[[i,j]]=index[[m[[i-1,j]]]],
mark=mark+1;m[[i,j]]=mark]]]],
{j,2,numx}],
{i,2,numy}]
При выполнении этой программы может возникнуть ситуация,
когда в массиве index содержится информация о последовательном
переобозначении меток. Например, метку 11 нужно помечать как 7, метку
7 – как 5, метку 5 – как четыре. Поэтому на данном этапе необходимо
пересмотреть массив index для устранения последовательных ссылок.
метку соседней. В случае, если заняты одновременно ячейки и снизу, и
слева, необходимо выбрать наименьшую из меток соседей. Такая ситуация
впервые встречается в ячейке (6,2): слева имеется занятая ячейка,
помеченная 5, снизу – ячейка с меткой 4. Необходимо выбрать метку 4 и в
дальнейшем все время метку 5 заменять на метку 4.

       Для запоминания меток, подлежащих замене, вводится
одномерный массив index. Количество элементов массива должно
заведомо превышать количество возможных меток, в большинстве случаев
можно предполагать, что меток будет не больше numx*numy*p.
Изначально каждому элементу массива      index присваивается его
порядковый номер:
  index=Table[i,{i,numx numy p}];

      Если необходимо запомнить, что, например, вместо метки 5 нужно
использовать метку 4, в массиве index элементу номер 5 присваивается
значение 4.

      Ниже приведен цикл, который просматривает все ячейки и
проводит их предварительную индексацию.
Do[
  If[m[[i,1]]!=0,
    If[m[[i-1,1]]!=0,
      m[[i,1]]=index[[m[[i-1,1]]]],
      mark=mark+1;m[[i,1]]=mark]];

  Do[
    If[m[[i,j]]!=0,
      If[m[[i-1,j]]!=0&&m[[i,j-1]]!=0,
        m[[i,j]]=
              index[[Min[m[[i-1,j]],m[[i,j-1]]]]];
          index[[Max[m[[i-1,j]],m[[i,j-1]]]]]=
              Min[m[[i-1,j]],m[[i,j-1]]],
        If[m[[i,j-1]]!=0,
          m[[i,j]]=index[[m[[i,j-1]]]],
          If[m[[i-1,j]]!=0,
            m[[i,j]]=index[[m[[i-1,j]]]],
            mark=mark+1;m[[i,j]]=mark]]]],
    {j,2,numx}],
  {i,2,numy}]

      При выполнении этой программы может возникнуть ситуация,
когда в массиве index содержится информация о последовательном
переобозначении меток. Например, метку 11 нужно помечать как 7, метку
7 – как 5, метку 5 – как четыре. Поэтому на данном этапе необходимо
пересмотреть массив index для устранения последовательных ссылок.