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)
Example #2
0
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)