二维方格子Ising模型代码
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <fstream>
#include<ctime>using namespace std;ofstream out("data.dat");
const int L = 50; //模拟尺寸
const int MCS = 20000; //总的模拟步数
const int MS = 10000; //除去预热统计的步数
const double J = -1; //J=1AFM,J=-1FMdouble H = 0;double InitialSpin(int s[][L])
{for (int i = 0; i < L; i++){for (int j = 0; j < L; j++){//s[i][j] = 1; s[i][j]= 2 * (rand() % 2) - 1;}}return 0;
}
//随机初始化自旋分布
//----------------------------------------double ExchangeEnergy(int Spin[][L])
{int down,up,left,right;double e = 0;for (int i = 0; i < L; i++){for (int j = 0; j < L; j++){e += J*Spin[i][j]*(Spin[(i+1)%L][j]+Spin[(i-1+L)%L][j]+Spin[i][(j+1)%L]+Spin[i][(j-1+L)%L]);}}return e;
}
// 计算体系的总能量 //计算格点的局域能量
double Magnetization(int s[][L])
{double m = 0;for (int i = 0; i < L; i++){for (int j = 0; j < L; j++){m += s[i][j];}}return m;
}
//输出体系的磁性
void MonteCarlo(int Spin[][L],double T)
{int iaccept = 0;//统计接受样本 double se = 0;double se2 = 0;double sm = 0;double sm2 = 0;double de = 0;double m;int up,down,right,left;int E1,E2;double p,r;for (int mcs = MCS; mcs > 0; mcs--){for(int i=0;i<L;i++){for(int j=0;j<L;j++){E1=J*Spin[i][j]*(Spin[(i+1)%L][j]+Spin[(i-1+L)%L][j]+Spin[i][(j+1)%L]+Spin[i][(j-1+L)%L]);E2=-J*Spin[i][j]*(Spin[(i+1)%L][j]+Spin[(i-1+L)%L][j]+Spin[i][(j+1)%L]+Spin[i][(j-1+L)%L]);if(E2<=E1)Spin[i][j]=-Spin[i][j];else{p=1.0*rand()/ RAND_MAX;r=exp(1.0*(E1-E2)/T);if(r>p){Spin[i][j]=-Spin[i][j];iaccept++;}}}}if (mcs < MS){m=0;m = Magnetization(Spin) / L / L; //输出总磁矩 sm += m; //将每一步磁矩求和取平均 sm2 += m*m; //将每一步磁矩的平方求和 double e = ExchangeEnergy(Spin) / L / L - H*m; //体系总能量 se += e; //将每一步能量求和取平均 se2 += e*e; //将每一步能量平方求和取平均 }}se/=MS;se2 /= MS;sm /= MS;sm2 /= MS;double Capacity = (se2 - se*se) / T / T;//热容的定义 double Manet = (sm2 - sm*sm) / T; //磁化率定义 out << T << '\t' << '\t' << se << '\t' << Capacity << '\t' << sm << '\t' <<Manet<<'\t'<<endl;
}
int main()
{srand((unsigned)time(NULL)); //初始化时间 int s[L][L] = { 0 };InitialSpin(s);double T;int i=0;for (T = 1; T <4; T += 0.01){MonteCarlo(s,T);printf("%d\n",i++);}out.close();system("pause");return 0;
}
二维方格子Ising模型代码相关推荐
- 只显示小方格_不妨谈谈二维方格子吧
(想借该模型 讲清直积态以及TB Model哈密顿量) 入手复杂的事物之前,从手算几个简单的例子开始是最好的. 所以,不妨谈谈二维方格子吧. 一个复杂的晶体,其内部的具有复杂的元胞(最小重复单元),每 ...
- 有限体积法求解二维方腔流(一)——动量方程和连续性方程的离散
1. 有限体积法求解二维方腔流–理论手册 1.1. 不可压缩流体控制方程 连续性方程 ∇⋅U=0(1)\nabla \cdot U=0 \tag{1} ∇⋅U=0(1) 动量方程 ∂U∂t+∇⋅(UU ...
- 卷积算子的矩阵向量乘积表示二维离散降质模型
@图像处理入门学习知识(一) 卷积算子的矩阵向量乘积表示&二维离散降质模型 在图像处理过程中,有时候我们需要将卷积运算转化为矩阵乘积运算,这也是离散降质模型构成的基础,那么怎么将卷积乘法转化为 ...
- 二维数组转datatable的代码
二维数组转datatable的代码 转自http://access911.net/ocr/doc1.asp?mode=a&bid=005201&aid=5226970 这样更简洁: s ...
- 微信QQ的二维码登录原理js代码解析
这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈 ...
- 两张二维人物图像互相换脸代码
之前看了一篇介绍两张二维人物图像互相换脸代码:http://www.cnblogs.com/wm123/p/5370064.html,但是配置环境挺麻烦文章没讲清楚,而且代码有问题,特此重新写个清楚的 ...
- java二维数组长度表示,java二维数组指定不同长度代码实例
本篇文章小编给大家分享一下java二维数组指定不同长度代码实例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.二维数组的每个元素都是一个一维数组, ...
- 【运筹优化】蚁群算法求解二维矩形装箱问题(java代码实现)
文章目录 1 前言 2 代码迁移 3 蚁群算法 3.1 蚂蚁类 Ant 3.2 蚁群算法类 ACO_Packing 4 运行结果 5 后话 [运筹优化]求解二维矩形装箱问题的算法合辑(Java代码实现 ...
- 棒棒的二维数据可视化分类模型
文章目录 源码 优势 局限 代码 API 实现原理 预处理 创建标记和颜色生成器 确定坐标轴数据范围 基于数据范围创建网格坐标 获得预测结果的三维网格坐标 绘制 绘制等高线图 绘制样本分布散点图 高亮 ...
最新文章
- Dell 戴尔预装Windows8改成Windows7
- linux执行命令段错误,Linux运行fortran程序 出现段错误(segmentation fault)
- 中点坐标公式 矩形_二次函数中矩形的存在性问题
- MariaDB(MySQL)_MariaDB(Mysql)-主从搭建
- c语言中的字符串总是以,C语言字符串的结束标志是什么?
- JavaScript:学习笔记(9)——Promise对象
- 前端学习(2652):初始化项目
- python如何用色度表示数值大小_python中色度通道的YUV子采样
- 数据结构之查找算法:折半查找
- APP应用下载站源码-带后台
- Web开发小结 - 2
- AFNetworking 图片的本地缓存问题
- ibm服务器修改ide,IBM刀片服务器配置IDE RAID的方法
- SC_FDE仿真平台:卷积编码 -> 矩阵交织 -> QPSK调制 -> 插入导频 -> 插入CP -> RayleighFading->channel
- M3U8视频解密下载
- GPIO的同步性约束
- 取出字符串中数字的最大值
- Cat源码分析(三):10种分析器
- Android开发 自定义控件 边框TextView
- 爱奇艺视听体验再升级,上线杜比视界独家电影内容