小白,這個很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...