使用最简单的逐点翻转法逐点模拟

import time
import numpy as np
from numpy.random import rand
import matplotlib.pyplot as plt
def init_state(N):   ''' generates a random spin configuration for initial condition'''# np.random.randint(2, size=(N,N)) 表示产生N*N随机数,返回为列表state = 2*np.random.randint(2, size=(N,N))-1return state
def flipping(grid, beta):'''Monte Carlo move using Metropolis algorithm '''N = len(grid)for i in range(N):for j in range(N):# 产生0到N-1的随机数a = np.random.randint(0, N)b = np.random.randint(0, N)s = grid[a][b]E = grid[(a+1)%N][b] + grid[a][(b+1)%N] + grid[(a-1)%N][b] + grid[a][(b-1)%N]cost = 2*s*E# 如果能量降低接受翻转if cost < 0:s *= -1# 在0到1产生随机数,如果概率小于exp(-E/(kT))翻转elif rand() < np.exp(-cost*beta):s *= -1grid[a][b] = sreturn grid
def calculate_energy(grid):'''Energy of a given configuration'''energy = 0N = len(grid)for i in range(N):for j in range(N):S = grid[i][j]E = grid[(i+1)%N][j] + grid[i][(j+1)%N] + grid[(i-1)%N][j] + grid[i][(j-1)%N]# 负号来自哈密顿量energy += -E*S# 最近邻4个格点return energy/4def calculate_magnetic(grid):'''Magnetization of a given configuration'''mag = np.sum(grid)return mag

参数设置

nt      = 2**8        # 温度取点数量
N       = 2**4        # 点阵尺寸, N x N
eqSteps = 2**10       # MC方法平衡步数
mcSteps = 2**10       # MC方法计算步数Energy = [] # 内能
Magnetization  = [] # 磁矩
SpecificHeat = []  # 比热容/温度的涨落
Susceptibility = [] # 磁化率/磁矩的涨落T= np.linspace(1.2,3.8,nt)
T =list(T)n1 = 1/mcSteps*N*N
n2 = 1/mcSteps**2*N*N

开始模拟

time_start=time.time()
j = 0
for t in T:# 初始构型E = 0 # 每一温度下的能量M = 0 # 每一温度下的磁矩cv = 0 # 每一温度下的热容k = 0 # 每一温度下的磁化率config = init_state(N)# 热浴,达到平衡态for i in range(eqSteps):flipping(config, 1/t)# 抽样计算for i in range(mcSteps):flipping(config, 1/t)e = calculate_energy(config)m= calculate_magnetic(config)E += eM += mcv += e*ek += m*mCv = (n1*cv - n2*E*E)/(t*t)K = (n1*k - n2*M*M)/tEnergy.append(E*n1)Magnetization.append(M*n1)SpecificHeat.append(Cv)Susceptibility.append(K/(mcSteps**2*N*N))j +=1if j%10==0:print("已完成第%d步模拟" %j)
time_end=time.time()
print('totally cost',time_end-time_start)

处理画图

Magnetization = np.array(Magnetization)f = plt.figure(figsize=(18, 10)); # plot the calculated values    sp =  f.add_subplot(2, 2, 1 );
plt.plot(T, Energy, 'o', color="red");
plt.xlabel("Temperature (T)", fontsize=20);
plt.ylabel("Energy ", fontsize=20);sp =  f.add_subplot(2, 2, 2 );
plt.plot(T, abs(Magnetization), 'o', color="blue");
plt.xlabel("Temperature (T)", fontsize=20);
plt.ylabel("Magnetization ", fontsize=20);sp =  f.add_subplot(2, 2, 3 );
plt.plot(T, SpecificHeat, 'o', color="red");
plt.xlabel("Temperature (T)", fontsize=20);
plt.ylabel("Specific Heat ", fontsize=20);sp =  f.add_subplot(2, 2, 4 );
plt.plot(T, Susceptibility, 'o', color="blue");
plt.xlabel("Temperature (T)", fontsize=20);
plt.ylabel("Susceptibility", fontsize=20);

Python 方格子Ising模型模拟相关推荐

  1. 二维方格子Ising模型代码

    #include <iostream> #include <cstdlib> #include <cmath> #include <fstream> # ...

  2. 只显示小方格_不妨谈谈二维方格子吧

    (想借该模型 讲清直积态以及TB Model哈密顿量) 入手复杂的事物之前,从手算几个简单的例子开始是最好的. 所以,不妨谈谈二维方格子吧. 一个复杂的晶体,其内部的具有复杂的元胞(最小重复单元),每 ...

  3. 给定一个8*8的方格子,A点到B点的最短路径有多少条?

    题目:给定一个8*8的方格子,如下图所示,求A点到B点的最短路径有多少条?用算法实现.(回溯法) 广度优先搜索只能找出一条最短路径 答:从图中可以看出,A点到B点的最短路径为16,即A点横走8小格,纵 ...

  4. 有一个方格子,A点在左下角,B点在右上角,求A点到B点的最短路径数量

    博主的第十篇博客,特此标记纪念. 概述 有一个方格子,A点在左下角,B点在右上角,求A点到B点的最短路径有多少条. 思路 我们这里假设方格子是8*8的方格.题目有时会混淆,A和B有没有占用左下角和右上 ...

  5. 一个8*8的方格子,A点在左下角,B点在右上角,求A点到B点的最短路径有多少条

    题目:  一个8*8的方格子,A点在左下角,B点在右上角,求A点到B点的最短路径有多少条 偶然看到一个求最短路径的题目, 感觉有趣所以分析了下, 此类问题不外乎递归排列.或者有规律的数列. 若只关 ...

  6. Excel 方格子插件、DIY工具箱

    小编通过使用这两款插件,极大的方便了Excel的操作,特意在此做一分享. 插件图示: DIY工具箱: 方格子插件: 下载地址:https://download.csdn.net/download/qq ...

  7. 深入理解python.md_跟黄哥学python序列文章之python方法链(method chaining)

    跟黄哥学python序列文章之python方法链(method chaining) 写这篇文章来由,有朋友说下面这样的代码看不懂. choice = raw_input("please in ...

  8. Python数字图像处理---1.1图像的像素格式与图像读写

    目录 前言 图像像素格式 图像读写 前言 本专栏面向所有希望或有兴趣从事数字图像处理工作.学习或研究的朋友,编程语言采用了当下最火的Python语言. Python是一种跨平台的计算机设计语言,也是一 ...

  9. python可视化的图表汉字显示成框框_数据可视化——Matplotlib输出中文显示问题...

    写在前面 在学习可视化过程中,Matplotlib是其余Python可视化工具包的基础,是它们的老祖宗. Matplotlib是一个用于绘制高质量图形的Python第三方包,一般将其简写成mpl(ma ...

最新文章

  1. nginx 负载均衡的4种方式
  2. ThinkPHP下隐藏index.php以及URL伪静态
  3. VDI序曲九 实战体验Remote FX(重磅推荐)
  4. 豆瓣9.6分!这部BBC的纪录片太让人震撼!
  5. mysql的配置以及后端数据库的连接
  6. Oracle 11g的下载与安装
  7. 【Java多线程】停止线程
  8. 解决mac系统压缩文件.zip,在win解压后,出现乱码
  9. Spring核心--容器详解
  10. java集成极光推送
  11. windows下如果批量修改文件的后缀名
  12. CuraEngine和Cura配置(Ubuntu18.04环境)
  13. 阿里天池数据分析入门 利用Pandas分析数据
  14. 乐固、360加固在android 11 上报错,无法安装
  15. 一文解析linux spinlock/rwlock/seqlock原理(基于ARM64)
  16. 一种Vin码扫描识别sdk技术
  17. HTML期末作业-基于HTML+CSS+JavaScript制作学生信息管理系统模板
  18. XManager5连接CentOS7
  19. XiaoMi-Ruby-15.6-UMA-only黑苹果efi引导文件
  20. (三)java流程控制语句

热门文章

  1. leetcode 896单调数列
  2. m-arcsinh激活函数
  3. 第11章 在PPT演示文稿中呈现金字塔
  4. 产品经理如何利用工具提升工作效率
  5. c# MyBank 上机题1 2 3
  6. VMvare-linux没有图形化界面
  7. LeetCode:面试题 17.17. 多次搜索
  8. vivo Y51A的usb调试模式在哪里,开启vivo Y51Ausb调试模式的流程
  9. 中国第一封 AR 大学通知书;PHP 7.2.0 alpha3 发布
  10. 日语教程 早安日语 名古屋日语 日语mp3 日语教程word版