Você está na página 1de 5

Mecânica Estatística

May 2, 2021

1 Questão 6-a) e 6-f)


[1]: import numpy as np
import seaborn as sns
import scipy.linalg as la
import matplotlib.pyplot as plt
import math as mt

lista,eig,seig,deig,result,transposta,matriz_soma,result_2 =[],␣
,→[],[],[],[],[],[],[]

def ensemble(N):#essa função produz as 10000 matrizes de ordem N, calcula a sua␣


,→transposta, soma ambas e dividi todos os elementos por 2

mu,sigma=0,1 #média,desvio padrão


for i in range(10000):
lista.append(np.array(np.random.normal(mu, sigma, size=(N, N))))
for i in range(len(lista)):
transposta.append(matrixTranspose(lista[i]))
somar(lista,transposta)

return lista,transposta,matriz_soma,matriz_final

def matrixTranspose(anArray): # Calcula a tranposta da matriz


transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
transposed[t] = [None]*len(anArray)
for tt in range(len(anArray[t])):
transposed[t][tt] = anArray[tt][t]
return(transposed)
def somar(m1, m2): #soma as matrizes m1 e m2, e dividi todos os elementos por 2
for i in range(len(m1)):
for j in range(len(m1[0])):
for k in range(len(m1[0])):
matriz_soma.append((m1[i][j][k] + m2[i][j][k])/2)
h,i,j,k=0,0,0,0

1
while h<len(matriz_soma):
while i<len(matriz_final):
while j<len(matriz_final[0]):
while k<len(matriz_final[0]):
matriz_final[i][j][k] = matriz_soma[h]
k=k+1
h=h+1
k=0
j=j+1
j=0
i=i+1
return matriz_soma,matriz_final

def eigenvalues(matrix): # calcula os autovalores das matrizes, faz a diferença␣


,→de lambda_n+1 -lambda_n e dividi pela média

for i in range(10000):
eig.append(la.eig(matrix[i])[0])
for i in range(len(eig)):
seig.append(np.sort(eig[i]))
for i in range(len(eig)):
deig.append(seig[i][1]-seig[i][0])
media = sum(deig) / len(deig)
for i in range(len(eig)):
result.append(deig[i]/media)
for i in range(len(eig)):
result_2.append(result[i].real)
return result_2

1.0.1 Histograma para N=2 com a distribuição de Pwinger


[2]: matriz_final=np.zeros((10000,2,2))
ensemble(2)
results=eigenvalues(matriz_final)

fig = plt.figure()
0.1, 0.1, 0.8, 0.8
axes1 = fig.add_axes([1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # inset axes

s= np.linspace(0, 3.5, 10000)


y=(s*mt.pi/2)*mt.e**((-s**2)/4)
axes1.plot(s,y)
axes1.set_xlabel('Δ�/<�>')
axes1.set_ylabel('')
axes1.set_title('Distribuição de Pwigner')

2
sns.histplot(results,bins=35,kde=True,line_kws={"lw":3},alpha=0.4)

axes2.set_xlabel('Δ�/<�>')
axes2.set_ylabel('count')
axes2.set_title('Histograma para N=2');

1.0.2 Histograma para N=4 com a distribuição de Pwinger

[2]: matriz_final=np.zeros((10000,4,4))
ensemble(4)
results=eigenvalues(matriz_final)
fig = plt.figure()
0.1, 0.1, 0.8, 0.8
axes1 = fig.add_axes([1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # inset axes

s= np.linspace(0, 3.5, 10000)


y=(s*mt.pi/2)*mt.e**((-s**2)/4)
axes1.plot(s,y)
axes1.set_xlabel('Δ�/<�>')
axes1.set_ylabel('')
axes1.set_title('Distribuição de Pwigner')

sns.histplot(results,bins=35,kde=True,line_kws={"lw":3},alpha=0.4)

axes2.set_xlabel('Δ�/<�>')
axes2.set_ylabel('count')
axes2.set_title('Histograma para N=4');

3
1.0.3 Histograma para N=10 com a distribuição de Pwinger

[2]: matriz_final=np.zeros((10000,10,10))
ensemble(10)
results=eigenvalues(matriz_final)
fig = plt.figure()
0.1, 0.1, 0.8, 0.8
axes1 = fig.add_axes([1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # inset axes

s= np.linspace(0, 3.5, 10000)


y=(s*mt.pi/2)*mt.e**((-s**2)/4)
axes1.plot(s,y)
axes1.set_xlabel('Δ�/<�>')
axes1.set_ylabel('')
axes1.set_title('Distribuição de Pwigner')

sns.histplot(results,bins=35,kde=True,line_kws={"lw":3},alpha=0.4)

axes2.set_xlabel('Δ�/<�>')
axes2.set_ylabel('count')
axes2.set_title('Histograma para N=10');

4
5

Você também pode gostar