Binder crossings find the Ising critical point to three digits
The 2D Ising model has an exact critical temperature: Tc = 2/ln(1+√2) ≈ 2.26919. I tried to find it from simulation alone, using the textbook trick of Binder cumulant crossings. Comparing 64×64 and 128×128 lattices gave 2.2700 ± 0.0008. That matches to three digits and sits within one error bar of the exact value, after about 25 minutes of laptop GPU time. Small lattices miss: the 8×8 vs 16×16 crossing came out at 2.2646, 8.5 error bars too low.
The trick
For each lattice size L, measure the magnetization m (the mean spin) and form U = 1 − ⟨m⁴⟩ / (3⟨m²⟩²). Deep in the ordered phase U goes to 2/3, and in the disordered phase it goes to 0. Near the critical point, U for a big lattice falls off more steeply than for a small one, but right at Tc every size gives roughly the same value. So you plot U against T for two sizes and read off where the curves cross. You never need to know the critical exponents.
The run
Checkerboard Metropolis on the GPU through MLX, with 17 temperatures from 2.230 to 2.310 in steps of 0.005 and 64 independent replicas per temperature, all updated as one array. That works out to about 850 million spin updates a second at L=128. Each lattice started fully ordered, got 5,000 to 25,000 sweeps to equilibrate depending on size, and then 30,000 to 40,000 measured sweeps. The crossing is the root of a quadratic fitted to UL − U2L over the 9 temperatures around the sign change. Error bars come from a jackknife over 16 groups of 4 replicas.
| sizes | crossing T | minus exact | in error bars | U at crossing |
|---|---|---|---|---|
| 8 / 16 | 2.2646 ± 0.0006 | −0.0046 | −8.5 | 0.6141 |
| 16 / 32 | 2.2678 ± 0.0007 | −0.0014 | −1.9 | 0.6123 |
| 32 / 64 | 2.2684 ± 0.0009 | −0.0008 | −0.9 | 0.6116 |
| 64 / 128 | 2.2700 ± 0.0008 | +0.0008 | +0.9 | 0.608 ± 0.002 |
GPU time per size: 3 s at L=8, 7 s at 16, 46 s at 32, 3.7 minutes at 64 and 20 minutes at 128.
What it shows
The crossings creep up toward Tc from below as the lattices grow. The curves don't meet at exactly one point, because small lattices carry correction terms that fade with size. At 8/16 that bias is 0.2% of Tc, which is enormous next to the statistical error. From 32/64 on, the bias is smaller than the noise, and the last two pairs sit about one error bar on either side of the exact value. The height where the curves cross drifts too, from 0.614 down toward the published infinite-lattice value of about 0.6107.
So what
Binder crossings earn their reputation. Without knowing any exponent, you get the critical temperature to 0.04% from two modest lattices. Getting below that takes more than a bigger GPU budget, though. Halving the error bar means 4 times the samples. Plain Metropolis also slows sharply near Tc: the sweeps needed between independent samples grow roughly as L2.2. One more doubling to L=256 would cost hours for each digit. A cluster algorithm like Wolff's would be the next thing to try.
Method: one Mac, a 60-line MLX script, one seed per size. I didn't check equilibration separately, beyond the crossings landing where theory says they should. The 128 lattice had 25,000 sweeps to settle, which is near the edge for Metropolis at that size.