import numpy as np from scipy.special import erf from scipy import integrate import matplotlib.pyplot as plt def VarLgauss(lc,blks,d): scl=(blks/lc)**2 return (scl**-d)*((np.sqrt(2*np.pi*scl)*erf(np.sqrt(scl/2)) +2*np.exp(-0.5*scl)-2)**d) def VarLgaussSimp(lc,blks,d): A=lc/blks #lc/L B=np.sqrt(2*np.pi) # square root of 2*pi C=erf((blks/lc)/np.sqrt(8)) # erf( (L/lc) / square root of 2) return (A*B*C)**d def arg_exp(t,lc,blks,d): scl=(blks/lc)**2 aux1=np.pi*erf(np.sqrt(scl/(4*t))) aux2=np.sqrt(np.pi)*(1-np.exp(-scl/(4*t)))*np.sqrt(4*t/scl) return t*np.exp(-t)*((aux1-aux2)**d) def VarLexp3d(lc,blks): #ic=5.378669493723924333 para lc 16 d=3 #a=1/64/np.pi t=np.arange(0.000000001,50,0.001) var=np.empty(0) for blk in blks: y=arg_exp(t,lc,blk,d) var=np.append(var,64*np.pi*((lc/(2*np.pi*blk))**d)*np.trapz(y)) return var def argVarLexp2d(lc,blk): scl=float(blk/(2*lc)) f = lambda y, x: np.exp(-1*np.sqrt(x**2 +y**2)) res=integrate.dblquad(f,-scl , scl, lambda x: -scl, lambda x: scl,epsabs=1.49e-8, epsrel=1.49e-8)#0,1,lambda x: 0, lambda x: 1) return ((lc/blk)**2)*res[0] def VarLexp2d(lc,blks): #if lc==1.33: # blks=np.append(np.arange(1,2,0.1),blks[1:]) res=np.empty(0) for blk in blks: res=np.append(res,argVarLexp2d(lc,blk)) return res