import numpy as np from Link import Link class RubberBand: # class attributes k_B = 1 def __init__(self, N, a=1., T=1.): """ RubberBand is a class that can simulate a rubber band with N incompressible links of length a. Parameters: N (int) The number of links. a (float) The fixed length of links. T (float) Temperature of the system. """ self.N = N self.a = a self.T = T self.links = self.__sample_links() def w(self, f, l): beta = (self.k_B*self.T)**(-1) return np.exp(beta*f*l) @property def length(self): return self.a * np.sum([l.direction for l in self.links]) def __sample_links(self): """ Sample N Link objects with a random direction. """ samples = np.random.random_sample((self.N,)) directions = np.ones(samples.shape) directions[samples < 0.5] = -1. directions = directions.astype(int) return [Link(d) for d in directions]