nx =10
ny=10
pmt = 7.
SKH_ev = np.zeros((nx,ny))
H_ev = np.zeros((nx,ny))
SKH_ev [1:nx-1,1:ny-1] = 8*np.ones((nx-2,ny-2))
H_ev [1:nx-1,1:ny-1] = np.ones((nx-2,ny-2))
iterations= 100
reversal=0
reversalsize=[]
def avalanche(SKH_ev,H_ev):
global reversal
H_av = H_ev.copy()
H_av_app = H_ev.copy()
for i in range (1,nx-1):
for k in range (1,ny-1):
if SKH_ev[i,k] >= pmt: #if cell > critical value
tot = 2.
H_av[i+1,k] = H_av_app[i+1,k] + tot #1
H_av[i+1,k-1] = H_av_app[i+1,k-1] + tot #2
H_av[i,k-1] = H_av_app[i,k-1] + tot #3
H_av[i-1,k] = H_av_app[i-1,k] + tot #4
H_av[i-1,k+1] = H_av_app[i-1,k+1] + tot #5
H_av[i,k+1] = H_av_app[i,k+1] + tot #6
H_av[i,k] = H_av_app[i,k] -tot #0
H_av_app = H_av
reversal +=1
return H_av
AV = avalanche(SKH_ev,H_ev)
for i in range(iterations):
avalanche(SKH_ev,H_ev)
reversalsize.append(reversal)
#plot
x, y = np.histogram(reversalsize, 1000)
plt.figure(figsize=(10,7))
plt.clf()
plt.loglog(y[0:-1],x, 'r.')
plt.title("Avalanche Size Distribution", fontsize=14)
plt.xlabel(r"$\log$" + "(Avalanche Size)", fontsize=12)
plt.ylabel(r"$\log$" + "(Frequency)", fontsize=12)
plt.show()
大家好,这是一个简单的沙堆模型代码。细胞是六边形的,细胞的邻域是六边形的。我想检查幂律趋势,但我认为我在更新 reversalsize 数组时遇到了问题。我得到一个始终具有相同值的直方图,而不是通过尾部累积的点获得正确的趋势。