Ising模型的2D模擬

2021-08-21 22:05:29 字數 2387 閱讀 6848

小白,這個很easy的模型我的演算法比較冗雜,而且以前主要用的mma,第一次用matlab…主要是想說明一下物理思路

先上圖

%第一次用matlab,物理系學生,沒有系統的接觸過程式設計,不是很熟悉,很多演算法很冗雜,甚至有些公式不是很精確,望見諒

%缺點:迴圈有兩個,運算較慢

%建立乙個隨機矩陣,再選取任意一點比較反向和不反向的能量差別,確定是否翻轉

clear all

s=2*(randi([0,1],100,100)-0.5)%建立隨機1,-1矩陣,由於是偽隨機數,可能有很大誤差

j=1

h=0.2

for l=1:9

x=[400,600,800,1000,1200,1400,1600,1800,2000]

t=x(l)

e=0for t=1:6500

i=randi([2,99])%忽略邊界,如果需要討論,分別取i,j等於1,100即可

j=randi([2,99])

a=[i-1,j;i+1,j;i,j-1;i,j+1]

%隨機取乙個相鄰原子

b=randi([1,4])

c=a(b,:)

i1=c(1)

j1=c(2)

energybefore=-j*s(i,j)*s(i1,j1)-h*s(i,j)*s(i1,j1)

energyafter=j*s(i,j)*s(i1,j1)+h*s(i,j)*s(i1,j1)

energydifference=energyafter-energybefore

p=1/(1+exp(energydifference/t));

if (energydifference<0)

s(i,j)=-s(i,j)

e=p*energyafter+(1-p)* energybefore%期望值

else s(i,j)=s(i,j)

e=energybefore;

endif t>1000

%1000次以後可以認為達到了熱平衡

e=e+e/5500

endend

if (l==1)

e1=e

s1=s

elseif (l==2)

e2=e

s2=s

elseif (l==3)

e3=e

s3=s

elseif (l==4)

e4=e

s4=s

elseif (l==5)

e5=e

s5=s

elseif (l==6)

e6=e

s6=s

elseif (l==7)

e7=e

s7=s

elseif (l==8)

e8=e

s8=s

elseif (l==9)

e9=e

s9=s

endendy=[e1,e2,e3,e4,e5,e6,e7,e8,e9]

figure(1)

scatter(x,y,'filled')

xlabel('溫度')

ylabel('平均勢能')

figure(2)

subplot(3,3,1)

imshow(s1)

title('在400k的磁矩分布')

subplot(3,3,2)

imshow(s2)

title('在600k的磁矩分布')

subplot(3,3,3)

imshow(s3)

title('在800k的磁矩分布')

subplot(3,3,4)

imshow(s4)

title('在1000k的磁矩分布')

subplot(3,3,5)

imshow(s5)

title('在1200k的磁矩分布')

subplot(3,3,6)

imshow(s6)

title('在1400k的磁矩分布')

subplot(3,3,7)

imshow(s7)

title('在1600k的磁矩分布')

subplot(3,3,8)

imshow(s8)

title('在1800k的磁矩分布')

subplot(3,3,9)

imshow(s9)

title('在2000k的磁矩分布')

Python 方格仔Ising模型模擬

使用最簡單的逐點翻轉法逐點模擬 import time import numpy as np from numpy.random import rand import matplotlib.pyplot as pltdef init state n generates a random spin c...

2d的公式 繪製二體2D執行軌跡

本來想要繪製三體的3d軌跡,但是一開始難度有點大,先從最簡單的開始,二體類似地月系統 首先來定義乙個繪製函式 因為是乙個執行軌跡,所以時間就是必要因素 解決整體漂移問題 萬有引力計算函式 萬有引力公式為前半部分,後半部分其實是乙個單位向量,所以,計算結果為向量,這裡的萬有引力常數並不是真實的數值,這...

2D遊戲開發(2)

每次給遊戲新增新功能時,通常也會引入一些新設定。為了讓所有的設定進行統一管理,我們可以配置乙個名為 setting的模組,這個模組中包含乙個setting的類,用來儲存所有的設定。usr bin env python3.5 filename setting 儲存所有的設定 class setting...