def formation_densite(Beta=numpy.ones((nbre_noeuds,nbre_noeuds))):

        Psi2_grad = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi1_grad = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi3_grad = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi1_intermediaire = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi2_intermediaire = numpy.zeros((nbre_noeuds,nbre_noeuds))
        grad = numpy.zeros((nbre_noeuds,nbre_noeuds))

        Psi1_grad = copy.copy(Psi1)
        Psi1_intermediaire = copy.copy(numpy.dot(-Psi1,Beta.transpose()))

        Psi2_grad = copy.copy(Psi2.transpose())
        Psi2_intermediaire = copy.copy(numpy.dot(-Psi2,Beta))

        produit_densite = list()
        produit_densite_log = list()
        produit_gradient = numpy.zeros((nbre_noeuds,nbre_noeuds))

        c = 0
        while c < max_infections:
            produit_densite.append(copy.copy(numpy.dot(T3[c],Beta)))
            produit_gradient = produit_gradient + matrix_inverse_elements(produit_densite[c],T3[c])
            produit_densite_log.append(copy.copy(log_elements(produit_densite[c])))
            c += 1

        grad = copy.copy((Psi1_grad + Psi2_grad) - (produit_gradient))

        for i in range(len(grad)):
            for j in range(len(grad[i])):
                if Beta[i,j] == 0:
                    grad[i,j] = 0

        return ((- somme_diag_elements(Psi1_intermediaire) - somme_diag_elements(Psi2_intermediaire) - somme_diag_elements(sum(produit_densite_log)))/max_infections, grad/max_infections)
    def formation_densite(Beta=numpy.ones((nbre_noeuds,nbre_noeuds))):
        Psi2_grad = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi1_grad = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi3_grad = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi1_intermediaire = numpy.zeros((nbre_noeuds,nbre_noeuds))
        Psi2_intermediaire = numpy.zeros((nbre_noeuds,nbre_noeuds))
        grad = numpy.zeros((nbre_noeuds,nbre_noeuds))

        Psi1_grad = copy.copy(Psi1)
        Psi1_intermediaire = copy.copy(numpy.dot(-Psi1,Beta.transpose()))

        Psi2_grad = copy.copy(Psi2.transpose())
        Psi2_intermediaire = copy.copy(numpy.dot(-Psi2,Beta))

        produit_densite = list()
        produit_densite_log = list()
        produit_gradient = numpy.zeros((nbre_noeuds,nbre_noeuds))

        c = 0
        while c < nbre_infections:
            produit_densite.append(copy.copy(numpy.dot(T3[c],Beta)))
            produit_gradient = produit_gradient + matrix_inverse_elements(produit_densite[c],T3[c])
            produit_densite_log.append(copy.copy(log_elements(produit_densite[c])))
            c += 1

        grad = copy.copy((Psi1_grad + Psi2_grad) - (produit_gradient))

        for i in range(len(grad)):
            for j in range(len(grad[i])):
                if Beta[i,j] == 0:
                    grad[i,j] = 0


        def hessienne():
            while c < nbre_infections:
                i = 0
                j = 0
                k = 0
                while i < nbre_noeuds:
                    j = 0
                    while j < nbre_noeuds:
                        k = 0
                        while k < nbre_noeuds:
                            if produit_densite[c][j,j] != 0:
                                hessienne[i*nbre_noeuds+j][k*nbre_noeuds+j] += T3[c][i,j]*T3[c][k,j]/(produit_densite[c][j,j]**2)
                            k += 1
                        j += 1
                    i += 1
                c+=1

        return ((- somme_diag_elements(Psi1_intermediaire) - somme_diag_elements(Psi2_intermediaire) - somme_diag_elements(sum(produit_densite)))/nbre_infections, grad/nbre_infections)