Mittelwert ermitteln
Verfasst: Dienstag 30. Mai 2017, 01:03
				
				Hallo liebe Freunde!
Weiß jemand vielleicht, wie man < M**4 > / < M**2 > **2 in Python konstruieren kann?
M steht für die Magnetisierung. Sie wird in einer Schleife wird durch 1000 Durchläufe ermittelt. Nun muss ich den Mittelwert bilden, weiß aber nicht, wie es geht.
Für eine Hilfe wäre ich dankbar
Liebe Grüße
Micha
			Weiß jemand vielleicht, wie man < M**4 > / < M**2 > **2 in Python konstruieren kann?
M steht für die Magnetisierung. Sie wird in einer Schleife wird durch 1000 Durchläufe ermittelt. Nun muss ich den Mittelwert bilden, weiß aber nicht, wie es geht.
Code: Alles auswählen
def initialzustand(N):
    zustand = 2*np.random.randint(2, size=(N,N))-1
    return zustand
def mcmove(konfig, beta):
    for i in range(N):
        for j in range(N):
            a = np.random.randint(0,N)
            b = np.random.randint(0,N)
            s = konfig[a,b]
            nb = konfig[(a+1)%N,b]+konfig[a,(b+1)%N]+konfig[(a-1)%N,b]+konfig[a,(b-1)%N]
            cost = 2*s*nb
            if cost < 0 :
                s*= -1
            elif rand() < np.exp(-cost*beta):
                s*= -1
            konfig[a,b]=s
    return konfig
def calcEnergie(konfig):
    Energie = 0
    for i in range(len(konfig)):
        for j in range(len(konfig)):
            S = konfig[i,j]
            nb = konfig[(i+1)%N,j]+konfig[i,(j+1)%N]+konfig[(i-1)%N,j]+konfig[i,(j-1)%N]
            Energie += -nb*S
    return Energie/4.
def calcMag(konfig):
    return np.sum(konfig)
nt = 500
N = 10
eqSteps = 1000
mcSteps = 1000
T          = np.linspace(1,4,nt)
Kumulante  = np.zeros(nt)
for m in range(len(T)):
    M1 = M2 = 0
    konfig = initialzustand (N)
    for i in range(eqSteps):
        mcmove(konfig,1.0/T[m])
    for i in range(mcSteps):
        mcmove(konfig, 1.0/T[m])
        Mag = calcMag(konfig)
        M1 = M1 + Mag
        M2 = M2 + Mag*Mag;
       [u] Kumulante[m]   =( Hier muss ich[b] < M**4 > / < M**2 > **2[/b] eingeben und anschließend plotten)[/u] 
       Der erste Term soll irgedwie         [u]M2**4/mcSteps[/u]  aussehen. oder zumindest habe ich was ähnliches in 
       einem Buch gesehen. 
plt.plot(T, Kumulante, 'o',color='red', markersize=3, label='Specific Heat');
plt.xlabel('Temperature (T)', fontsize=20);
plt.ylabel('Kumulante',fontsize=20);
plt.show()Liebe Grüße
Micha