Examples using the Metropolis sampling method

# Magnetization as a function of temperature

import IsingModels as Ising
using Statistics, CairoMakie, Random

Random.seed!(1) # make reproducible

Define the temperatures we will consider.

βs = 0:0.025:1

Simulate a range of temperatures. Compare to analytical magnetization.

fig = Figure(resolution=(600,400))
ax = Axis(fig[1,1], xlabel="β", ylabel="m")
lines!(ax, 0:0.01:1, Ising.onsager_magnetization, color=:black, label="analytical")

mavg = zeros(length(βs))
mstd = zeros(length(βs))
σ = bitrand(20, 20)
for (k, β) in enumerate(βs)
    σ_t, M, E = Ising.metropolis!(σ, β; steps=10^7)
    m = abs.(M[(length(M) ÷ 2):end]) / length(σ)
    mavg[k] = mean(m)
    mstd[k] = std(m)
end
scatter!(ax, βs, mavg, color=:blue, markersize=5, label="MC, L=20")
errorbars!(ax, βs, mavg, mstd/2, color=:blue, whiskerwidth=5)

mavg = zeros(length(βs))
mstd = zeros(length(βs))
σ = bitrand(64, 64)
for (k, β) in enumerate(βs)
    σ_t, M, E = Ising.metropolis!(σ, β; steps=10^7)
    m = abs.(M[(length(M) ÷ 2):end]) / length(σ)
    mavg[k] = mean(m)
    mstd[k] = std(m)
end
scatter!(ax, βs, mavg, color=:red, markersize=5, label="MC, L=50")
errorbars!(ax, βs, mavg, mstd/2, color=:red, whiskerwidth=5)

axislegend(ax, position=:rb)
fig

This page was generated using Literate.jl.