Как реализовать эту статистическую ошибку для выборочной модели Монте-Карло 2D модели Изинга? - PullRequest
1 голос
/ 01 февраля 2020

У меня возникла проблема с реализацией Python этого уравнения статистической ошибки, которое я нашел в «Моделировании Монте-Карло в статистической физике» Биндера (стр. 94, 2014). Прежде всего, основная часть кода для моего алгоритма выглядит следующим образом:

SCALE_11 = DISCARDED_SAMPS/(MC_STEPS*L*L)
SCALE_22 = DISCARDED_SAMPS*DISCARDED_SAMPS*SCALE_1/MC_STEPS
for k in range(NT):
    E1 = E2 = M1 = M2 = np.float_(0.0)
    inv_T = 1.0 / T[k]  # beta = 1/k_B*Temperature, set k_B = 1
    prob = np.exp(-4*inv_T*np.array([0,1,2], dtype=np.uint8))
    p_i = []
    lattice = 2*np.random.randint(2, size=(L, L), dtype=np.int16)-1

    for i in range(EQ_STEPS):   # equilibrate
        sweep(lattice, prob)# 1 sweep = L**2 Monte Carlo moves per EQ_STEP
        for i in range(MC_STEPS):
            sweep(lattice, prob)

   for i in range(MC_STEPS)
        sweep(lattice, prob)                
        if i % DISCARDED_SAMPS == 0:       # the remainder
            energy = hamiltonian(lattice)      # calculate the energy
            mag = abs(np.sum(lattice))     # calculate the magnetisation

            E1 += energy         # the estimator
            M1 += mag            # the estimator
            E2 += energy*energy  # the estimator
            M2 += mag*mag        # the estimator
   E[k] = SCALE_11*E1
   M[k] = SCALE_11*M1 
   C[k] = (SCALE_11*E2 - SCALE_22*E1*E1)*inv_T*inv_T
   X[k] = (SCALE_11*M2 - SCALE_22*M1*M1)*inv_T

По сути, в моем алгоритме я выполняю итерацию в диапазоне различных температур и выполняю симуляцию по методу Монте-Карло. При каждой температуре мой первый l oop уравновешивает систему, а мой второй l oop еще раз подметает ее и проводит наблюдения на каждом DISCARDED_SAMPS (DS) шагах, поскольку образцы коррелируют.

E, M, C, X - энергия, намагниченность, удельная c теплота и восприимчивость (все на спин) соответственно. Специфические c уравнения теплопроводности и восприимчивости имеют вид enter image description here

Теперь в моем алгоритме <E^2> и <E> сделаны на коде, по сути, я просто выполняя enter image description here

, что было довольно просто. Но теперь я собираюсь реализовать статистическое уравнение ошибки из вышеупомянутого учебника, где оно имеет вид: enter image description here

Где A - это наблюдаемая величина, которая может быть E, M et c. У меня возникли проблемы с реализацией этого уравнения, если мы берем n как число раз, когда i % DISCARDED_SAMPS == 0 произошло, и A^2, A теперь являются средними по MC_STEPS, а A_0 - это наблюдаемое перед первым i % DISCARDED_SAMPS == 0 получилось. Как можно реализовать это на Python?

...