• 伊辛模型
    • 简介
    • 起源
    • 阐述
  • 蒙特卡罗方法
    • 简介
    • 起源
    • 阐释
  • C语言代码

伊辛模型

简介

伊辛模型(Ising model)是一类描述物质相变的随机过程(stochastic process)模型。物质经过相变,要出现新的结构和物性。发生相变的系统一般是在分子之间有较强相互作用的系统,又称合作系统。

起源

伊辛模型由德国物理学家威廉·楞次(Wilhelm Lenz)在1920年提出以描述铁磁性物质的内部的原子自旋状态及其与宏观磁矩的关系。1924年,楞次的学生Ernst Ising求解了不包含相变的一维伊辛模型。

阐述

伊辛模型假定分子排布为周期性点阵。在一维、二维、三维空间分别等间距排布、正方形排布、正方体排布;每个分子都有自旋(固有磁矩);系统中可能存在外磁场;系统的Hamilton量(可以看做能量)由外场能和相互作用能共同构成:
E=−J∑<i,j>σiσj−μH∑kσkE = -J \sum_{<i,j>}{\sigma_i \sigma_j}-\mu H \sum_{k}{\sigma_k} E=−J<i,j>∑​σi​σj​−μHk∑​σk​
第一项表示相互作用:其中J为相互作用常数,J>0表示系统自旋之间为铁磁相互作用,σ为自旋方向,取值为-1或1。参与相互作用的是两个最邻近的分子,并对所有这样的分子对进行求和。第二项表示外场:μ为玻尔磁子。
系统的磁化强度定为格点的平均自旋方向:
M=∑iσiNM=\frac{\sum_i{\sigma_i}}{N} M=N∑i​σi​​
其中N是系统的格点数。
Ising模型的特色在于考虑到了分子间的相互作用;但它只考虑最邻近的分子间的相互作用(比如在二维情形中,则不考虑位于对角线的分子间的相互作用)。


如上图,为3x3规模的Ising模型,图中的连线表示两个格点间的存在相互作用,要符合周期性边界条件。
凝练《热力学与统计物理》中关于伊辛模型的介绍,设没有外磁场,则伊辛模型系统的哈密顿量为:
H=−J∑<i,j>σiσjH = -J \sum_{<i,j>}{\sigma_i \sigma_j} H=−J<i,j>∑​σi​σj​
没有外磁场影响下的磁化强度为自发磁化强度。

蒙特卡罗方法

简介

蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。

起源

蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J.冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国Buffon提出用投针实验的方法求圆周率。这被认为是蒙特卡罗方法的起源。

阐释

蒙特卡罗方法的基本思想是当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
蒙特卡罗方法可以用来模拟系统的物理性质。
本实验将利用蒙特卡罗方法来模拟Ising模型表示的物理系统的随机变化过程。模拟过程的流程图如下:

#mermaid-svg-lTzTiSsDbuLhWszV .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-lTzTiSsDbuLhWszV .label text{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .node rect,#mermaid-svg-lTzTiSsDbuLhWszV .node circle,#mermaid-svg-lTzTiSsDbuLhWszV .node ellipse,#mermaid-svg-lTzTiSsDbuLhWszV .node polygon,#mermaid-svg-lTzTiSsDbuLhWszV .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-lTzTiSsDbuLhWszV .node .label{text-align:center;fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .node.clickable{cursor:pointer}#mermaid-svg-lTzTiSsDbuLhWszV .arrowheadPath{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-lTzTiSsDbuLhWszV .flowchart-link{stroke:#333;fill:none}#mermaid-svg-lTzTiSsDbuLhWszV .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-lTzTiSsDbuLhWszV .edgeLabel rect{opacity:0.9}#mermaid-svg-lTzTiSsDbuLhWszV .edgeLabel span{color:#333}#mermaid-svg-lTzTiSsDbuLhWszV .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-lTzTiSsDbuLhWszV .cluster text{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-lTzTiSsDbuLhWszV .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-lTzTiSsDbuLhWszV text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-lTzTiSsDbuLhWszV .actor-line{stroke:grey}#mermaid-svg-lTzTiSsDbuLhWszV .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-lTzTiSsDbuLhWszV .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-lTzTiSsDbuLhWszV #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-lTzTiSsDbuLhWszV .sequenceNumber{fill:#fff}#mermaid-svg-lTzTiSsDbuLhWszV #sequencenumber{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV #crosshead path{fill:#333;stroke:#333}#mermaid-svg-lTzTiSsDbuLhWszV .messageText{fill:#333;stroke:#333}#mermaid-svg-lTzTiSsDbuLhWszV .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-lTzTiSsDbuLhWszV .labelText,#mermaid-svg-lTzTiSsDbuLhWszV .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-lTzTiSsDbuLhWszV .loopText,#mermaid-svg-lTzTiSsDbuLhWszV .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-lTzTiSsDbuLhWszV .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-lTzTiSsDbuLhWszV .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-lTzTiSsDbuLhWszV .noteText,#mermaid-svg-lTzTiSsDbuLhWszV .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-lTzTiSsDbuLhWszV .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-lTzTiSsDbuLhWszV .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-lTzTiSsDbuLhWszV .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-lTzTiSsDbuLhWszV .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .section{stroke:none;opacity:0.2}#mermaid-svg-lTzTiSsDbuLhWszV .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-lTzTiSsDbuLhWszV .section2{fill:#fff400}#mermaid-svg-lTzTiSsDbuLhWszV .section1,#mermaid-svg-lTzTiSsDbuLhWszV .section3{fill:#fff;opacity:0.2}#mermaid-svg-lTzTiSsDbuLhWszV .sectionTitle0{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .sectionTitle1{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .sectionTitle2{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .sectionTitle3{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-lTzTiSsDbuLhWszV .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .grid path{stroke-width:0}#mermaid-svg-lTzTiSsDbuLhWszV .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-lTzTiSsDbuLhWszV .task{stroke-width:2}#mermaid-svg-lTzTiSsDbuLhWszV .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .taskText:not([font-size]){font-size:11px}#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-lTzTiSsDbuLhWszV .task.clickable{cursor:pointer}#mermaid-svg-lTzTiSsDbuLhWszV .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-lTzTiSsDbuLhWszV .taskText0,#mermaid-svg-lTzTiSsDbuLhWszV .taskText1,#mermaid-svg-lTzTiSsDbuLhWszV .taskText2,#mermaid-svg-lTzTiSsDbuLhWszV .taskText3{fill:#fff}#mermaid-svg-lTzTiSsDbuLhWszV .task0,#mermaid-svg-lTzTiSsDbuLhWszV .task1,#mermaid-svg-lTzTiSsDbuLhWszV .task2,#mermaid-svg-lTzTiSsDbuLhWszV .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutside0,#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutside2{fill:#000}#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutside1,#mermaid-svg-lTzTiSsDbuLhWszV .taskTextOutside3{fill:#000}#mermaid-svg-lTzTiSsDbuLhWszV .active0,#mermaid-svg-lTzTiSsDbuLhWszV .active1,#mermaid-svg-lTzTiSsDbuLhWszV .active2,#mermaid-svg-lTzTiSsDbuLhWszV .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-lTzTiSsDbuLhWszV .activeText0,#mermaid-svg-lTzTiSsDbuLhWszV .activeText1,#mermaid-svg-lTzTiSsDbuLhWszV .activeText2,#mermaid-svg-lTzTiSsDbuLhWszV .activeText3{fill:#000 !important}#mermaid-svg-lTzTiSsDbuLhWszV .done0,#mermaid-svg-lTzTiSsDbuLhWszV .done1,#mermaid-svg-lTzTiSsDbuLhWszV .done2,#mermaid-svg-lTzTiSsDbuLhWszV .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-lTzTiSsDbuLhWszV .doneText0,#mermaid-svg-lTzTiSsDbuLhWszV .doneText1,#mermaid-svg-lTzTiSsDbuLhWszV .doneText2,#mermaid-svg-lTzTiSsDbuLhWszV .doneText3{fill:#000 !important}#mermaid-svg-lTzTiSsDbuLhWszV .crit0,#mermaid-svg-lTzTiSsDbuLhWszV .crit1,#mermaid-svg-lTzTiSsDbuLhWszV .crit2,#mermaid-svg-lTzTiSsDbuLhWszV .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-lTzTiSsDbuLhWszV .activeCrit0,#mermaid-svg-lTzTiSsDbuLhWszV .activeCrit1,#mermaid-svg-lTzTiSsDbuLhWszV .activeCrit2,#mermaid-svg-lTzTiSsDbuLhWszV .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-lTzTiSsDbuLhWszV .doneCrit0,#mermaid-svg-lTzTiSsDbuLhWszV .doneCrit1,#mermaid-svg-lTzTiSsDbuLhWszV .doneCrit2,#mermaid-svg-lTzTiSsDbuLhWszV .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-lTzTiSsDbuLhWszV .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-lTzTiSsDbuLhWszV .milestoneText{font-style:italic}#mermaid-svg-lTzTiSsDbuLhWszV .doneCritText0,#mermaid-svg-lTzTiSsDbuLhWszV .doneCritText1,#mermaid-svg-lTzTiSsDbuLhWszV .doneCritText2,#mermaid-svg-lTzTiSsDbuLhWszV .doneCritText3{fill:#000 !important}#mermaid-svg-lTzTiSsDbuLhWszV .activeCritText0,#mermaid-svg-lTzTiSsDbuLhWszV .activeCritText1,#mermaid-svg-lTzTiSsDbuLhWszV .activeCritText2,#mermaid-svg-lTzTiSsDbuLhWszV .activeCritText3{fill:#000 !important}#mermaid-svg-lTzTiSsDbuLhWszV .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-lTzTiSsDbuLhWszV g.classGroup text .title{font-weight:bolder}#mermaid-svg-lTzTiSsDbuLhWszV g.clickable{cursor:pointer}#mermaid-svg-lTzTiSsDbuLhWszV g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-lTzTiSsDbuLhWszV g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-lTzTiSsDbuLhWszV .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-lTzTiSsDbuLhWszV .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-lTzTiSsDbuLhWszV .dashed-line{stroke-dasharray:3}#mermaid-svg-lTzTiSsDbuLhWszV #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV .commit-id,#mermaid-svg-lTzTiSsDbuLhWszV .commit-msg,#mermaid-svg-lTzTiSsDbuLhWszV .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-lTzTiSsDbuLhWszV g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-lTzTiSsDbuLhWszV g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-lTzTiSsDbuLhWszV g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-lTzTiSsDbuLhWszV .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-lTzTiSsDbuLhWszV .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-lTzTiSsDbuLhWszV .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-lTzTiSsDbuLhWszV .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-lTzTiSsDbuLhWszV .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-lTzTiSsDbuLhWszV .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-lTzTiSsDbuLhWszV .edgeLabel text{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lTzTiSsDbuLhWszV .node circle.state-start{fill:black;stroke:black}#mermaid-svg-lTzTiSsDbuLhWszV .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-lTzTiSsDbuLhWszV #statediagram-barbEnd{fill:#9370db}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-state .divider{stroke:#9370db}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-lTzTiSsDbuLhWszV .note-edge{stroke-dasharray:5}#mermaid-svg-lTzTiSsDbuLhWszV .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-lTzTiSsDbuLhWszV .error-icon{fill:#522}#mermaid-svg-lTzTiSsDbuLhWszV .error-text{fill:#522;stroke:#522}#mermaid-svg-lTzTiSsDbuLhWszV .edge-thickness-normal{stroke-width:2px}#mermaid-svg-lTzTiSsDbuLhWszV .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-lTzTiSsDbuLhWszV .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-lTzTiSsDbuLhWszV .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-lTzTiSsDbuLhWszV .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-lTzTiSsDbuLhWszV .marker{fill:#333}#mermaid-svg-lTzTiSsDbuLhWszV .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-lTzTiSsDbuLhWszV {color: rgba(0, 0, 0, 0.75);font: ;}

选定自旋
翻转该自旋
ΔE>0?
exp(-ΔE/kT)<R?
接受改变

选定系统任意初态,按照上述方法实现自旋翻转,并遍历所有自旋,这一过程称为一个蒙特卡罗步。其中,R为0~1间的一个实数,来决定翻转概率为exp(-ΔE/kT)的自旋是否翻转。重复该过程可使系统达到(能量)比较稳定的状态。

C语言代码

//预处理部分
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#pragma warning(disable:4996)
//忽略VS开发环境下的安全性错误提示C4996//生成一个正方形矩阵,元素随机赋值-1或1
int** createAMatrix(int theOrder) {int** aMatrix = (int**)malloc(sizeof(int*) * theOrder);int i, j;for (i = 0; i < theOrder; i++) {aMatrix[i] = (int*)malloc(sizeof(int) * theOrder);for (j = 0; j < theOrder; j++)aMatrix[i][j] = (rand() % 2) * 2 - 1;}return aMatrix;
}//计算正方形矩阵所表示的ising模型的平均磁化强度
//Map为矩阵的指针
//Size为矩阵的边长
double theM(int** aMatrix, int theOrder) {int i, j, SUM = 0;for (i = 0; i < theOrder; i++)for (j = 0; j < theOrder; j++)SUM += aMatrix[i][j];return SUM * 1.0 / theOrder / theOrder;
}//对正方形矩阵所表示的ising模型中的每个点按顺序进行蒙特卡罗模拟优化
//Map为矩阵的指针
//Size为矩阵的边长
//T为ising模型的温度
//J为ising模型中各点的相互作用系数
void monteCarlo(int** aMatrix, int theOrder, double T, double J) {int i, j, E, dE;double R;for (i = 0; i < theOrder; i++)for (j = 0; j < theOrder; j++) {dE = 2 * J * aMatrix[i][j] * (aMatrix[(i + theOrder - 1) % theOrder][j] + aMatrix[i][(j + theOrder + 1) % theOrder] + aMatrix[(i + theOrder + 1) % theOrder][j] + aMatrix[i][(j + theOrder - 1) % theOrder]);//+ theOrder 及 % theOrder 是为了在边界进行周期性循环R = rand() * 1.0 / RAND_MAX;if ((dE <= 0) || (exp(-dE * 1.0 / T) >= R))aMatrix[i][j] = -aMatrix[i][j];}
}//清除正方形矩阵(占用的内存)
//Map为矩阵的指针
//Size为矩阵的边长
void clearMatrix(int** aMatrix, int theOrder) {int i;for (i = 0; i < theOrder; i++)free(aMatrix[i]);free(aMatrix);
}//模拟磁化强度随温度变化的主函数,数据显示到屏幕并保存到M-T_Data.txt文件中
void main() {int i, j, theOrder = 20, N = 1000;double T, SUM, J = 1.0, L = 0.01;int** aMatrix;FILE* fp = NULL;fp = fopen("Data.txt", "w");for (T = 0.1; T <= 5; T += L) {SUM = 0;aMatrix = createAMatrix(theOrder);for (i = N; i > 0; i--) {monteCarlo(aMatrix, theOrder, T, J);if (i <= 500)SUM += fabs(theM(aMatrix, theOrder));//对后500个蒙特卡罗步的系统磁化强度取平均}clearMatrix(aMatrix, theOrder);printf("%.2lf\t%.5lf\n", T, SUM / 500);fprintf(fp, "%.2lf\t%.5lf\n", T, SUM / 500);}fclose(fp);
}

C语言实现二维伊辛模型的蒙特卡罗方法模拟相关推荐

  1. R语言绘制二维密度图

    R语言绘制二维密度图 二维密度图显示了两个数值变量之间的关系,一个在x轴上表示,另一个在Y轴上表示,与散点图类似,然后计算二维空间中特定区域内的观测数,并用颜色梯度表示.二维密度图有几种类型,以下主要 ...

  2. go语言定义二维数组

    使用go语言二维数组 go语言不用管理内存,很多地方使用起来确实很方便,但是在算法方面确实没有C++优秀,特别是缺少像STL一样优秀模板,定义一个二维数组需要进行如下复杂的操作: go语言的二维数组定 ...

  3. c语言调用二维数组作为函数参数传递,C++ 二维数组作为形参传递使用实例

    在线代码编辑器: http://codepad.org/ 1.*指针 void display(int *arr, const int row, const int col) { for(int i= ...

  4. java二维数组水平翻转,C 语言 利用二维数组实现对输入的数组进行翻转

    C 语言 利用二维数组实现对输入的数组进行翻转(帮助理解对图像翻转编辑原理) /* ?输入几行几列数字和翻转方式,如: 3 4 0即代表3行4列,左右翻转: 6 5 1即代表6行5列,上下翻转. 输入 ...

  5. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

  6. C语言 指针+二维数组详解 (应付期末、考研的最强笔记,建议收藏)

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  7. c语言利用二维数组制作地图,用程序实现RPG背景地图二维数组构建

    朱艳萍 摘要:该文主要阐述了前端RPG开发中,当作为背景的地图较为复杂时,如何用程序的方法构建与背景地图一致的二维数组,采用图文结合论述其算法,并使用原生JavaScript语言实现. 关键词:二维数 ...

  8. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  9. C语言汇总学生成绩,c语言用二维数组统计学生成绩.doc

    c语言用二维数组统计学生成绩 # include /*定义一个求每门课平均成绩的函数AverageCourse 它的形参一个是二维数组,用来传递学生成绩: 一个是指针变量(数组名),存放每门课的平均成 ...

  10. C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)

    C语言的二维数组初始化的几种方式介绍 1.直接赋值 2.循环对每个元素赋值 3.借用memset/memset_s初始化为0或-1 4.`数组所有元素初始化为相同值(用于大数组初始化贼方便)` 1.直 ...

最新文章

  1. sql server 2005 T-SQL CAST 和 CONVERT (Transact-SQL)
  2. Python的locals()函数
  3. 在github上面下载文件夹的方法666
  4. 平衡二叉树平衡因子_数据结构:平衡二叉树
  5. go方法的深入探究(7.21增补)
  6. Android之jni编译出现error: jump to label ‘XXXX’ [-fpermissive]解决办法
  7. 差异基因 p log2foldchange_拟南芥的基因ID批量转换?差异基因,GO/KEGG数据库注释(转录组直接送你全套流程)...
  8. php处理ajax post请求超时,php – 如何处理AJAX请求中的会话超时
  9. Graph_Master(连通分量_Poj_1904)
  10. html pdf文档的格式控制符,关于Unicode控制字符RLO,LRO,PDF 的坑
  11. python交通调查数据处理_python 小型交通调查后的数据处理(数车)
  12. JAVA 工厂模式计算器
  13. Kindle倒下,iReader接力
  14. Spring之FactoryBean的使用与源码解析
  15. “强省会”从产业开始,长沙市智能汽车产业促进会正式授牌
  16. Netty 快速入门系列 - Chapter 1 传统OIO与NIO - NIO 【第二讲】
  17. 【IPD流程学习 一】背景和目标
  18. 提升团队战斗力的要点
  19. 科目二经验之谈 10小时必过秘笈
  20. MIPS递归:斐波那契数列

热门文章

  1. python110道面试题
  2. Windows下安装PyQt5教程
  3. 纯干货:手把手教你用Python做数据可视化(附代码)
  4. 用setuna截图时自动放大_setuna截图软件下载
  5. 视频教程-纯风老师AI平面设计视频教程-其他
  6. 18.布隆过滤器的实现及应用
  7. SPSS中介效应分析(Process和mediate插件)
  8. 2018中国移动校招笔试记录
  9. 单片机开发,主函数没调用任何程序,串口一直收到00 0 FF之类的数据
  10. 调用图(Call Graph)