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

UptoLike

последнего элемента config, удаляем первый элемент и записываем новую конфигурацию
в path.
4. Вычисляем новую длину ББС и добавляем к squaredist.
5. Выполняем последовательность шагов 2-4 m раз, начиная с начальной конфигурации.
6. Определяем среднее значение длины ББС, строим графики.
Реализация алгоритма
Шаг 1a. Начальное ББС задается с помощью таблицы.
config = Table[{i, r}, {i, r, r + n}];
Шаг 1b. Вычисляем квадрат длины начального ББС.
squaredist = n^2
Шаг 2. Случайным образом выбираем приращение шага и добавляем к последнему
элементу в config, чтобы получить новое положение шага.
newpt = Last[config] + choice[[Random[Integer, {1, 4}]]];
Шаг 3. newpt сравнивается с config, чтобы проверить не совпадает ли он с любым шагом
config, кроме первого шага.
MemberQ[Rest[config], newpt]
Если произошло пересечение, то config переписывается задом наперед, и конечная ББС
конфигурация записывается в config2.
config2 = Reverse[config]
Если пересечения нет, то первый шаг config удаляется, newpt добавляется к результату,
и новая ББС конфигурация записывается в path.
config2 = Append[Rest[config], newpt]];
Эти три фрагмента можно объединить в условную функцию.
If[MemberQ[Rest[config], newpt], config2 = Reverse[config],
config2 = Append[Rest[config], newpt]];
Шаг 4. Получаем новую конфигурацию ББС.
config = config2;
Вычисляем новую длину ББС и добавляется к squaredist.
squaredist +=
Plus @@ ((First[config] - Last[config])^2);
Можно объединить шаги 2-4 как часть программы:
snake := (choice = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
newpt = Last[config] + choice[[Random[Integer, {1, 4}]]];
If[MemberQ[Rest[config], newpt], config2 = Reverse[config],
config2 = Append[Rest[config], newpt]]; config = config2; )
Шаг 5. Для того, чтобы выполнить m шагов организуем цикл с помощью команды Do
Do[snake, {m}]
72