def scf_2D(g,Vinit,gamma,maxiter,tol, sigma): Vs = [Vinit] rhos = [] Cs = [] V = Vinit prevC = 0 eigs = [sigma] psiss = [] for i in range(0,maxiter): print 'Itération %d' %(i+1) rho,eigs,psis = build_rho_2D(g,V,gamma,sigma=eigs[0]) V = build_V_2D(g,rho,gamma) psiss.append(psis) Vs.append(V) rhos.append(rho) res = scipy.linalg.norm((Vs[-1] - Vs[-2])/(Vs[-1])) print "Résidu %s" %res C = sum(abs(eigs)**gamma) / classical_lt(gamma,g.d) Cs.append(C) print "C", C print "deltaC", C - prevC if C - prevC < 0: print "ATTENTION, ENERGIE DECROISSANTE" elif np.abs(C - prevC) < tol: break prevC = sum(abs(eigs)**gamma) / classical_lt(gamma,g.d) print '' return V,rho,eigs,Vs,rhos,psiss, np.array(Cs)
def compute_C(gam,d,h): print d,gam,h return h**d*compute_r(gam,d,h)/integral(gam,d)/classical_lt(gam,d)