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

UptoLike

If[i1 == n, dn = 1, dn = i1+1];
If[i2 == n, rt = 1, rt = i2+1];
If[i1 == 1, up = n, up = i1-1];
If[i2 == 1, lt = n, lt = i2-1];
3б. Изменение энергии, которое получается в результате переворота спина на выбранном
месте определяется выражением: 2(B+J), где 2 - количество взаимодействующих ячеек, J -
полный спин соседних ячеек. B, J - задаваемые величины.
2 lat[[i1, i2]] (B + J nnvalsum)
где nnvalsum - полный спин соседей
nnvalsum = lat[[dn, i2]]+lat[[up, i2]]+lat[[i1, rt]]+lat[[i1, lt]]
Величина lat[[i1,i2]] может принимать значения 1,-1 , а величина nnvalsum значения
4( все спины направлены вверх), 2 (три вверх и один вниз), 0 (два вверх и два вниз), -2 (три
вниз, один вверх), -4 (все четыре вниз). Таким образом, при переворачивании спина можно
получить десять вариантов значений изменения энергии.
Пред тем как рассчитать изменение энергии, создадим таблицу ее возможных значений:
energydiff[ 1, 4] = 2 (B + 4J); energydiff[ 1, 2] = 2 (B + 2J);
energydiff[ 1, 0] = 2 (B + 0J); energydiff[ 1,-2] = 2 (B - 2J);
energydiff[ 1,-4] = 2 (B - 4J); energydiff[-1, 4] = -2 (B + 4J);
energydiff[-1, 2] = -2 (B + 2J); energydiff[-1, 0] = -2 (B + 0J);
energydiff[-1,-2] = -2 (B - 2J); energydiff[-1,-4] = -2 (B - 4J);
Согласно условию, отрицательное значение величины energydiff означает понижение
энергии решетки, а положительное значение этой величины - увеличение энергии решетки.
4. Используя метод Метрополиса, решаем нужно ли переворачивать спин на выбранном
месте:
4а. Проверяем, не получается ли при перевороте спина отрицательное значение изменения
энергии. Энергия поверхности понижается в результате переворота (т.е., если energydiff
- отрицательна).
energydiff[lat[[i1, i2]], nnvalsum] < 0
4б. Если изменение энергии неотрицательно, проверяем, выполняется ли условие, такое,
что экспонента от величины изменения энергии с минусом должна быть больше случайного
числа от 0 до1.
Энергия решетки повышается в результате переворота, но величина
exp[-energydiff], больше чем случайное число от 0 до 1.
Random[] < Exp[-energydiff[lat[[i1, i2]], nnvalsum]
Чем больше увеличение энергии при перевороте, тем больше положительная величина
energydiff, следовательно, уменьшается значение экспоненты и увеличивается вероятность
выполнения вышеописанного условия.
4в. Если хотя бы одно из этих условий выполняется, переворачиваем спин.
lat[[i1, i2]] = -lat[[i1, i2]]
4г. Возвращаем значение получившейся конфигурации.
Метод Метрополиса, (пп. 4а-г), выражается условием
If[energydiff[lat[[i1, i2]], nnvalsum] < 0 ||
Random[] < Exp[-energydiff[lat[[i1, i2]], nnvalsum],
lat[[i1, i2]] = -lat[[i1, i2]]; lat, lat]
149