Estoy simulando el modelo de Ising en 2D hasta 5D y quiero calcular la correlación de espín, la longitud de correlación y el exponente crítico del sistema. ¿Cuál es una buena manera de hacer esto?
En general, sé que necesito:
Dónde es el número de pruebas de Monte Carlo realizadas.
¿Cuál es una buena manera de calcular realmente ? ¿Y cómo me ayuda esto a calcular la longitud de la correlación? y el exponente critico
Explicaré cómo medí la función de correlación espín-espín para el modelo 2d Ising. La generalización a más de 2 dimensiones debería ser sencilla siempre que tenga redes hipercúbicas.
Solo para aclarar la notación: usemos el nombre para el giro en la posición . Supongamos que nuestro modelo de Ising tiene gira, así que tenemos .
Lo primero que hay que tener en cuenta es que asumo que la función de correlación espín-espín, llamémosla - solo depende de la distancia absoluta entre los dos giros y .
No estoy seguro de si esto es cierto en general, pero hay una prueba de que es cierto para el modelo 2d Ising a la temperatura crítica. (Se ha probado una función de correlación giro-giro rotacionalmente simétrica, y esa es solo otra forma de decir que depende solo de la distancia). No confíe en mi palabra, pero por ahora no me preocuparía por esta suposición. ..
Sabiendo esto, es fácil ver que en cada paso de su cadena de Markov no tiene que mirar todas las posibles pares de giros. En cambio, solo puede mirar un subconjunto de pares, donde tiene todas las distancias le interesa dentro de este subconjunto.
Para mi implementación, elegí usar todos los giros. a lo largo de la diagonal de la red y medir únicamente la correlación a lo largo de las dos direcciones de los vectores de la red. Así que solo considero la correlación entre y todo (horizontalmente) y (verticalmente). Recuerda que la función de correlación espín-espín es rotacionalmente simétrica, por lo que no ganas nada al considerar pares de espines en cualquier otra dirección. Medir a lo largo de los ejes hace que tu vida sea mucho más fácil ya que solo tendrás distancias enteras , lo que significa que puedes usar un simple matriz de elementos con la distancia como índice para acumular los términos de su suma. Esto es lo que debes calcular en cada paso de Monte Carlo:
Esto es exactamente lo que hace esta función IsingModel2d::ss_corr() en mi código. (Solo es necesario realizar un seguimiento de las muestras porque realiza una cantidad diferente de mediciones para diferentes valores de . Considere como ejemplo los casos extremos: todos menos dos giros en la diagonal tiene 4 vecinos más cercanos a la distancia , pero sólo y tener dos parejas cada una a distancia . Por lo tanto, debe compensar el hecho de que mide la correlación entre giros cercanos con más frecuencia que entre giros lejanos).
Tenga en cuenta que obtendrá una diferente en cada paso de Monte Carlo, dependiendo de su configuración actual. Al final, debe promediarlos (tal como lo hace con cualquier otro observable) para obtener el resultado final de la función de correlación espín-espín:
Una vez que tengas esto, puedes encajar donde con suerte deberías encontrar . Echa un vistazo a esta otra pregunta sobre detalles sobre el ajuste.
¡Espero que esto ayude!
Roberto Rüger
alvarezcl
alvarezcl
alvarezcl
vector<double> IsingModel2d::ss_corr()
en model_ising2dsqrmet.cpp ¿Le importaría decirme qué hace? Repasaré su código, pero en mi opinión, directamente desde la fuente es lo mejor.Roberto Rüger