Od mikrostanów do makrostanów
Klasyczna termodynamika opisuje silniki cieplne i diagramy fazowe, nie pytając, co robią cząsteczki. Mechanika statystyczna robi coś przeciwnego: wyprowadza każdą wielkość termodynamiczną — temperaturę, entropię, ciśnienie — z mikroskopowych prawdopodobieństw. Pomost między nimi jest prosty: układ w równowadze termicznej zajmuje każdy mikrostan z prawdopodobieństwem proporcjonalnym do e^(−E/kT), czynnika Boltzmanna.
Entropia S = k·ln(Ω) zlicza mikrostany. Druga zasada termodynamiki — entropia nigdy nie maleje w układzie izolowanym — mówi jedynie tyle, że układ zmierza ku makrostanom o większej liczbie mikrostanów. Przy 10²³ cząstkach prawdopodobieństwo cofnięcia się jest praktycznie zerowe.
Prawdopodobieństwo mikrostanu i: P_i = e^(−E_i/kT) /
Z
Funkcja rozdziału: Z = Σ_i e^(−E_i/kT) (suma po wszystkich
mikrostanach)
Energia swobodna Helmholtza: F = −kT · ln Z
Energia średnia: ⟨E⟩ = −∂(ln Z)/∂β gdzie β = 1/kT
Entropia: S = −∂F/∂T = k·ln Z + ⟨E⟩/T
Hamiltonian Isinga: H = −J·Σ_{⟨ij⟩} s_i·s_j − h·Σ_i s_i
Prawdopodobieństwo akceptacji Metropolisa: min(1, e^(−ΔE/kT))
Przejścia fazowe i zjawiska krytyczne
Model Isinga przechodzi przejście fazowe drugiego rodzaju w temperaturze Curie T_c ≈ 2,269 J/k (dokładne rozwiązanie 2D Onsagera, 1944). Poniżej T_c układ łamie symetrię: spiny ustawiają się ferromagnetycznie. Dokładnie w T_c długość korelacji ξ → ∞, fluktuacje zachodzą na każdej skali długości, a układ jest opisywany przez skalowo niezmienniczą (konforemną) teorię pola. Dlatego opalescencja krytyczna wygląda tak samo pod mikroskopem, jak i z odległości wyciągniętej ręki.
Dlaczego działa algorytm Metropolisa? Reguła Metropolisa — zawsze akceptuj ruchy obniżające energię, czasem akceptuj ruchy ją podwyższające — spełnia zasadę równowagi szczegółowej: strumień prawdopodobieństwa ze stanu A do stanu B jest równy strumieniowi z B do A w równowadze. To gwarantuje, że łańcuch Markowa zbiega do rozkładu Boltzmanna niezależnie od konfiguracji początkowej.
Implementacja metody Metropolis Monte Carlo
// Krok Metropolisa dla modelu Isinga (2D, warunki periodyczne)
function metropolisStep(spins, J, T) {
const N = spins.length;
const i = (Math.random() * N) | 0;
const j = (Math.random() * N) | 0;
// Zmiana energii przy odwróceniu spin[i][j]
const s = spins[i][j];
const neighbours =
spins[(i + 1) % N][j] + spins[(i - 1 + N) % N][j] +
spins[i][(j + 1) % N] + spins[i][(j - 1 + N) % N];
const dE = 2 * J * s * neighbours;
// Akceptacja / odrzucenie (kryterium Metropolisa)
if (dE <= 0 || Math.random() < Math.exp(-dE / T)) {
spins[i][j] = -s; // odwróć spin
}
}