Difference between revisions of "ALPS 2 Tutorials:MC-07 Phase Transition/ja"

From ALPS
Jump to: navigation, search
(臨界指数)
(Blanked the page)
Line 1: Line 1:
{{Languages|ALPS_2_Tutorials:MC-07_Phase_Transition}}
 
  
 
= 最初に =
 
このチュートリアルの目的は、有名な2次元イジングモデルを例にとり、有限サイズのシミュレーションから二次相転移を再現する方法を学ぶことです。本当の相転移現象は有限システムでは求められませんが、有限サイズスケーリング法を用いて、相転移現象を明確に予測することが可能です。
 
<!--The goal of this tutorial is to learn how to detect a second-order phase transition from finite-size simulations, using the venerable example of the 2d Ising model. No true phase transition can occur on a finite system. Nevertheless finite-size simulations show clear precursor signs of the phase transition which, combined with finite-size scaling, allow a precise determination of the universality class of a continuous phase transition.-->
 
 
<!--Almost everything is known about the phase transition in the 2d Ising model since it is exactly solvable. In this tutotial, we will try to recover the location of the critical point, as well as critical exponents as if we would not know them in order to illustrate the methods. To make precise estimations requires quite some time. For this let us start the final simulation parameters in the background while doing the first part of the tutorial. -->
 
相転移現象は2次元イジングモデルでは正確に解けることが知られています。このチュートリアルでは、臨界点並びに臨界指数の計算手順を説明します。このチュートリアルの計算は、ある程度の時間を要しますので、効率的に勧めてください。
 
 
<!--You can start the second simulation in the background with the parameter file [http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/parm7b parm7b] and type:-->
 
2番目のシミュレーションのパラメータファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/parm7b parm7b]です。次のコマンドで実行開始してください。
 
 
parameter2xml parm7b
 
spinmc --Tmin 10  parm7b.in.xml &
 
 
<!--or run the first part of the [http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/tutorial7b.py tutorial7b.py]:-->
 
Pythonでは、[http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/tutorial7b.py tutorial7b.py]
 
 
import pyalps
 
import matplotlib.pyplot as plt
 
import pyalps.pyplot
 
import numpy as np
 
import pyalps.fit_wrapper as fw
 
 
#prepare the input parameters
 
parms = []
 
for l in [32,48,64]:
 
    for t in [2.24, 2.25, 2.26, 2.27, 2.28, 2.29, 2.30, 2.31, 2.32, 2.33, 2.34, 2.35]:
 
        parms.append(
 
            {
 
              'LATTICE'        : "square lattice",
 
              'T'              : t,
 
              'J'              : 1 ,
 
              'THERMALIZATION' : 5000,
 
              'SWEEPS'        : 150000,
 
              'UPDATE'        : "cluster",
 
              'MODEL'          : "Ising",
 
              'L'              : l
 
            } 
 
    )
 
 
#write the input file and run the simulation
 
input_file = pyalps.writeInputFiles('parm7b',parms)
 
pyalps.runApplication('spinmc',input_file,Tmin=5)
 
 
<!--If you want to do this tutorial in Vistrails, download the Vistrails files [http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/mc-07-tutorial.vt mc-07-tutorial.vt] .-->
 
Vistrailを用いる場合は、[http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/mc-07-tutorial.vt mc-07-tutorial.vt]を参照してください。
 
 
= 相転移のおおよその特定 =
 
 
<!--First, let us make a rough temperature scan on small systems, in order to locate roughly the critical range. Use the parameter file  [http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/parm7a parm7a] and the command.-->
 
最初に、おおよその臨界範囲を特定するために、小さい系で温度による探索をおこないます。使用するパラメータファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/parm7a parm7a]です。
 
 
parameter2xml parm7a
 
spinmc --Tmin 5 parm7a.in.xml
 
 
<!--Alternatively, you can run the simulations in python with the file [http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/tutorial7a.py tutorial7a.py]:-->
 
Pythonを用いる場合、スクリプトは[http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/tutorial7a.py tutorial7a.py]です。
 
 
import pyalps
 
import matplotlib.pyplot as plt
 
import pyalps.pyplot
 
 
#prepare the input parameters
 
parms = []
 
for l in [4,8,16]:
 
    for t in [5.0,4.5,4.0,3.5,3.0,2.9,2.8,2.7]:
 
        parms.append(
 
            {
 
              'LATTICE'        : "square lattice",
 
              'T'              : t,
 
              'J'              : 1 ,
 
              'THERMALIZATION' : 1000,
 
              'SWEEPS'        : 400000,
 
              'UPDATE'        : "cluster",
 
              'MODEL'          : "Ising",
 
              'L'              : l
 
            }
 
    )
 
    for t in [2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5, 1.2]:
 
        parms.append(
 
            {
 
              'LATTICE'        : "square lattice",
 
              'T'              : t,
 
              'J'              : 1 ,
 
              'THERMALIZATION' : 1000,
 
              'SWEEPS'        : 40000,
 
              'UPDATE'        : "cluster",
 
              'MODEL'          : "Ising",
 
              'L'              : l
 
            }
 
    )
 
 
#write the input file and run the simulation
 
input_file = pyalps.writeInputFiles('parm7a',parms)
 
pyalps.runApplication('spinmc',input_file,Tmin=5)
 
 
== 磁化、帯磁率、比熱 ==
 
 
<!--The order parameter describing the low-temperature phase in the Ising model is the magnetization per site m. Of course, on a finite-system, <math>< m></math> is zero by symmetry since there is no true symmetry breaking, and one should rather look at the average absolute value of magnetization per site.
 
In order to evaluate the data and load the observables we want to inspect run the following lines in the python shell:-->
 
低音度におけるイジングモデルを表現するパラメータのオーダーは、サイトmあたりの磁化です。有限システムでは、<math>< m></math>は対称性により0ですが、磁化のサイト毎の平均絶対値に注目すべきです。
 
次の記述はPythonシェルによる、実行、データ解析、計算結果をロードする一連の手順です。
 
 
pyalps.evaluateSpinMC(pyalps.getResultFiles(prefix='parm7a'))
 
 
#load the observables and collect them as function of temperature T
 
data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm7a'),['|Magnetization|', 'Connected Susceptibility', 'Specific Heat', 'Binder Cumulant', 'Binder Cumulant U2'])
 
magnetization_abs = pyalps.collectXY(data,x='T',y='|Magnetization|',foreach=['L'])
 
connected_susc = pyalps.collectXY(data,x='T',y='Connected Susceptibility',foreach=['L'])
 
spec_heat = pyalps.collectXY(data,x='T',y='Specific Heat',foreach=['L'])
 
binder_u4 = pyalps.collectXY(data,x='T',y='Binder Cumulant',foreach=['L'])
 
binder_u2 = pyalps.collectXY(data,x='T',y='Binder Cumulant U2',foreach=['L'])
 
 
<!--and make a a plot of the |Magnetization| versus <math>T</math>:-->
 
<math>T</math>に対する|Magnetization|のプロットをおこないます。
 
 
plt.figure()
 
pyalps.plot.plot(magnetization_abs)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Magnetization $|m|$')
 
plt.title('2D Ising model')
 
 
<!--One can clearly see that the magnetization rises from its zero high-temperature value to its saturation value at low T. The temperature at which it happens is not so clear, as the upturn gets sharper as system size is increased. To have a clearer idea, let us look at fluctuations of the magnetization.-->
 
磁化は0から低Tでの飽和値まで上昇することが明らかにわかります。システムサイズを大きくなるにつれて、上昇が鋭くなるにつれて、これらが起きる温度はそれほど明白ではありません。
 
次に、磁化の変動を見てみます。
 
 
<!--For this, let us consider the connected susceptibility <math>\chi = \beta .N .( < m^2>- <|m|>^2)</math>, where <math>N</math> is the total number of spins and where we subtracted the square of the average absolute value of magnetization, hence the name connected.-->
 
ここで、磁化率<math>\chi = \beta .N .( < m^2>- <|m|>^2)</math>を見てみます。<math>N</math>は全スピン数です。
 
 
 
plt.figure()
 
pyalps.plot.plot(connected_susc)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Connected Susceptibility $\chi_c$')
 
plt.title('2D Ising model')
 
 
<!--'One observes a marked peak around <math>T=2.2-2.4</math>, where fluctuations are strongest. We note that the peaks tend to diverge with system size; as we will see later, this divergence can be characterized by a critical exponent. -->
 
<math>T=2.2-2.4</math>周辺でピークが観測され、最も変動が強い箇所です。ピークはシステムサイズにともなって発散する傾向にあります。詳細は後述しますが、この発散は臨界指数によって特徴付けられます。
 
 
<!--This first rough estimation of the critical temperature is confirmed by looking at the behaviour of the specific heat, which characterizes fluctuations of energy : <math>C_v = \beta^2 . N. ( < e^2 >- < e >^2 )</math>, where <math>e</math> is the internal energy per site.-->
 
比熱の振る舞い、 エネルギーの摂動<math>C_v = \beta^2 . N. ( < e^2 >- < e >^2 )</math> (<math>e</math>はサイトの内部エネルギー)をみることで、おおまかな臨界温度を決定します。
 
 
plt.figure()
 
pyalps.plot.plot(spec_heat)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Specific Heat $c_v$')
 
plt.title('2D Ising model')
 
 
<!--We observe here a peak, albeit less marked, around the same values of temperature. We will account for the less pronounced divergence of the specific heat peak later too.-->
 
 
== Binderキュムラント ==
 
 
<!--Sometimes locating the maximum of a curve (such as the peaks in susceptibility or specific heat) is not always easy given the temperature grid used in the simulations. Moreover, and this can be seen in the previous plots, the peak temperature can drift with system size. This is also accounted for in the finite-size scaling theory outlined below.-->
 
シミュレーションをおこない、常に容易に曲線の最大値(帯磁率や比熱のピーク)を求められるとは限りません。また、前途のプロットにあるように、ピーク温度はシステムサイズによって変動することもあります。これらは後述する有限サイズスケーリング法によって対処が可能です。
 
 
<!--An alternative efficient way of locating phase transitions is through the use of cumulants. Let us consider the ratio <math>U_4=< m^4> /<m^2>^2</math>, first introduced by Binder often called the Binder cumulant. At low temperature, this ratio tends to unity, whereas Gaussian fluctuations of the order parameter give a value 3 for <math>U_4</math> in the high temperature phase. The non-trivial feature of the Binder cumulant resides in its value at the critical point, which can be shown to be universal and independent of the system size. Therefore, a plot of the Binder cumulant versus temperature allows a determination of Tc at the crossing points of the curves with different system sizes:-->
 
相転移点を特定する他の効率的な方法にキュムラントを用いる方法があります。ここでBinderキュムラントと呼ばれる比率<math>U_4=< m^4> /<m^2>^2</math>を取り上げます。低温度で、この比率は、低温度では一定ですが、高温度ではパラメータのガウシアンゆらぎ<math>U_4</math>は3となります。Binderキュムラントの特徴は、その値が、システムサイズから独立していることにあります。すなわち、温度に対するBinderキュムラントのプロットは、Tcの決定に非常に有益です。
 
 
 
plt.figure()
 
pyalps.plot.plot(binder_u4)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Binder Cumulant U4 $g$')
 
plt.title('2D Ising model')
 
 
<!--From this last plot, we thus conclude that the phase transition is located in the finer range <math> T_c \in [2.2,2.3]</math>.
 
One can also consider another cumulant <math>U_2 = < m^2> / <|m|>^2</math>, which is is left as an exercice.-->
 
このプロットから、相転移は<math> T_c \in [2.2,2.3]</math>の狭い範囲であると結論づけられます。また、別の課題として、キュムラント<math>U_2 = < m^2> / <|m|>^2</math>の場合も考えて見てください。
 
 
<!--=  Locate precisely the phase transition, first estimates of critical exponents, collapse plots =-->
 
=  相転移場所の特定、臨界指数、collapse plotsの評価  =
 
 
<!--We can now try to perform a more precise determination of the nature of the phase transition using a finer grid of temperature points in the critical range T and using larger system sizes. For this, we will use the results of [http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/parm7b parm7b]. As before we evaluate and load the specific observables from the result files.-->
 
密な温度グリッド点や大規模システムを用いることで、より正確な相転移の性質をシミュレーションすることができます。チュートリアルで用いるファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/mc-07-phase-transition/parm7b parm7b]です。結果ファイルから観測量を取り出し解析します。
 
 
pyalps.evaluateSpinMC(pyalps.getResultFiles(prefix='parm7b'))
 
 
#load the observables and collect them as function of temperature T
 
data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm7b'),['|Magnetization|', 'Connected Susceptibility', 'Specific Heat', 'Binder Cumulant', 'Binder Cumulant U2'])
 
magnetization_abs = pyalps.collectXY(data,x='T',y='|Magnetization|',foreach=['L'])
 
connected_susc = pyalps.collectXY(data,x='T',y='Connected Susceptibility',foreach=['L'])
 
spec_heat = pyalps.collectXY(data,x='T',y='Specific Heat',foreach=['L'])
 
binder_u4 = pyalps.collectXY(data,x='T',y='Binder Cumulant',foreach=['L'])
 
binder_u2 = pyalps.collectXY(data,x='T',y='Binder Cumulant U2',foreach=['L'])
 
 
== Collapsing data ==
 
 
<!--We start with performing the Binder cumulant crossing:-->
 
Bider cumulant交差の計算をおこないます。
 
 
plt.figure()
 
pyalps.plot.plot(binder_u4)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Binder Cumulant U4 $g$')
 
plt.title('2D Ising model')
 
plt.show()
 
 
<!--What is the estimate of <math>T_c</math> you obtain from this plot ? There is more information in this plot. Indeed, the theory of finite size scaling indicates the following scaling form for the Binder cumulant <math>U_4 = f (L^{1/\nu} (T-T_c)/T_c</math>), where <math>f</math> is a universal function. For the different system sizes used in parm7b, plot the Binder cumulant as a function of <math>(T-T_c)/T_c</math> where <math>T_c</math> is the estimation you determined previously: all the curves should cross close to 0. Now try to find a good constant <math>a</math> such that when multiplied by <math>L^a</math>, all curves correspsonding to system size L, collapse into a single master curve, i.e. the curve for <math>L=32</math> should be multiplied by <math>32^a</math>, <math>L=48</math> by <math>48^a</math> etc.-->
 
このプロットから
 
 
''Hint'' : Try <math>a</math> close to unity ...
 
 
#perform a data collapse of the Binder cumulant:
 
Tc=... #your estimate
 
a=...  #your estimate
 
 
for d in binder_u4:
 
    d.x -= Tc
 
    d.x = d.x/Tc
 
    l = d.props['L']g
 
    d.x = d.x * pow(float(l),a)
 
 
plt.figure()
 
pyalps.plot.plot(binder_u4)
 
plt.xlabel('$L^a(T-T_c)/T_c$')
 
plt.ylabel('Binder Cumulant U4 $g$')
 
plt.title('2D Ising model')
 
plt.show()
 
 
<!--
 
What you are currently doing is a data collapse in the scaling regime, a famous technique to obtain critical exponents. In this case, you can read off the correlation length critical exponent : <math>\nu = 1/a</math>. The Binder cumulant collapse is pretty useful as it allows to determine <math>\nu</math> independently of other critical exponents. A data collapse for other quantities often need to also scale the quantity on the y-axis by some other exponent <math>L^b</math>.
 
-->
 
現在、何をやっているかというと、臨界指数を得るため有名なテクニックで、スケーリング用のデータを調整します。この場合、相関距離の臨界指数を読み取ることが可能です。<math>\nu = 1/a</math>です。<math>\nu</math>を決定するためにBinder cumulantを考慮することは有益です。
 
 
== 臨界指数 ==
 
 
<!--Now consider the specific heat and connected susceptibility:-->
 
比熱と磁化率に関して、チュートリアルをおこないます。
 
 
#make a plot of the specific heat and connected susceptibility:
 
plt.figure()
 
pyalps.plot.plot(connected_susc)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Connected Susceptibility $\chi_c$')
 
plt.title('2D Ising model')
 
 
plt.figure()
 
pyalps.plot.plot(spec_heat)
 
plt.xlabel('Temperature $T$')
 
plt.ylabel('Specific Heat $c_v$')
 
plt.title('2D Ising model')
 
plt.show()
 
 
<!--google
 
Both connected susceptibility and specific heat peak at values of T which are slightly different from the <math>T_c</math> obtained with the Binder cumulant crossing. Such small differences are expected on small finite-systems : the effective critical temperature <math>T_c(L)</math> that one can define at the position of the peaks is expected to drift with system size : <math>T_c(L) = T_c + A L^{-1/\nu}</math>. The constant <math>A</math> can be different with different ways of defining <math>T_c(L)</math>.
 
What about critical exponents ? They can be read off from the value of the connected susceptibility or specific heat, either at <math>T_c(L)</math> or at the <math>T_c</math> obtained from the Binder cumulant.
 
One expects the following scaling : <math>\chi (T_c) \sim L^{\gamma/\nu}</math> and <math>C_v (T_c) \sim L^{\alpha / \nu}</math>
 
For instance, locate the maximum of the connected susceptibility for the different curves, plot it as a function of <math>L</math> and try a power-law fit.
 
Note that by using relations between critical exponents <math>\gamma / \nu = 2 - \eta</math>. What value of <math>\eta</math> do you obtain ?
 
-->
 
バインダーキュムラント横断で得られた<math>T_c</math>とは少し異なりますTの値で接続された感受性と比熱ピークの両方。効果的な臨界温度T_cの<math>(L)</ math>は一つのシステムサイズでドリフトすると予想されるピークの位置で定義することができます:<math>T_c(L) = T_c + A L^{-1/\nu}</math>のような小さな違いは、小さな有限のシステムで期待されています。定数<math>A</math>は<math> T_cの(L)</ math>を定義するさまざまな方法とは異なる場合があります。臨界指数についてはどうですか?彼らは<math>T_c(L)</math>で、またはバインダーキュムラントから得られた<math>T_c</math>のいずれかで、接続された感受性や比熱の値から読み取ることができます。一つには、次のスケーリングを期待しています。<br>
 
<math>\chi (T_c) \sim L^{\gamma/\nu}</math> and <math>C_v (T_c) \sim L^{\alpha / \nu}</math>
 
例えば、別の曲線に接続された感受性の最大値を見つける<math> L </ math>はの関数としてプロットし、べき乗則近似を試してみてください。注意<math>\gamma / \nu = 2 - \eta</math>臨界指数との関係を用いている。あなたは、<math>\eta</math>のどのような値を入手できますか?
 
 
 
 
 
 
#make a fit of the connected susceptibility as a function of L:
 
cs_mean=[]
 
for q in connected_susc:
 
    cs_mean.append(np.array([d.mean for d in q.y]))
 
 
peak_cs = pyalps.DataSet()
 
peak_cs.props = pyalps.dict_intersect([q.props for q in connected_susc])
 
peak_cs.y = np.array([np.max(q) for q in cs_mean])
 
peak_cs.x = np.array([q.props['L'] for q in connected_susc])
 
 
sel = np.argsort(peak_cs.x)
 
peak_cs.y = peak_cs.y[sel]
 
peak_cs.x = peak_cs.x[sel]
 
 
pars = [fw.Parameter(1), fw.Parameter(1)]
 
f = lambda self, x, pars: pars[0]()*np.power(x,pars[1]())
 
fw.fit(None, f, pars, peak_cs.y, peak_cs.x)
 
prefactor = pars[0].get()
 
gamma_nu = pars[1].get()
 
 
plt.figure()
 
plt.plot(peak_cs.x, f(None, peak_cs.x, pars))
 
pyalps.plot.plot(peak_cs)
 
plt.xlabel('System Size $L$')
 
plt.ylabel('Connected Susceptibility $\chi_c(T_c)$')
 
plt.title('2D Ising model, $\gamma$ is %.4s' % gamma_nu)
 
plt.show()
 
<!--googl--
 
Repeat the same procedure for the specific heat. What value of <math>\alpha</math> do you obtain ? Note that <math>\alpha</math> can in general be positive or negative, meaning that the specific heat need not to diverge at a continuous transition in contrast with the connected susceptibility.-->
 
 
特定の熱のために同じ手順を繰り返します。あなたは、<math>\alpha</math>のどのような値を入手できますか?<math>\alpha</math>は、一般に比熱が接続されて感受性とは対照的に、連続的な遷移で発散する必要がないことを意味し、正または負であることに注意してください。
 
 
#make a fit of the specific heat as a function of L:
 
sh_mean=[]
 
for q in spec_heat:
 
    sh_mean.append(np.array([d.mean for d in q.y]))
 
 
 
peak_sh = pyalps.DataSet()
 
peak_sh.props = pyalps.dict_intersect([q.props for q in spec_heat])
 
peak_sh.y = np.array([np.max(q) for q in sh_mean])
 
peak_sh.x = np.array([q.props['L'] for q in spec_heat])
 
 
sel = np.argsort(peak_sh.x)
 
peak_sh.y = peak_sh.y[sel]
 
peak_sh.x = peak_sh.x[sel]
 
 
pars = [fw.Parameter(1), fw.Parameter(1)]
 
f = lambda self, x, pars: pars[0]()*np.power(x,pars[1]())
 
fw.fit(None, f, pars, peak_sh.y, peak_sh.x)
 
prefactor = pars[0].get()
 
alpha_nu = pars[1].get()
 
 
plt.figure()
 
plt.plot(peak_sh.x, f(None, peak_sh.x, pars))
 
pyalps.plot.plot(peak_cs)
 
plt.xlabel('System Size $L$')
 
plt.ylabel('Specific Heat $c_v(T_c)$')
 
plt.title(r'2D Ising model, $\alpha$ is %.4s' % alpha_nu)
 
plt.show()
 
 
<!--google-As an exercice, you can repeat the same analysis for the absolute magnetization, which scales as <math>L^{-\beta/\nu}</math>.-->
 
 
練習としては、どの<math>L^{-\beta/\nu}</math>としてのスケールの絶対磁化に対して同じ分析を繰り返すことができます。
 
また、接続された感受性と磁化のデータ崩壊を実行しようとしました。
 
<!--Also, try to perform a data collapse for the connected susceptibility and magnetization.-->
 
 
<!--''Hint'' : The corresponding scaling forms are  <math>\chi = L^{2-\eta} g ( L^{1/\nu} (T-T_c)/T_c))</math> and <math>|m| = L^{-\beta/\nu} h ( L^{1/\nu} (T-T_c)/T_c))</math>.-->
 
''hint'': 対応するスケーリングフォームは、<math>\chi = L^{2-\eta} g ( L^{1/\nu} (T-T_c)/T_c))</math> 、 <math>|m| = L^{-\beta/\nu} h ( L^{1/\nu} (T-T_c)/T_c))</math> です。
 
 
#make a data collapse of the connected susceptibility as a function of (T-Tc)/Tc:
 
for d in connected_susc:
 
    d.x -= Tc
 
    d.x = d.x/Tc
 
    l = d.props['L']
 
    d.x = d.x * pow(float(l),a)
 
 
two_minus_eta=... #your estimate
 
for d in connected_susc:
 
    l = d.props['L']
 
    d.y = d.y/pow(float(l),two_eta)
 
 
plt.figure()
 
pyalps.plot.plot(connected_susc)
 
plt.xlabel(' $L^a(T-T_c)/T_c$')
 
plt.ylabel(r'$L^{\gamma/\nu}\chi_c$')
 
plt.title('2D Ising model')
 
plt.show()
 
 
#make a data collapse of the |magnetization| as a function of (T-Tc)/Tc
 
for d in magnetization_abs:
 
    d.x -= Tc
 
    d.x = d.x/Tc
 
    l = d.props['L']
 
    d.x = d.x * pow(float(l),a)
 
beta_over_nu=... #your estimate   
 
for d in magnetization_abs:
 
    l = d.props['L']
 
    d.y = d.y / pow(float(l),-beta_over_nu)
 
 
 
plt.figure()
 
pyalps.plot.plot(magnetization_abs)
 
plt.xlabel(' $L^a(T-T_c)/T_c$')
 
plt.ylabel(r'$L^{-\beta/\nu} |m|$')
 
plt.title('2D Ising model')
 
plt.show()
 
 
=  臨界指数の正確な推定値 =
 
<!--google-
 
The exact critical exponents of the 2d Ising are : <math>\nu=1, \eta=1/4, \beta=1/8</math> and <math>\alpha=0</math>. On this last exponent : the specific heat does diverge, but logarithmically, not as power-law and hence the specific heat exponent is 0 dimensional. How do you compare your estimates with the exact values ?
 
 
The quality of the estimates one obtains for the critical exponents and temperature increases coniderably when using larger system sizes, which were not accessible during the time scale of this tutorial. Moreover, they also rely on the quality of the estimate of the critical temperature. For more precision on critical exponents, one can enforce the exact value of the critical temperature <math>T_c = 2 / \ln(1+\sqrt(2)) = 2.269\ldots</math>and simulate larger system sizes, which we leave to you as an exercise.
 
Since there is only one value of temperature as a parameter, the previous way of determining <math>\nu</math> through a data collapse is not that helpful.
 
The above scaling form for the Binder cumulant allows for another more direct determination of \nu. Derivating the Binder cumulant with respect to T, one easily sees that the derivative <math>dU_4/dT</math> scales as <math>L^{1/\nu}</math> at <math>T_c</math>. You can either obtain this derivative from a numerical differentiation of your data, or better, it can also be obtained as a thermodynamical average during the Monte Carlo simulations. Note that this requires good statistics. Once you have obtained the data, the exponent <math>\nu</math> can be determined by a power-law fit of this derivative <math>dU_4/dT</math>  at <math>T_c</math> as a function of system size <math> L </math>.
 
-->
 
 
2Dイジングの厳密な臨界指数は、次のとおりです。<math>\nu=1、\eta=1/4、\beta=1/8</math>はと<math>\alpha=0</math>は。この最後の指数上の特定の熱が発散していますが、対数、べき乗則、したがって、特定の熱指数が0次元ではありませんように。どのように正確な値を使用して見積もりを比較するのですか? このチュートリアルの時間スケールの間にはアクセスできませんでした大規模なシステムのサイズを、使用するときにいずれかの臨界指数と温度を取得する推定の質が大幅に増加します。また、彼らはまた、臨界温度の推定値の品質に依存しています。臨界指数で、より高精度、1つは臨界温度の<math>T_c = 2 / \ln(1+\sqrt(2)) = 2.269\ldots</math>の正確な値を適用し、我々は演習としてあなたに残して大規模なシステムのサイズを、シミュレートすることができます。パラメータは、データの崩壊を通じて<math>\nu</math>をを決定する以前の方法として、温度の値が一つだけあるのでそれは役立ちません。バインダーのキュムラントは、上記のスケーリング形は\ NUの別のより直接的な測定が可能になります。派生的Tに対するバインダーのキュムラントは、1つは容易に認識している<math>T_c</math>での<math>L^{1/\nu}</math>としてデリバティブ<math>dU_4/dT</math>に比例します。あなたはどちらのデータ、またはそれ以上の数値微分からこの誘導体を得ることができ、また、モンテカルロシミュレーションの間に熱力学的平均値として取得することができます。これは良いの統計情報を必要としないことに注意してください。いったんデータを取得した、指数<math>\nu</math>を、システムのサイズ<math>L</math>をの関数としての<math>T_c</math>で、このデリバティブ<math>dU_4/dT</math> のべき乗則近似によって決定することができる。
 

Revision as of 10:44, 12 March 2012