2 votos

Modelo Ising 2D, comprensión de las autocorrelaciones, Monte Carlo

He estado luchando bastante con la implementación de un código de autocorrelación en mi proyecto actual. La autocorrelación como es ahora, está aumentando exponencialmente de 1 en el inicio de mi ejecución MC, y golpeando 2 a mitad de camino a través de la simulación MC independientemente de cómo muchos barridos que hago a través de la red.

El sistema

Red cuadrada de 10x10 sin campo magnético externo y con acoplamiento ferromagnético. El motivo de 10x10 es la ejecución rápida del código para construirlo.

Esto es lo que he hecho hasta ahora:

  1. Dejar que el Monte Carlo de Metrópolis trabaje hasta que el sistema esté en equilibrio (comprobarlo ejecutando dos estados iniciales diferentes con semillas aleatorias distintas).
  2. Entonces empiezo a barrer a través de la red, actualizando las energías y la magnetización para cada intento de voltear un espín. Cuando he hecho un barrido por la red, el último valor de la energía y la magnetización se almacena. Luego se continúa con el siguiente barrido y se siguen actualizando los valores. Así, las energías y la magnetización sólo se almacenan una vez por barrido.
  3. Cuando he realizado, por ejemplo, 2000 barridos, calculo la autocorrelación del sistema según Newman & Barkema (Ec. 3.21 en http://itf.fys.kuleuven.be/~fpspXIII/material/Barkema_FPSPXIII.pdf ). La fórmula es la siguiente: $$\chi(t)=\frac{1}{t_{max}-t}\sum_{t'=0}^{t_{max}-t}m(t')m(t'+t)-\frac{1}{t_{max}-t}\sum_{t'=0}^{t_{max}-t}m(t')\times\frac{1}{t_{max}-t}\sum_{t'=0}^{t_{max}-t}m(t'+t)$$ donde t define el número de barridos de la red, es decir, el desplazamiento/lag desde algún valor.

Mi problema De mi simulación en $k_{b}T/J$ , donde $k_{b}$ se fija en 1, $J=1$ es el acoplamiento ferromagnético, y $T=1$ la función de autocorrelación crece. He intentado normalizarla dividiendo por el primer valor que da como resultado un inicio en 1, pero se comporta de forma extraña como se ha indicado. Así que me puse a calcular a mano tratando de ver si había codificado algo mal. He trabajado con un sistema en el que cada espín de la red tenía el espín 1 por cada $t\Rightarrow m(t')=m(t'+t)=\langle m \rangle=1$ . A continuación, corto la autocorrelación en $t$ =1000 cuando se realizan 2000 barridos. La fórmula se reduce entonces a $$\chi(t)=\frac{1}{2000-t}\sum_{t'=0}^{2000-t}1-\frac{1}{2000-t}\sum_{t'=0}^{2000-t}1\times\frac{1}{2000-t}\sum_{t'=0}^{2000-t}1$$ . Entonces, para algunos valores: $$\chi(0)=\frac{1}{2000}\sum_{t'=0}^{2000}1-\frac{1}{2000}\sum_{t'=0}^{2000}1\times\frac{1}{2000}\sum_{t'=0}^{2000}1$$ $$=\frac{2001}{2000}-\left(\frac{2001}{2000}\right)^{2}\approx-5\cdot10^{-4}$$ $$\chi(500)=\frac{1501}{1500}-\left(\frac{1501}{1500}\right)^{2}\approx-6.6\cdot10^{-4}$$ $$\chi(1000)=\frac{1001}{1000}-\left(\frac{1001}{1000}\right)^{2}\approx-1\cdot10^{-3}$$ Como vemos, el valor de la autocorrelación se ha duplicado al comprobar la mitad del número de barridos a través de la red.

Preguntas:

  1. Yo esperaría que la función de correlación se comportara como una función que decae exponencialmente como $e^{-t/\tau}$ donde $\tau$ es el tiempo de correlación, sino que los gráficos muestran un crecimiento exponencial con los valores calculados anteriormente.
  2. La expresión para la autocorrelación, tal y como se indica en este post, es una discretización de $$\chi(t)=\int dt'(m(t')-\langle m\rangle)(m(t'+t)-\langle m \rangle)$$ lo que implica que si todos los valores son 1, la integral debe dar alguna constante, no una función creciente. ¿Qué ha fallado?

1voto

Greg Petersen Puntos 126

Su suma tiene que ir de $1$ a $2000$ en lugar de $0$ a $2000$ . Esencialmente estás tomando un promedio, por lo que no tiene sentido dividir por menos valores de los que estás sumando (por ejemplo $2001/2000$ ). Si se hace esta corrección, todos los cálculos anteriores dan como resultado $0$ . Esto conduce a una función de autocorrelación indeterminada ya que se queda con $0/0$ al normalizar por la varianza.

0voto

toddward Puntos 11

Estoy de acuerdo con Greg Petersen: el factor de normalización debe ser el número de términos de la suma, es decir $t_{\rm max}-t+1$ y no $t_{\rm max}-t$ si su suma va de $t=0$ a $t_{\rm max}$ .

Su elección de un sistema en el que cada espín de la red tuviera un espín 1 para cada $t$ es patológico: ¡los espines están infinitamente correlacionados en cualquier momento! Corresponde a una temperatura $T=0$ .

A temperatura finita, se espera que las autocorrelaciones decaigan exponencialmente rápido (excepto en el punto crítico) $\chi(t)\sim \chi(0)e^{-t/\tau}$ por lo que es inútil elegir un valor demasiado grande de $t_{\rm max}$ . En la práctica, $t_{\rm max}$ debe ser igual a varias veces $\tau$ . Al elegir un valor demasiado grande de $t_{\rm max}$ La mayoría de los términos de la suma son sólo ruido y, para un sistema finito, no se puede esperar que se cancelen simplemente. Para un $10\times 10$ Modelo Ising, $\tau$ es ciertamente mucho más pequeño que el de 2000.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X