def LQLEP_wBarrier( LQLEP = Th.dscalar(), ldet = Th.dscalar(), v1 = Th.dvector(), N_spike = Th.dscalar(), ImM = Th.dmatrix(), U = Th.dmatrix(), V2 = Th.dvector(), u = Th.dvector(), C = Th.dmatrix(), **other): ''' The actual Linear-Quadratic-Exponential-Poisson log-likelihood, as a function of theta and M, with a barrier on the log-det term and a prior. ''' sq_nonlinearity = V2**2.*Th.sum( Th.dot(U,C)*U, axis=[1]) #Th.sum(U**2,axis=[1]) nonlinearity = V2 * Th.sqrt( Th.sum( Th.dot(U,C)*U, axis=[1])) #Th.sum(U**2,axis=[1]) ) if other.has_key('uc'): LQLEP_wPrior = LQLEP + 0.5 * N_spike * ( 1./(ldet+250.)**2. \ - 0.000001 * Th.sum(Th.log(1.-4*sq_nonlinearity))) \ + 10. * Th.sum( (u[2:]+u[:-2]-2*u[1:-1])**2. ) \ + 10. * Th.sum( (other['uc'][2:]+other['uc'][:-2]-2*other['uc'][1:-1])**2. ) \ + 0.000000001 * Th.sum( v1**2. ) # + 100. * Th.sum( v1 ) # + 0.0001*Th.sum( V2**2 ) else: LQLEP_wPrior = LQLEP + 0.5 * N_spike * ( 1./(ldet+250.)**2. \ - 0.000001 * Th.sum(Th.log(1.-4*sq_nonlinearity))) \ + 10. * Th.sum( (u[2:]+u[:-2]-2*u[1:-1])**2. ) \ + 0.000000001 * Th.sum( v1**2. ) # + 100. * Th.sum( v1 ) # + 0.0001*Th.sum( V2**2 ) eigsImM,barrier = eig( ImM ) barrier = 1-(Th.sum(Th.log(eigsImM))>-250) * \ (Th.min(eigsImM)>0) * (Th.max(4*sq_nonlinearity)<1) other.update(locals()) return named( **other )
def ldet( theta = Th.dvector('theta'), M = Th.dmatrix('M') , STA = Th.dvector('STA'), STC = Th.dmatrix('STC'), **other): ''' Return log-det of I-sym(M), for display/debugging purposes. ''' ImM = Th.identity_like(M)-(M+M.T)/2 w, v = eig(ImM) return Th.sum(Th.log(w))
def eigs( theta = Th.dvector('theta'), M = Th.dmatrix('M') , STA = Th.dvector('STA') , STC = Th.dmatrix('STC'), **other): ''' Return eigenvalues of I-sym(M), for display/debugging purposes. ''' ImM = Th.identity_like(M)-(M+M.T)/2 w,v = eig( ImM ) return w
def eig_pos_barrier( theta = Th.dvector('theta'), M = Th.dmatrix('M') , STA = Th.dvector('STA'), STC = Th.dmatrix('STC'), U = Th.dmatrix('U') , V1 = Th.dvector('V1'), **other): ''' A barrier enforcing that the log-det of M should be > exp(-6), and all the eigenvalues of M > 0. Returns true if barrier is violated. ''' ImM = Th.identity_like(M)-(M+M.T)/2 w,v = eig( ImM ) return 1-(Th.sum(Th.log(w))>-250)*(Th.min(w)>0)*(Th.min(V1.flatten())>0) \
def eigsM( M = Th.dmatrix('M') , **result): w,v = eig( Th.identity_like(M)-(M+M.T)/2 ) return w