Перколяции — доработка. Элементы редактирования.

Views: 203

В этой заметке я завершу предыдущую, предложив некоторые дополнения (изменения) кода и пояснения приемов редактирования в Maple

Читатели воспроизведшие опубликованный мною ранее код возможно обратили внимание на одну особенность. Именно, если перезапускать его (нажав например кнопку !!! в полосе под верхним меню), то картинки с перколяциями воспроизводятся те же, что и при предыдущем запуске. Это выглядит несколько странно, если мы хотим генерировать случайные перколяции. Такое поведение объясняется тем, что rand(a..b) создает генератор псевдослучайных чисел, которые не случайны — создаются в соответствии с некоторым детерменированным алгоритмом. При отладке программы такое поведение вполне приемлимо и может быть даже необходимо. Если мы хотим чтобы последовательность выглядела более случайным образом   необходимо инициализировать внутреннее состояние независимым случайным ключем (или зерном — seed). Эта операция выполняется с помощью функции randomize().  Случайный ключ генерируется из системного времени, и с его помощью  мы получаем неповторяющуюся последовательность псевдослучайных чисел.
Таким образом,  строчку с  rnd:= rand(0.0 .. 1.0): нужно переписать так:
randomize(): rnd:= rand(0.0 .. 1.0):
Ключ можно запомнить:
My_random_key:=randomize():rnd:= rand(0.0 .. 1.0):
Этот ключ затем можно использовать для воспроизведения той же последовательности псевдослучайных чисел:
randomize(My_random_key): rnd:= rand(0.0 .. 1.0):

Приведу наиболее часто употребляемые мной  сочетания клавиш используемых при редактировании. В общем случае все возможные используемые сочетания клавиш можно посмотреть нажав Ctrl+F1  (пройдя в меню Help->Maple Help), затем Getting Started-> Shortcut Keys. Кроме общепринятых для всех редакторов Home, End, Ctrl+Home,
конечно принудительная новая строка:
Shift+Enter  и т.п.
имеются две очень часто используемые:
Ctrl+K  —  вставляет исполняемую группу перед курсором;
Ctrl+J  —  вставляет исполняемую группу после курсора;
Исполняемая группа это все, что написано после знака [>:
>“Исполняемая группа 1,
продолжение исполняемой группы 1“;
>“Исполняемая группа 2.“:
Также в начале работы устанавливаем увеличение (Zoom Factor):
Ctrl+цифра от 0 до 7.
Обращаю внимание на то, что Maple сам перенесет строку в окне если она не помещается, но здесь надо быть внимательным. Лучше не допускать таких длинных строк. Для этого используйте принудительный перенос (Shift+Enter). Возможная ошибка связана с использованием символа коментария #. Если вы его вставили в середине длинной строки, в которой нет принудительных переносов, а есть только «визуальные»  переносы сделанные Maple, то закомментируется (естественно) вся часть строки после #. Можно закоментировать несколько строк одной исполняемой группы сразу, взяв коментируемую часть кода в кавычки (как я сделал выше).
Также обращаю внимание на то, что в предыдущей заметке я не писал знак [>. Имелось в виду, что все приводимые куски кода являются отдельными исполняемыми группами с принудительными переносами.

Возможно, внимательные читатели заметили, что мой код можно несколько оптимизировать. В частности, вынести проверки верхнего ряда и и верхних углов под двойной цикл проверки внутренней части решетки.

Полный код в Maple описаной программы двумерной перколяции я опубликовал на сайте Maplesoft в разделе Application CenterСкачать.

Обобщения кода предыдущей заметки на трехмерную перколяцию несложно. Естественно, для самой перколяции (в цветовом формате MY_C или численном MY_N) следует использовать вместо списка списков (матрицы) тройной вложенный список. Одинарный цикл (для дна)  меняется на двойной (дно теперь двумерное), двойные циклы на тройные. Ну и конечно условия проверки для боковых граней и ребер надо переписать (в двумерном случае были две боковые стороны квадрата). Также теперь у нас 4 верхних угла вместо двух и 4 верхних боковых ребра что тоже требует изменений в коде.

Обобщение кода на случай не квадратных (не кубических) ячеек  более сложно. Здесь сначала нужно определиться с тем, какие формы и размеры ячеек допустимы в рассматриваемой физической задаче. Потом решать вопрос заполнения этими ячейками сосуда (теперь это уже не решетка). Затем уже делать алгоритм поиска проводящего кластера.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *