ВУЗ:
Составители:
5. Выполним последовательность шагов 2-4 m раз.
Используя вышеперечисленные фрагменты кода, можно составить программу для модели
Изинга и получения динамики намагниченности mag:
s := (
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);
{i1, i2} = {Random[Integer,{1, n}], Random[Integer,{1, n}]};
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];
nnvalsum = lat[[dn, i2]] + lat[[up, i2]] +lat[[i1, rt]] + lat[[i1, lt]];
If[energydiff[lat[[i1, i2]],nnvalsum] < 0 ||
Random[] < Exp[-energydiff[lat[[i1, i2]], nnvalsum]],
lat[[i1, i2]] = -lat[[i1, i2]];lat,lat];Return[lat]
)
n = 50; m = 100; B = 0; J = -0.1;
initconfig = 2*Table[Random[Integer], {n}, {n}] - 1; lat = initconfig;
T=Table[0,{m}]; mag=Table[0.,{m}];
Do[T[[i]] = s; l = Flatten[T[[i]]]; nl = Length[l];
mag[[i]] = Abs[Sum[l[[j]], {j, 1, nl}]]/nl^2, {i, 1, m}]
ListPlot[mag, PlotJoined -> True]
Получим один из результатов операции "переворота" 1000 раз на решетке 50x50 системы,
для которой B/kT = 0 и J/kT = -0.1:
200 400 600 800 1000
2ґ 10
-6
4ґ 10
-6
6ґ 10
-6
8ґ 10
-6
0.00001
0.000012
0.000014
С помощью функции ListDensityPlot и оператора Do, можно просмотреть состояние
модели Изинга T[[i]] на любом шаге. Ниже приведен результат при n=10 через каждые 10
шагов.
0 2 4 6 8 10
0
2
4
6
8
10
0 2 4 6 8 10
0
2
4
6
8
10
0 2 4 6 8 10
0
2
4
6
8
10
0 2 4 6 8 10
0
2
4
6
8
10
0 2 4 6 8 10
0
2
4
6
8
10
0 2 4 6 8 10
0
2
4
6
8
10
0 2 4 6 8 10
0
2
4
6
8
10
Любой набор таких пошаговых снимков можно анимировать.
150
Страницы
- « первая
- ‹ предыдущая
- …
- 148
- 149
- 150
- 151
- 152
- …
- следующая ›
- последняя »