Wie misst man die Spin-Spin-Korrelation in einer Monte-Carlo-Simulation des Ising-Modells?

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:

< S Ö S R >≅ 1 N ich N S Ö S R

Wo N ist die Anzahl der durchgeführten Monte-Carlo-Versuche.

Was ist ein guter Weg, um tatsächlich zu rechnen S Ö S R ? Und wie hilft mir das bei der Berechnung der Korrelationslänge ξ und der kritische Exponent v

Nein, Sie müssen den Verlauf einer Zelle nicht speichern, um die Spin-Spin-Korrelationsfunktion zu berechnen. Die Historie wird nur benötigt, wenn Sie die Autokorrelation einer Observablen in der Zeit betrachten, aber was hier gefragt ist, ist die Korrelation zwischen der Richtung von zwei Spins zur gleichen Zeit. @alvarezcl: Schau dir diese Frage an . Lass mich wissen, ob das hilft.
Danke für eure Hilfe, alle. @RobertRüger Der Link, den Sie aufgesetzt haben, hat geholfen, aber ich habe grundsätzlich Probleme. Was ist ein vernünftiges Verfahren zum Durchlaufen und Schätzen, wenn ich jede MC-Iteration durchlaufe?
< S Ö S R >
von all den Drehungen, die ich habe?
@RobertRüger, Ihr Github-Code spricht über Observables, bei denen Sie die Spin-Spin-Korrelation berechnen. Ich habe Probleme, Ihre README-Datei den tatsächlichen Dateien zuzuordnen. Gibt es da ein System?
@RobertRüger, ich finde deine Spin-Spin-Korrelationsfunktion nämlich 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.
Ja, es gibt eine Art System im Quellcode, obwohl es mein erstes C ++ - Projekt war und ich heute viele Dinge anders machen würde ... Ich werde eine Antwort posten, in der beschrieben wird, wie es für das 2D-IsingModel funktioniert. Es sollte dann nicht schwer sein, es auf mehr als 2 Dimensionen zu verallgemeinern.

Antworten (1)

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 σ ( ich , J ) für den Spin in Position R ( ich , J ) = ( ich J ) . Nehmen wir an, unser Ising-Modell hat L × L Spins, also haben wir 1 ich , J L .

Das erste, was zu beachten ist, ist, dass ich annehme, dass die Spin-Spin-Korrelationsfunktion – nennen wir sie χ ( ich , J ) ( k , l ) - hängt nur vom absoluten Abstand zwischen den beiden Spins ab σ ( ich , J ) Und σ ( k , l ) .

χ ( ich , J ) ( k , l ) = χ ( | R ( ich , J ) R ( k , l ) | ) = χ ( R )

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 L 2 Paare von Spins. Stattdessen können Sie nur eine Teilmenge von Paaren betrachten, in der Sie alle Entfernungen haben R Sie innerhalb dieser Teilmenge interessiert sind.

Für meine Implementierung habe ich mich entschieden, alle Drehungen zu verwenden σ ( ich , ich ) 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 σ ( ich , ich ) und alles σ ( ich , J ) (horizontal) und σ ( J , ich ) (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 R , was bedeutet, dass Sie eine Ebene verwenden können L 1 Elementarray mit dem Abstand als Index, um die Terme Ihrer Summe zu akkumulieren. Das sollten Sie bei jedem Monte-Carlo-Schritt berechnen:

Summe ( R ) = ich = 1 L J = 1 L ( σ ( ich , ich ) σ ( ich , J ) + σ ( ich , ich ) σ ( J , ich ) )  mit  R = | ich J |

Proben ( R ) = ich = 1 L J = 1 L 2  mit  R = | ich J |

χ N ( R ) = Summe ( R ) Proben ( R )

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 R . Betrachten Sie als Beispiel die Extremfälle: Alle bis auf zwei Spins σ ( ich , ich ) auf der Diagonale haben 4 nächste Nachbarn in der Ferne R = 1 , aber nur σ ( 1 , 1 ) Und σ ( L , L ) haben jeweils zwei Partner in der Ferne R = L 1 . 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 χ N ( R ) 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:

χ ( R ) = 1 N 1 N = 1 N χ N ( R )

Sobald Sie dies haben, können Sie passen χ ( R ) = R β wo Sie hoffentlich finden sollten β = 0,25 . Sehen Sie sich diese andere Frage zu Details bezüglich der Passform an.

Hoffe das hilft!

Danke für eure Hilfe, ich kämpfe schon seit einiger Zeit damit. Vielleicht können Sie hier helfen, einige meiner Ergebnisse zu erläutern: Link
Sollten die Summen bis zu R , nicht L ?
Ich verstehe, also deins S u M ( R ) ist explizit ein Array, wobei jeder Index bei r den Samples entspricht. Ich war anfangs verwirrt, aber jetzt scheine ich es zu verstehen.
Tatsächlich können Sie das für jedes r schreiben
S u M ( R ) = ich L σ ( ich , ich ) ( σ ( ich , ich R ) + σ ( ich R , ich ) + σ ( ich , ich + R ) σ ( ich + R , ich ) )
Dies ergibt die 4 gekoppelten Werte für jede Diagonale. Man würde dann durch 4L dividieren, da L Diagonalwerte abgetastet wurden. Das war es, wonach ich ursprünglich gefragt hatte; dies wäre nur der Wert bei einem Index R des Arrays? Dies setzt periodische Randbedingungen voraus.
Würden Sie auch wissen oder eine Ressource haben, wie man die Korrelationslänge bei gegebener Spin-Spin-Funktion berechnet?
Mit den periodischen Randbedingungen muss man etwas aufpassen: Wenn man die Grenzen überschreitet (was prinzipiell in Ordnung ist), muss man das berücksichtigen σ ( ich , ich ) Und σ ( ich , ich + L 1 ) sind eigentlich die nächsten Nachbarn und müssen zu den gehen S u M ( 1 ) -Element, obwohl es so aussieht, als sollten sie hinzugefügt werden S u M ( L 1 ) ...
Bei der Korrelationslänge kann ich dir leider nicht helfen. Ich weiß, dass es am kritischen Punkt unendlich ist, aber ich bin mir im Allgemeinen nicht sicher, wie es definiert ist ...
Ich interessiere mich wirklich für diese Frage. Konnten Sie die Korrelationslänge berechnen? Wenn ja, wie hast du das gemacht?