Ich simuliere das Ising-Modell in 2D bis 5D und möchte die Spin-Spin-Korrelation, die Korrelationslänge und den kritischen Exponenten des Systems berechnen. Was ist ein guter Weg, um dies zu tun?
Im Allgemeinen weiß ich, dass ich brauche:
Wo ist die Anzahl der durchgeführten Monte-Carlo-Versuche.
Was ist ein guter Weg, um tatsächlich zu rechnen ? Und wie hilft mir das bei der Berechnung der Korrelationslänge und der kritische Exponent
Ich werde erklären, wie ich die Spin-Spin-Korrelationsfunktion für das 2d-Ising-Modell gemessen habe. Die Verallgemeinerung auf mehr als 2 Dimensionen sollte einfach sein, solange Sie hyperkubische Gitter haben.
Nur um die Schreibweise klarzustellen: Lassen Sie uns den Namen verwenden für den Spin in Position . Nehmen wir an, unser Ising-Modell hat Spins, also haben wir .
Das erste, was zu beachten ist, ist, dass ich annehme, dass die Spin-Spin-Korrelationsfunktion – nennen wir sie - hängt nur vom absoluten Abstand zwischen den beiden Spins ab Und .
Ich bin mir nicht sicher, ob dies im Allgemeinen zutrifft, aber es gibt einen Beweis dafür, dass es für das 2d-Ising-Modell bei der kritischen Temperatur gilt. (Eine rotationssymmetrische Spin-Spin-Korrelationsfunktion ist bewiesen, und das ist nur eine andere Art zu sagen, dass sie nur von der Entfernung abhängt.) Nehmen Sie mich nicht beim Wort, aber im Moment würde ich mir über diese Annahme keine Gedanken machen. ..
Wenn Sie dies wissen, ist es leicht zu erkennen, dass Sie bei jedem Schritt in Ihrer Markov-Kette überhaupt nicht nachsehen müssen Paare von Spins. Stattdessen können Sie nur eine Teilmenge von Paaren betrachten, in der Sie alle Entfernungen haben Sie innerhalb dieser Teilmenge interessiert sind.
Für meine Implementierung habe ich mich entschieden, alle Drehungen zu verwenden entlang der Diagonale des Gitters zu messen und nur die Korrelation entlang der beiden Richtungen der Gittervektoren zu messen. Ich betrachte also nur die Korrelation zwischen und alles (horizontal) und (vertikal). Denken Sie daran, dass die Spin-Spin-Korrelationsfunktion rotationssymmetrisch ist, sodass Sie nichts gewinnen, wenn Sie Spinpaare in einer anderen Richtung betrachten. Das Messen entlang der Achsen macht Ihr Leben viel einfacher, da Sie nur ganzzahlige Entfernungen haben , was bedeutet, dass Sie eine Ebene verwenden können Elementarray mit dem Abstand als Index, um die Terme Ihrer Summe zu akkumulieren. Das sollten Sie bei jedem Monte-Carlo-Schritt berechnen:
Genau das macht diese Funktion IsingModel2d::ss_corr() in meinem Code. (Das Verfolgen der Proben ist nur erforderlich, weil Sie eine unterschiedliche Anzahl von Messungen für unterschiedliche Werte von machen . Betrachten Sie als Beispiel die Extremfälle: Alle bis auf zwei Spins auf der Diagonale haben 4 nächste Nachbarn in der Ferne , aber nur Und haben jeweils zwei Partner in der Ferne . Sie müssen also kompensieren, dass Sie die Korrelation zwischen nahen Spins häufiger messen als zwischen weit entfernten Spins.)
Beachten Sie, dass Sie eine andere erhalten bei jedem Monte-Carlo-Schritt, abhängig von Ihrer aktuellen Konfiguration. Am Ende sollten Sie sie mitteln (genau wie bei jeder anderen Observable), um Ihr Endergebnis für die Spin-Spin-Korrelationsfunktion zu erhalten:
Sobald Sie dies haben, können Sie passen wo Sie hoffentlich finden sollten . Sehen Sie sich diese andere Frage zu Details bezüglich der Passform an.
Hoffe das hilft!
Robert Rüger
alvarezkl
alvarezkl
alvarezkl
vector<double> IsingModel2d::ss_corr()
in model_ising2dsqrmet.cpp Würdest du mir bitte sagen, was sie macht? Ich werde Ihren Code durchgehen, aber direkt von der Quelle ist meiner Meinung nach am besten.Robert Rüger